2014.03.01. 21:51
오늘 하루종일간의 우여곡절끝에!!! 성공했습니다!
우선 OpenSource으로 배포되는 소스를 i386으로 컴파일에서 VMWare에서 사용해볼려고 했는데
실패했었습니다. 커널 패닉이 나더군요.
아무래도 Embedded용으로 축소된 커널이라 그랬나 봅니다.
(여기서 잠깐! 커널 menuconfig으로 보니 이런게 있네요~)
File system -> Miscellaneous filesystem -> SquashFS 2.2 의 서브메뉴를 보면
Image has a dummy cramfs header (8bytes) 요로코롬 어제 cramfs로 오인하게한 주범이 있었네요~ㅋ
그래서 비슷한 버젼의 커널을 다운받아서 squashfs파일을 을 복사하고 좀 수정하고 컴파일 한 뒤
VMWare에서 실행해보니 잘~ 됩니다.
그런데.. 문제가 생겼습니다.
마운트를 하려는데...
squashfs version이 0x0002, 0x0001 이어야 하는데 60(0x003c), 17717(0x4535)라고 하면서 마운트가
되지 않는겁니다!...
그래서 HexEditor으로 확인해봤더니 원래 있어야 할 버젼 위치에 00 02 00 01이 있었습니다.
맞는데... 이상하다.... 했는데 보니깐 8Bytes앞의 내용이 00 03 45 35이더군요. 8bytes라.. 어디서 많이 본거같지 않나요??
바로 dummy cramfs header입니다!
그런데 왜 오류가 나지?? 생각했습니다. 분명히 이건 잘 작동하는 커널일텐데...
커널 소스를 보기 시작했죠.
구조체도 문제 없었습니다. 커널설정에서 Image has a dummy cramfs header을 체크하면
구조체 앞에 8bytes만큼 cramfs 헤더가 생겼습니다.
inode.c 에
s_magic을 SQUASHFS_MAGIC랑 비교해서 안되면 SQUASHFS_MAGIC_SWAP와 비교하는 루틴이 있습니다.
SQUASHFS_MAGIC랑 같으면 System 이랑 같은 Endian이고,
SQUASHFS_MAGIC_SWAP랑 맞으면 System이랑 다른 Endian이란거죠.
저는 당연히 Little Endian 플랫폼에서 컴파일을 했으니 마운트하려고 하면 SQUASHFS_MAGIC_SWAP랑 맞아서
다른 Endian이라고 인식했겠죠. 분명히 다른 Endian에서 문제가 생길것이다.. 생각하고..
(1차에서 보시면 아시겠지만 GDM7205K는 Big endian이라서 문제가 생기지 않았던 겁니다.)
봤더니 바로 아래 SQUASHFS_SWAP_SUPER_BLOCK(&sblk, sBlk); 란게 있더군요.
Endian에 맞게 구조체에 반영하는 함수(사실은 Define입니다)입니다.
또 이걸 찾아보니...
#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
SQUASHFS_MEMSET(s, d, sizeof(squashfs_super_block));\
SQUASHFS_SWAP((s)->smagic, d, 0, 32); \
SQUASHFS_SWAP((s)->inodes, d, 32, 32); \
.....
딱 보면 아시겠지만 SQUASHFS_SWAP(대상, 원본, 원본offset(bits수), 크기(bits수)) 입니다.
좀 이상하지 않나요?? Dummy cramfs header환경 에서는 8bytes(64bit)가 앞에 있어서 더해줘야 하는데...
하고 CONFIG_SQUASHFS_CRAMFS_MAGIC 가 설정되어 있으면 오프셋에 64을 더하게 수정하려다가...
그냥 inode.c에서
SQUASHFS_SWAP_SUPER_BLOCK(&sblk, sBlk); 이걸
SQUASHFS_SWAP_SUPER_BLOCK(&sblk, (void*)(((uint8_t*)sBlk)+8));
으로 바꿔줬습니다.
다시 컴파일한뒤 입혀보니...
mount -o loop -t squashfs rootfs.img ./mnt
을 하니.... 됩니다~~~~~~!!!!!!!!!!!!!!!~~~~~~~~~~!!!!!!!!!! 이렇게 기쁠수가!!ㅋㅋㅎㅎ
mnt을 보니.... 있습니다~~!!!!!! 파일들이!!!!
커널패닉도 안나여~!!
bin etc init lib mnt rom sbin system usr dev home jffs2 linuxrc proc root sys tmp var |
이렇게 rootfs보는게 기쁠수가!!!
콤펙트에그 내부를 보면 RXD ,TXD UART핀이 있습니다.
그걸 터미널로 보면 부팅이 된 뒤 엔터를 누르면 login화면이 나타납니다.
그런데 root비밀번호를 몰라서 접속을 못했었죠..ㅠㅠ
바로 /etc/passwd부터 확인했습니다.
root:$1$P4IGnq8m$mgWoT4ccaDsJQdCPSAdyc1:0:0:root:/root:/bin/sh
nobody:$1$SUEXw8JF$hVyihRpBCrZDRiyTYLiQo/:503:1:Linux User,,,:/home/nobody:/bin/sh
guest:$1$ZnJXP0iT$4q5wTYt4tp4FOhg0LBVQL1:504:1:Linux User,,,:/home/guest:/bin/sh
httpd:$1$Go9d2VDh$hdugAVl/aSXpKyhN95LPZ1:505:0:Linux User,,,:/home/httpd:/bin/sh
오호~ 비번이!
물론 암호화되서 원래 비번을 알진 못하지만... 알아낸다면 shell에 접속할 수 있을겁니다!!
펌웨어 분석 COMPLETED!!!
KWF-B2700 (콤펙트에그) 펌웨어 분석... 1차 보기 : http://ablog.jichanng.pe.kr/90191276386
혹시 i386으로 컴파일된 커널모듈과 이미지가 필요하심 요청하시면 보내드리겠습니다.
2.6.34.15 squashfs수정한 커널소스 / 컴파일된 Image, 모듈 / VMWare이미지
'분석 > infomark' 카테고리의 다른 글
KWF-B2700 (콤펙트에그) 펌웨어 분석... 4차(USB RNDIS) (0) | 2015.07.31 |
---|---|
KWF-B2700 (콤펙트에그) 펌웨어 분석... 3차(password) (0) | 2015.07.31 |
KWF-B2700 (콤펙트에그) 펌웨어 분석... 1차 (0) | 2015.07.31 |
댓글