# 펌웨어 획득


- 벤더 홈페이지 다운

- 플래시메모리 덤프



# 펌웨어 분석 툴


- binwalk 


root@kali:~/Desktop# binwalk -h


 Binwalk v1.2.2-1

 Craig Heffner, http://www.devttys0.com


 Usage: binwalk [OPTIONS] [FILE1] [FILE2] [FILE3] ...


 Signature Analysis:

-B, --binwalk                 Perform a file signature scan (default)

-R, --raw-bytes=<string>      Search for a custom signature

-A, --opcodes                 Scan for executable code signatures

-C, --cast                    Cast file contents as various data types

-m, --magic=<file>            Specify an alternate magic file to use


                              ...









1) 펌웨어 시그니처 분석



root@kali:~/Desktop# binwalk n604s_kr_9_942.bin


DECIMAL   HEX       DESCRIPTION

-------------------------------------------------------------------------------------------------------------------

46692     0xB664     LZMA compressed data, properties: 0x5D, dictionary size: 16777216 bytes, uncompressed size: 209044 bytes

131072     0x20000   TRX firmware header, little endian, header size: 28 bytes, image size: 3788800 bytes, CRC32: 0x75B1E9D4 flags: 0x0, version: 1

131100     0x2001C   LZMA compressed data, properties: 0x5D, dictionary size: 65536 bytes, uncompressed size: 4378624 bytes

1565732   0x17E424   CramFS filesystem, little endian size 2351104 version #2 sorted_dirs CRC 0x9ee064f0, edition 0, 1954 blocks, 376 files










2) 펌웨어 아키텍쳐 분석



root@kali:~/Desktop# binwalk -A n604s_kr_9_942.bin  | head -10


DECIMAL   HEX       DESCRIPTION

-------------------------------------------------------------------------------------------------------------------

9280       0x2440     MIPSEL instructions, function epilogue

9376       0x24A0     MIPSEL instructions, function epilogue

9992       0x2708     MIPSEL instructions, function prologue

10028     0x272C     MIPSEL instructions, function epilogue

10276     0x2824     MIPSEL instructions, function prologue

10280     0x2828     MIPSEL instructions, function epilogue

10288     0x2830     MIPSEL instructions, function prologue











3) 펌웨어 엔트로피 분석


root@kali:~/Desktop# binwalk -E n604s_kr_9_942.bin 


    










4) 펌웨어 파일시스템 추출 



root@kali:~/Desktop# dd if=./n604s_kr_8_96.bin of=n604s_fs.bin bs=1 skip=1565732

2124820+0 records in

2124820+0 records out

2124820 bytes (2.1 MB) copied, 2.60455 s, 816 kB/s



root@kali:~/Desktop# file n604s_fs.bin

n604s_fs.bin: Linux Compressed ROM File System data, little endian size 2121728 version #2 sorted_dirs CRC 0x9094e641, edition 0, 1646 blocks, 353 files




5) 펌웨어 파일시스템 마운트


root@kali:~/Desktop# mkdir /n604fs


root@kali:~/Desktop# mount -t cramfs ./n604s_fs.bin /n604fs/

mount: warning: /n604fs/ seems to be mounted read-only.


root@kali:~/Desktop# cd /n604fs/


root@kali:/n604fs# ls

bin  cramfs  default  dev  etc  home  lib  linuxrc  ndbin  plugin  proc  save  sbin  tmp  usr  var




6) 파일시스템 분석 후 fmk 를 이용하여 바이너리 수정/파일시스템 추가 등 조작 후 build 





7) 만들어진 new-firmware.bin 이미지를 업데이트(관리자 페이지 수동 업데이트)





8) 간혹 업데이트 시 에러가 발생하는 경우 부트코드에서 검증을 수행하는 것

 - 간단한 체크섬 (우회 쉬움)

 - 암호화 (우회 어려움)




** 맥에서 바로 UART 시리얼 통신 확인하기


     screen  /dev/tty.usbmodemfa2321 115200








# 부트코드 리버싱

=====================


- 펌웨어에서 부트코드 분리 

  # dd if=~~  of=~~  skip=~~  count=~~ bs=1


- 부트코드 아키텍쳐, load address, size 지정

  => file 명령, binwalk 결과값 이용

 

- load address 찾는 법

  => 부트코드이므로 bss 섹션 초기화 과정이 있을 것 

       => li(or la), $0x80001000  등의 코드가 2번 연속으로 나오고 move $a1, $zero 루프 등으로 초기화 하는 부분을 찾음


  => 부트코드 |  bss 섹션       과 같은 구조이므로 bss 섹션 시작주소에서 부트코드 사이즈를 빼 주면 시작주소가 나옴

      => bss 섹션 시작주소 - 부트코드 사이즈 = 부트코드 시작주소


- 부트중 펌웨어 해쉬값 검증 코드 등을 찾아서 패치 









'Reversing' 카테고리의 다른 글

DBI - pin & pintool  (4) 2017.05.22
DBI - Frida 를 이용한 DBI  (3) 2016.09.07
Windbg 기본 - (3) 분석시 유용한 명령어들  (2) 2016.03.01
WinDBG 심볼 간편 설정  (0) 2016.03.01
Windows Kernel Reversing - Object 분석  (0) 2015.01.28

+ Recent posts