현재 라우터 펌웨어(Swisscom Centro Grande - 일명 Pirelli Vx226N1, 펌웨어 버전: 60200)를 수정하려고 합니다.
성공적으로 디컴파일했습니다FMK v0.99그리고 header.img
, rootfs.img
및 footer.img
이미지 부분을 얻었습니다.
이것은 rootfs.img의 binwalk입니다:
Squashfs 파일 시스템, 리틀 엔디안, 비표준 서명, 버전 4.0, 압축: gzip, 크기: 2764423바이트, 1145 inode, 블록 크기: 65536바이트, 2013년 3월 15일 금요일 00:33 :08에 생성됨
unsquashfs를 사용하여 rootfs.img를 성공적으로 디컴파일하고 시스템 폴더를 가져왔습니다. 몇 가지 사항을 변경하고(텔넷에서 셸 활성화) ./build-firmware.sh
제공된 도구(명령)를 사용하여 모든 것을 다시 패키지해 보았습니다.
최종 펌웨어 크기는 원래 펌웨어보다 큽니다. 플래시를 시도했지만 아무 일도 일어나지 않았습니다. 펌웨어, 특히 업그레이드 방법을 분석하여 올바르게 빌드하는 방법을 이해했습니다.
update.sh
업그레이드 프로세스를 처리하는 파일을 찾았습니다 (사용자가 제공한 파일을 분석하고 벽돌 현상을 방지하기 위해 모든 것이 올바른 경우에만 깜박입니다).
다음은 해당 파일의 Pastebin에 대한 링크입니다.
원본 펌웨어 파일이 해당 기능을 통해 구문 분석된다고 확신하므로 parse_yaps_image()
파일을 확인하기 위해 직접 조정해 보았지만 다음과 같은 바이너리에 대한 외부 검사가 있음을 발견했습니다.sig_verify
파일이 없으면 다른 함수를 호출하는데, 문제는 제공된 함수가 올바르지 않다는 것입니다( wrong validation token
원래 펌웨어에서도 오류가 발생합니다!)
내 목표는 파일을 분석 sig_verify
하고 알고리즘을 찾아 구성 방법을 이해하고 라우터를 올바른 방식으로 플래시하고 마지막으로 루트 셸을 얻는 것입니다(그리고 원하는 모든 것을 수정합니다).
파일을 모두 업로드했습니다.거대한 폴더따라서 나를 돕고 싶어하는 관심 있는 사람들은 필요한 모든 파일에 액세스할 수 있습니다.
폴더 60208의 파일을 확인하기 위한 두 개의 스크립트를 포함했습니다.
내가 작성한 스크립트의 결과(라우터에서 스크립트를 적용한 것임)는 다음과 같습니다.
denys@denys-pc:~/Documents/router/Vx226N1/images/modified/60208$ ./check_upgrade_yaps.sh
Parsing YAPS format...
16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.000843843 s, 19.0 kB/s
Error: wrong validation token (5b445d3b251d59753031c9d7a94ba4ab, 7d98668859855f1b9459256257fc3262)
이것은 파일의 binwalk입니다 sig_verify
.
denys@denys-pc:~/Documents/router/Vx226N1/images/modified/60208$ binwalk sig_verify
DECIMAL HEX DESCRIPTION
-------------------------------------------------------------------------------------------------------
0 0x0 ELF 32-bit MSB executable, MIPS, version 1
1921 0x781 LZMA compressed data, properties: 0x01, dictionary size: 16777216 bytes, uncompressed size: 16777472 bytes
눈치채셨다시피 이것은Meaps실행 가능. MIPS 환경(가상 머신)에서 실행해 보았는데 qemu-system-mips
성공하지 못했습니다.
qemu-system-mips -M mips -kernel ./vmlinux-2.6.18-6-qemu -initrd ./initrd.gz -hda hda.img -append "root=/dev/ram console=ttyS0" -nographic
커널과 initrd는 다음을 통해 다운로드됩니다.http://archive.debian.org/debian/dists/etch/main/installer-mips/current/images/qemu/netboot/
어떤 도움이라도 대단히 감사하겠습니다. 불분명한 점이 있으면 말씀해 주세요 :)
답변1
첫째, 디컴파일이 아닌 추출 또는 압축 해제를 의미합니다. 그러나 더 중요한 것은 qemu 시스템이 아니라 qemu 사용자 프로그램이 필요하다는 것입니다. 예를 들어, Debian GNU/Linux에서는 간단히 qemu-user-binfmt 패키지를 설치하고 tghese 바이너리를 네이티브 바이너리처럼 실행할 수 있습니다.
유일한 문제는 이러한 바이너리에는 하드 코딩된 위치(예: /lib의 uClibc)에 파일이 필요하다는 것입니다. 이 문제를 해결하는 간단한 방법은 관련 qemu 사용자(예: "qemu-mips")를 추출된 루트 디렉터리 내의 동일한 경로에 복사하는 것입니다.
cp /usr/bin/qemu-mips router-root/usr/bin
그런 다음 비지박스(Busybox)를 셸로 사용하여 내부에서 chroot를 수행할 수 있습니다.
chroot router-root bin/sh
chroot router-root bin/sig_verify ...
그러나 sig_verify가 충분히 좋은 서명 알고리즘(예: rsa)을 사용하는 경우 자신의 파일에 서명할 가능성은 희박해집니다.