지돌이의 블로그 입니다!

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이미지

Comment +4

  • 질문자 2018.07.19 12:43

    안녕하세요
    펌웨어 분석하다가 문의드립니다.
    Infomark최신 에그장비 펌웨어를보면 Squashfs 4.0버전, xz압축 포맷을 사용하고 있어 해당 버전과 압축 포맷에 맞게 squashfs-tools를 재컴파일해서 풀어보려고하는데 잘안되네요... 혹시해보셨거나 참고할 부분이 있을가요?