본문 바로가기
분석/iptime

N604M 펌웨어 분석/수정

by Joseph.Lee 2015. 7. 31.

2014.01.23. 00:13



 우선 좀 보니 N604와 N104을 비교했는데 둘의 구조는 서로 다르다. 

 

펌웨어 분석 완료.. 간단하다. 하지만 수정은..ㅠ

 

> binwalk n604m_kr_8_80.bin

DECIMAL    HEX        DESCRIPTION
-------------------------------------------------------------------------------------------
0          0x0        uImage header, header size: 64 bytes, header CRC: 0x97FE2D7C, created: Tue Oct  1 10:42:09 2013, image size: 1896384 bytes, Data Address: 0x80000000, Entry Point: 0x802CB000, data CRC: 0x3EEB6BF0, OS: Linux, CPU: MIPS, image type: OS Kernel Image, compression type: lzma, image name: "n604m"
64         0x40       LZMA compressed data, properties: 0x5D, dictionary size: 33554432 bytes, uncompressed size: 3038108 bytes
864256     0xD3000    Squashfs filesystem, little endian, non-standard signature,  version 3.0, size: 1030242 bytes,  435 inodes, blocksize: 65536 bytes, created: Tue Oct  1 10:42:05 2013

 

간단하게 uImage Header, Kernel Image, Squashfs 로 구성되어 있다.

 

firmware-mod-kit 을 이용해 쉽게 분리, rootfs을 볼 수 있는데 새로 build도 가능하다.

그레서 나만의 펌웨어를 만들기 위해 빌드 후 의도적으로 공유기의 flash memory 의 펌웨어를

망가뜨린 뒤(웹관리 펌웨어 업글창에서 펌웨어를 업글하는 도중에 전원을 차단하면 된다

하지만 펌웨어를 올바르게 수정한 뒤 업글하면 웹관리창에서도 새 펌웨어를 쓸 수 있을걸로 보인다)

tftp으로 전송!

하지만 우선 실패... UART로 확인해보니 Checksum Error가 뜬다.

 


 

쨋든 firmware mod kit가 uImage까지 수정해 주진 않는다.

 

빌드해서 만들어진 new-firmware.bin

 

0x00000000-0x0000003F 부분

0x00  27 05 19 56 97 FE 2D 7C 52 4A 28 71 00 1C EF C0

0x10  80 00 00 00 80 2C B0 00 3E EB 6B F0 05 05 02 03  

0x20  6E 36 30 34 6D 00 00 00 00 00 00 00 00 00 00 00 

0x30  00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 

 

저 세 부분을 바꿔줘야 한다.

우선 빨간색 부분 : 전체파일크기 - 0x40한 값.

파랑색 부분 : 0x40이후 데이터의 CRC32값

녹색부분 : 우선 녹색부분은 00 00 00 00 으로 바꿔준 뒤 저 0x40Bytes 의 CRC32값

 

펌웨어 업글시 Checksum 오류가 뜨지 않는다.

 

 

그런데.... 오류가 있다.

업글을 할땐 오류는 안뜨는데...

 
 
 TFTP server start
IP address: 192.168.0.1
Load address: 0x80100000
Reading: -#################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ##################################################
done
Bytes transferred = 1919436 (1d49cc hex)
Check Firmware:80100000 =>[ Check Alias ... [n604m],[n604m] ] ->[ RUN : OK ]
Run Firmware Found!!
Update Run Firmware...(1919436 bytes)
***********
 addr = 0xBFC83868 ,cnt=1577316
 addr = 0xBFCD70D0 ,cnt=1235196
 addr = 0xBFD2A938 ,cnt=893076
 addr = 0xBFD7E1A0 ,cnt=550956
 addr = 0xBFDD1A08 ,cnt=208836
 dest[0xBFE00000]=00FF
 dest[0xBFE00000]=00FF
 dest[0xBFE00000]=00FF
 
이렇게..
 dest[0xBFE00000]=00FF
이것만 무한반복;;;;;
 
안그래도 펌웨어를 풀고 다시 빌드하면 파일크기가 커지는데 그것때문인지;;;
아.. 모르겠네;;

누구 아시는분 없나여~?


반응형

댓글