JTAG Hacking mongii@grayhash
개요 하드웨어디버깅표준인 JTAG 의개념에대해이해한다. AVR 을이용하여 JTAG 을직접제어하는도구를개발해봄으로써작동원리를이해한다. 동적디버깅, Flash Memory Dump 등각종 JTAG 활용예제에대해알아본다.
JTAG 의개념이해하기 JTAG = 하드웨어디버깅의표준 CPU를마음대로제어할수있다. 즉, JTAG 연결에성공하면, 모든것을다할수있다.
JTAG 의탄생 JTAG : Joint Test Action Group 기술이름이자동시에그룹이름 하드웨어디버깅의표준 1990 년 : IEEE 에서표준화 기능 각 Pin 들의상태모니터링 Firmware 코드를 line by line 으로디버깅가능 Firmware dump, writing 가능 그외하드웨어적인모든것가능
JTAG 연결에사용되는핀들 TDI : Test Data In TDO : Test Data Out TMS : Test Mode Select TCK : Test Clock TRST : Test Reset (Optional)
TAP Controller JTAG 를제어하는핵심장치 JTAG 이무엇을할지명령을내릴수있다. 줄여서 TAPC 라고한다.
TAPC 상태도 (State machine)
TMS 와 TCK 를먼저이해하자 TMS 와 TCK 는 TAPC 의상태를변화시킨다. TMS : 방향전환 TCK : 이동
TDO, TDI, TRST TDO : JTAG 으로부터출력이나오는핀 TDI : JTAG 이입력을받는핀 TRST ( 필수는아니다 ) 리셋핀 Test-Logic Reset LOW 신호를주면 JTAG 이초기화됨 즉, TAPC 와레지스터들이초기화됨
Rising edge 와 Falling edge TCK : Clock 제공 ( 해커 -> 대상장비 ) TDI/TMS : Rising Edge 에실어보낸다. TDO : Falling Edge 직후에받는다.
TAPC 의상태설명
IR 과 DR IR : Instruction Register ( 명령레지스터 ) 4 비트크기 JTAG 을어떤모드로작동시킬것인가? 외부로노출된 TDI 와 TDO 를내부의어디에연결시킬지결정한다. 연결대상 : 내부 Boundary Cell 혹은특정레지스터 DR : Data Register ( 데이터레지스터 ) 실제데이터전송을위한레지스터 위 IR 에의해연결된대상의값이 DR 에저장된다. IR 의값에따라자동으로연결된다 종류 Boundary Cell 의값 그외레지스터들의값 (ex. ID Register, Bypass Register)
Instruction 의종류 (AVR 기준 ) 1111 : BYPASS JTAG 제어없이신호를그냥 bypass 시킴 0001 : TDI 와 TDO 를 ID 레지스터에연결 0010 : TDI 와 TDO 를 Cell 에연결, SAMPLE, 모니터링 0000 : TDI 와 TDO 를 Cell 에연결, EX-Test MCU 의출력핀을제어한다. 가장많이사용되는기능 1100 : RESET
대상 CPU, MCU 의 JTAG 이해하기
Atmega128A datasheet 254~255p
TAPC 상태설명 Test-Logic-Reset JTAG 초기화 Run-Test/Idle JTAG 작동시작
TAPC 상태설명 Select DR-Scan DR 영역과 IR 영역에대한분기점 Capture DR 현재 Cell 의내용을캡쳐 이때, 값이업데이트된다 Shift DR 해당값을 TDO 으로 1 비트씩출력 Exit1 DR, Pause DR, Exit2 DR : 분기점 Update DR Shift 하면서새로들어간 DR 값업데이트
TAPC 상태설명 Select IR-Scan : 분기점 Capture IR 현재 IR 의값을가져온다 Shift IR 새로운 IR 값을넣고, 동시에출력 Exit1 IR, Pause IR, Exit2 IR : 분기점 Update IR 앞서받은 IR 값업데이트
SHIFT-IR 과 SHIFT-DR TMS=0 일때자신을다시실행한다. 즉, 자신을다시실행할때마다값이 shift 된다. 이때새로운값을넣어주면 (TDI) 동시에기존값이밖으로 (TDO) 출력된다.
무엇을어디로 Shift 시키는가? SHIFT-IR TDI 가 IR 로연결된다. 즉, 우리가보내는입력이 IR 로전달된다. 동시에기존값이 TDO 로나온다. SHIFT-DR TDI 가 DR 로연결된다. 즉, 우리가보내는입력이 DR 로전달된다. 동시에기존값이 TDO 로나온다.
Capture-IR 과 Shift-IR Capture-IR IR 값을빼내올준비를한다. ( 값획득 ) 실제빼오는건 SHIFT-IR 에서한다. Shift-IR 쓰기와읽기를동시에한다 새값을넣으면기존값은나온다.
TAPC 를 reset 하는방법 1. /TRST 에 LOW 신호를준다. * TRST 핀이있을경우에해당 2. TMS 를 1 로둔채최대 6 번이동한다. - 현재어떤상태에있던지무조건 reset 으로간다.
JTAG 시스템의회로도
JTAG tool 개발실습 - IDCODE 읽기 -
IDCODE 읽기과정요약 IR 에 IDCODE 명령패턴을집어넣는다. Shift-IR, Update-IR 이용 DR 값을읽어서꺼내온다.
ID 레지스터란? Identification Register 32비트 비트 0 : IDCODE 존재여부 비트 1~11 : 제조사 비트 12~26 : 부품번호 비트 27~31 : 버전번호
ID 레지스터란?
IDCODE 요청 IR 레지스터 0001 이되어야함 즉, JTAG 의명령모드를 0001 로바꾸어야함 어떻게? TAPC 의상태를 Shift-IR 까지옮긴후, TDI 에 0001 을순서대로입력한다. 최하위비트부터입력, 즉반대로 1000 그럼 DR 레지스터에 IDCODE 가담길준비가된다.
IDCODE 획득 Shift-DR 로이동 DR <-> TDI/TDO 연결 TCK 가 1->0 으로변할때값이나옴 TDI 에아무값 ( 그냥 0) 을 32 번밀어넣어줘서 32 비트의 IDCODE 가나온게만든다.
실습문제 래빗보드 IDCODE 를가져오는 JTAG 툴을개발해보세요. 절차 JMOD128 보드의입출력핀을래빗보드의 JTAG 핀에입력한다. (TDO, TDI, TMS, TCK) TAPC 상태변화를통해 JTAG 을제어한다. TDO 로 IDCODE 값을얻어온다.
주의사항 래빗보드의 AVR 퓨즈비트들중 JTAGEN 값이 ENABLE 되어있어야한다. 퓨즈비트란? MCU 의기본상태를설정하는값 JTAGEN 상태에선 PORTF 의상위 4 비트를사용하지못하게된다.
핀들의현재값알아내기 (Monitoring)
핀들의현재값알아내기 IR => SAMPLE(Monitor) 모드 (0010) 로선택 DR 에 boundary-scan cell chain 이연결된다 Shift-DR : 204 개의 0 을밀어넣기 동시에 TDI 로나오는값을빼온다
결과출력예제
Boundary-Scan Order 몇번째 Boundary 가어떤핀에연결되어있는지를보여주는지도 Atmega128A : 총 204 개 254page 에있다. http://www.atmel.com/images/atmel- 8151-8-bit-AVR- ATmega128A_Datasheet.pdf
BSDL Boundary-scan Description Language Files (BSDL) Boundary Scan order 정보를담고있는공식파일포맷 AVR : http://www.atmel.com/tools/avrbsdlfiles.aspx
Atmega128 BSDL
Atmega128 BSDL
실습문제 래빗보드전핀의현재상태를가져오는 JTAG 툴을개발해보세요.
핀들의값제어하기
핀들의값제어하기 앞서얻어낸비트배열을가지고있는다. 제어를원하는비트를변조한다. IR => EXTEST 모드로변경한다. Shift-DR : 204개의새로운패턴을밀어넣는다. Update-DR을해준다.
JTAG 을이용한 Firmware 획득
일반적인 Firmware 획득 Flash memory 를 PCB 에서 desoldering 한다.
일반적인 Firmware 획득 Rom writer 혹은직접개발한도구를이용하여 Firmware 를획득한다.
일반적인 Firmware 획득 01010011101101010111~~ Flash memory 프로토콜에맞게전기신호를전송한다.
JTAG 을이용한 Flash Memory 덤프
JTAG 을이용한 Flash Memory 덤프 01010011101101010111~~ CPU 야너는이제부터 Flash dumper 다 ~
CPU 별 JTAG 장비들예시 ARM 용 ARM 용 AVR 용 MIPS 용
ARM 용 JTAG (JK JTAG)
ARM 용 JTAG (H-JTAG)
ARM 용 JTAG (J-Link)
JTAG 을이용한갤럭시 S1 Firmware 획득실습
갤럭시 S1 Spec ARM Cortex A8 : 이에맞는 JTAG 장비필요
갤럭시 S1 의하드웨어구성
갤럭시 S 의저장장치구성 onenand 여러개의파티션으로분할 /system/ (300 메가 ) /dbdata/ (100 메가 ) /cache/ (30 메가 ) movinand 2 개의파티션으로분할 내장 SD 카드 (14 기가 ) /data/ (2 기가 ) /dev/block/mmcxxx
RIFFBOX JTAG 실습장비소개
무적의 RIFFBOX JTAG 핸드폰, 스마트폰복구용도의 JTAG 일반디버깅용도로도사용가능 상대적으로저렴하다.
RIFFBOX JTAG 호환목록
RIFFBOX JTAG 호환목록
OneNAND 제어가능
갤럭시 S1 JTAG 포트찾기
갤럭시 S1 JTAG 포트찾기
갤럭시 S1 JTAG 포트찾기
어떻게연결하지? 1. 납땜 실납 확대도구 본인은세번의실패후에포기하였습니다.. 2. 전용 JIG 이용 해외쇼핑몰에서구매가능 http://www.aliexpress.com/item/gpg-33-in- 1-EASY-JIGS-33-IN-1-GPG-EASY- JIGS/1708309400.html
JTAG 납땜시도이야기
JTAG 전용 JIG
갤럭시 S1 <-> RIFFBOX 연결
갤럭시 S1 <-> RIFFBOX 연결
RIFFBOX JTAG 설치 http://www.riffbox.org/
RIFFBOX JTAG 설치 Drive 미인식시수동설치 \RIFF JTAG Manager\Drivers\
RIFFBOX JTAG 설치 RIFF Box JTAG Manager 실행 Box Service -> Firmware Update
갤럭시 S1 (M110S) 모듈설치 Box Service -> Check for Updates
JTAG 연결테스트 JTAG connect 후에도 target device 는정상적으로작동한다. (Halt the Target 을실행하지않는한 )
메모리읽기 / 쓰기테스트 Memory Read/Write 는올바른주소를 Address 에먼저설정해야함 Target Go 도마찬가지
펌웨어덤프실습
덤프된펌웨어파일의포맷 Samsung RFS(Robust File System)
펌웨어바이너리내의파일추출
펌웨어바이너리내의파일추출
펌웨어바이너리내의파일추출
펌웨어바이너리내의파일추출
펌웨어바이너리내의파일추출
JTAG 을이용한갤럭시 S1 Debugging 예제
UserfulPlugins -> emmcdiskpartitions 설치
Useful Plugins 탭 -> Activate Plugin
Boot Loader 덤프
Binary 로딩
Binary 로딩
Header 영역 SKIP
Binary 로딩
GDBServer 설치
GDBServerRIFF.exe 실행
Remote debugger 세팅
Debugger -> Start process
JTAG 동적디버깅참고영상 http://www.riffbox.org/riff_jtag_gdb_server_ida_debug_samsung_i9100.swf
JTAG Pin 찾기
JTAG 핀을찾는방법들 PCB 에 JTAG 이라고인쇄된식자확인 TDO, TDI, TMS, TCK 식자확인 CPU JTAG 핀들과의연결추적 JTAG Pin Scanning
JTAG 찾기예제
다양한 JTAG 인터페이스들
JTAG 찾기예제
JTAG 찾기예제
JTAG 찾기예제
JTAG 찾기예제
JTAG 찾기예제
JTAG 찾기예제
JTAG Pin Scanner
JTAG Pin Scanner https://github.com/cyphunk/jtagenum/blob/master/jtagenum.pde
JTAGulator 사용예제
JTAGulator 사용예제
JTAGEnum 사용예제
결론 JTAG 은개발자는물론해커에게매우유용한디버깅시스템이다. JTAG 을이용하면 Flash Memory 덤프및 Real-time debugging 이가능해진다. JTAG 연결에성공하면, 대상기기의내부를장악한것과다름없다.
Q/A
감사합니다.