Reverse engineering router เป€เบฎเบทเบญเบ™เปƒเบŠเป‰ binwalk. เป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบŠเบญเบšเปเบงเป€เบฃเบปเบฒเป€เบ•เบตเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเป?

Reverse engineering router เป€เบฎเบทเบญเบ™เปƒเบŠเป‰ binwalk. เป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบŠเบญเบšเปเบงเป€เบฃเบปเบฒเป€เบ•เบตเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเป?

เบชเบญเบ‡เบชเบฒเบกเบกเบทเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบ‚เป‰เบญเบเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบเบฑเบšเบ„เบทเบ™เป€เบŸเบตเบกเปเบงเบ‚เบญเบ‡ router เบ‚เบญเบ‡เบ‚เป‰เบญเบเป‚เบ”เบเปƒเบŠเป‰ binwalk.

เบ‚เป‰เบญเบเบŠเบทเป‰เป€เบญเบ‡ router เป€เบฎเบทเบญเบ™ TP-Link Archer C7. เบšเปเปˆเปเบกเปˆเบ™ router เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”, เปเบ•เปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ.

เบ—เบธเบเป†เบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบŠเบทเป‰ router เปƒเบซเบกเปˆ, เบ‚เป‰เบญเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡ openwrt. เป€เบžเบทเปˆเบญโ€‹เบซเบเบฑเบ‡? เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบœเบนเป‰เบœเบฐเบฅเบดเบ”เบšเปเปˆเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ routers เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปเบฅเบฐเปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒ, เบŠเบญเบšเปเบงเป„เบ”เป‰เบเบฒเบเป€เบ›เบฑเบ™เบฅเป‰เบฒเบชเบฐเป„เบซเบก, เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆเบ›เบฒเบเบปเบ”, เปเบฅเบฐเบญเบทเปˆเบ™เป†, เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบกเบฑเบ firmware OpenWRT, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบตเปˆเบ”เบตเบˆเบฒเบเบŠเบธเบกเบŠเบปเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”.

เบกเบตเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบผเบ” OpenWRT, เบ‚เป‰เบญเบเบเบฑเบ‡ เบ”เบฒเบงเป‚เบซเบผเบ”เบฎเบนเบšเป€เบŸเบตเบกเปเบงเบซเบผเป‰เบฒเบชเบธเบ” เบžเบฒเบเปƒเบ•เป‰ Archer C7 เบ‚เบญเบ‡เบ‚เป‰เบญเบเปƒเบซเบกเปˆเบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบฒเบ‡เบเบฒเบ™เปเบฅเบฐเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเบดเป€เบ„เบฒเบฐเบกเบฑเบ™. เบขเปˆเบฒเบ‡เบ”เบฝเบงเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบกเปˆเบงเบ™เบŠเบทเปˆเบ™เปเบฅเบฐเบชเบปเบ™เบ—เบฐเบ™เบฒเบเปˆเบฝเบงเบเบฑเบš binwalk.

binwalk เปเบกเปˆเบ™เบซเบเบฑเบ‡?

Binwalk เป€เบ›เบฑเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เปเบซเบผเปˆเบ‡โ€‹เป€เบ›เบตเบ”โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบงเบดโ€‹เป€เบ„เบฒเบฐโ€‹, เบงเบดโ€‹เบชเบฐโ€‹เบงเบฐโ€‹เบเปเบฒโ€‹เบ›เบตเป‰เบ™โ€‹เบเบฑเบšโ€‹เบเบฑเบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบเบฑเบ”โ€‹เบฎเบนเบšโ€‹เบžเบฒเบš firmwareโ€‹.

เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ›เบต 2010 เป‚เบ”เบ Craig Heffner, binwalk เบชเบฒเบกเบฒเบ”เบชเบฐเปเบเบ™เบฎเบนเบšเบžเบฒเบšเป€เบŸเบตเบกเปเบง เปเบฅเบฐเบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒ, เบเปเบฒเบ™เบปเบ” เปเบฅเบฐเบชเบฐเบเบฑเบ”เบฎเบนเบšเบžเบฒเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ, เบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰, เบเบฒเบ™เบšเบตเบšเบญเบฑเบ”เบฎเบงเบšเบฎเบงเบก, bootloaders เปเบฅเบฐ kernels, เบฎเบนเบšเปเบšเบšเป„เบŸเบฅเปŒเป€เบŠเบฑเปˆเบ™ JPEG เปเบฅเบฐ PDF, เปเบฅเบฐเบญเบทเปˆเบ™เป†เบญเบตเบ.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ binwalk เป€เบžเบทเปˆเบญเบเบฑเบšเบ„เบทเบ™เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เป€เบŸเบตเบกเปเบงเป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ. เบ„เบปเป‰เบ™เบซเบฒเป„เบŸเบฅเปŒเป„เบšเบ™เบฒเบฃเบตเบชเปเบฒเบฅเบฑเบšเบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ, เบชเบฐเบเบฑเบ”เป„เบŸเบฅเปŒ, เปเบฅเบฐเบŠเบญเบเบซเบฒ backdoors เบซเบผเบทเปƒเบšเบขเบฑเป‰เบ‡เบขเบทเบ™เบ”เบดเบˆเบดเบ•เบญเบ™. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ opcodes เบชเปเบฒเบฅเบฑเบšเบŠเปเปˆเบ‚เบญเบ‡ CPU เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฐเบเบฑเบ”เบฎเบนเบšเบžเบฒเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบชเบฐเป€เบžเบฒเบฐ (passwd, shadow, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบ—เปเบฒเบฅเบฒเบ hashes เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™. เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เปเบเบโ€‹เบชเบญเบ‡โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เบชเบญเบ‡โ€‹เบซเบผเบทโ€‹เบซเบผเบฒเบโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ entropy เบเปˆเบฝเบงเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเบตเบšเบญเบฑเบ”เบซเบผเบทเบฅเบฐเบซเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบฅเบฑเบš. เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡.

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบตเบขเบนเปˆ :)

binwalk เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบ„เบธเบ™เบ™เบฐเบชเบปเบกเบšเบฑเบ”เบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡ binwalk เปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบเบ™เบฅเบฒเบเป€เบŠเบฑเบ™เบ‚เบญเบ‡เบกเบฑเบ™. Binwalk เบชเบฒเบกเบฒเบ”เบชเบฐเปเบเบ™เบฎเบนเบšเบžเบฒเบšเป€เบŸเบตเบกเปเบงเป€เบžเบทเปˆเบญเบ„เบปเป‰เบ™เบซเบฒเบ›เบฐเป€เบžเบ”เป„เบŸเบฅเปŒเปƒเบ™เบ•เบปเบง เปเบฅเบฐเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ•เปˆเบฒเบ‡เป†.

เป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบšเป utility line เบ„เปเบฒเบชเบฑเปˆเบ‡ file?

file /bin/bash
/bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=12f73d7a8e226c663034529c8dd20efec22dde54, stripped

เบ—เบตเบกเบ‡เบฒเบ™ fileเป€เบšเบดเปˆเบ‡เบซเบปเบงเป„เบŸเบฅเปŒเปเบฅเบฐเบŠเบญเบเบซเบฒเบฅเบฒเบเป€เบŠเบฑเบ™ (เป€เบฅเบ magic) เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ›เบฐเป€เบžเบ”เป„เบŸเบฅเปŒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเป„เบŸเบฅเปŒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบฅเปเบฒเบ”เบฑเบšเบ‚เบญเบ‡ bytes 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A, เบกเบฑเบ™เบฎเบนเป‰เบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ PNG. เบชเบธเบ” Wikipedia เบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™เป„เบŸเบฅเปŒเบ—เบปเปˆเบงเป„เบ›.

Binwalk เป€เบฎเบฑเบ”เบงเบฝเบเปเบšเบšเบ”เบฝเบงเบเบฑเบ™. เปเบ•เปˆเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบฅเบฒเบเป€เบŠเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ, binwalk เบˆเบฐเบชเบฐเปเบเบ™เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, binwalk เบชเบฒเบกเบฒเบ”เบชเบฐเบเบฑเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบฎเบนเบšเบžเบฒเบš.

เป€เบ„เบทเปˆเบญเบ‡เบกเบท file ะธ binwalk เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libmagic เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบฅเบฒเบเป€เบŠเบฑเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ. เปเบ•เปˆ binwalk เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฑเบ‡เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบฅเบฒเบเป€เบŠเบฑเบ™ magic เปเบšเบšเบเปเบฒเบ™เบปเบ”เป€เบญเบ‡เป€เบžเบทเปˆเบญเบ„เบปเป‰เบ™เบซเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเบšเบตเบšเบญเบฑเบ” / zip, เบชเปˆเบงเบ™เบซเบปเบงเบ‚เบญเบ‡เป€เบŸเบตเบกเปเบง, Linux kernels, bootloaders, เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบกเบฒเบกเปˆเบงเบ™เบ™เบณเบเบฑเบ™เบšเปเปˆ?

เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ Binwalk

Binwalk เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เปƒเบ™เบซเบผเบฒเบเป€เบงเบ—เบตเบฅเบงเบกเบ—เบฑเบ‡ Linux, OSX, FreeBSD เปเบฅเบฐ Windows.

เป€เบžเบทเปˆเบญเบ•เบดเบ”เบ•เบฑเป‰เบ‡ binwalk เป€เบงเบตเบŠเบฑเบ™เบซเบผเป‰เบฒเบชเบธเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ เบ”เบฒเบงเป‚เบซเบฅเบ”เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ เปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบก เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ เบซเบผเบท เบ„เบนเปˆเบกเบทเบ”เปˆเบงเบ™, เบกเบตเบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™.

Binwalk เบกเบตเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบ:

$ binwalk

Binwalk v2.2.0
Craig Heffner, ReFirmLabs
https://github.com/ReFirmLabs/binwalk

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

Signature Scan Options:
    -B, --signature              Scan target file(s) for common file signatures
    -R, --raw=<str>              Scan target file(s) for the specified sequence of bytes
    -A, --opcodes                Scan target file(s) for common executable opcode signatures
    -m, --magic=<file>           Specify a custom magic file to use
    -b, --dumb                   Disable smart signature keywords
    -I, --invalid                Show results marked as invalid
    -x, --exclude=<str>          Exclude results that match <str>
    -y, --include=<str>          Only show results that match <str>

Extraction Options:
    -e, --extract                Automatically extract known file types
    -D, --dd=<type:ext:cmd>      Extract <type> signatures, give the files an extension of <ext>, and execute <cmd>
    -M, --matryoshka             Recursively scan extracted files
    -d, --depth=<int>            Limit matryoshka recursion depth (default: 8 levels deep)
    -C, --directory=<str>        Extract files/folders to a custom directory (default: current working directory)
    -j, --size=<int>             Limit the size of each extracted file
    -n, --count=<int>            Limit the number of extracted files
    -r, --rm                     Delete carved files after extraction
    -z, --carve                  Carve data from files, but don't execute extraction utilities
    -V, --subdirs                Extract into sub-directories named by the offset

Entropy Options:
    -E, --entropy                Calculate file entropy
    -F, --fast                   Use faster, but less detailed, entropy analysis
    -J, --save                   Save plot as a PNG
    -Q, --nlegend                Omit the legend from the entropy plot graph
    -N, --nplot                  Do not generate an entropy plot graph
    -H, --high=<float>           Set the rising edge entropy trigger threshold (default: 0.95)
    -L, --low=<float>            Set the falling edge entropy trigger threshold (default: 0.85)

Binary Diffing Options:
    -W, --hexdump                Perform a hexdump / diff of a file or files
    -G, --green                  Only show lines containing bytes that are the same among all files
    -i, --red                    Only show lines containing bytes that are different among all files
    -U, --blue                   Only show lines containing bytes that are different among some files
    -u, --similar                Only display lines that are the same between all files
    -w, --terse                  Diff all files, but only display a hex dump of the first file

Raw Compression Options:
    -X, --deflate                Scan for raw deflate compression streams
    -Z, --lzma                   Scan for raw LZMA compression streams
    -P, --partial                Perform a superficial, but faster, scan
    -S, --stop                   Stop after the first result

General Options:
    -l, --length=<int>           Number of bytes to scan
    -o, --offset=<int>           Start scan at this file offset
    -O, --base=<int>             Add a base address to all printed offsets
    -K, --block=<int>            Set file block size
    -g, --swap=<int>             Reverse every n bytes before scanning
    -f, --log=<file>             Log results to file
    -c, --csv                    Log results to file in CSV format
    -t, --term                   Format output to fit the terminal window
    -q, --quiet                  Suppress output to stdout
    -v, --verbose                Enable verbose output
    -h, --help                   Show help output
    -a, --finclude=<str>         Only scan files whose names match this regex
    -p, --fexclude=<str>         Do not scan files whose names match this regex
    -s, --status=<int>           Enable the status server on the specified port

เบเบฒเบ™เบชเบฐเปเบเบ™เบฎเบนเบšเบžเบฒเบš

เปƒเบซเป‰เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบเบเบฒเบ™เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเบฅเบฒเบเป€เบŠเบฑเบ™เบžเบฒเบเปƒเบ™เบฎเบนเบšเบžเบฒเบš (เบฎเบนเบšเบžเบฒเบšเบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒ TP-Link).

เปเบฅเปˆเบ™ binwalk เบเบฑเบš --signature parameter:

$ binwalk --signature --term archer-c7.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
------------------------------------------------------------------------------------------
21876         0x5574          U-Boot version string, "U-Boot 1.1.4-g4480d5f9-dirty (May
                              20 2019 - 18:45:16)"
21940         0x55B4          CRC32 polynomial table, big endian
23232         0x5AC0          uImage header, header size: 64 bytes, header CRC:
                              0x386C2BD5, created: 2019-05-20 10:45:17, image size:
                              41162 bytes, Data Address: 0x80010000, Entry Point:
                              0x80010000, data CRC: 0xC9CD1E38, OS: Linux, CPU: MIPS,
                              image type: Firmware Image, compression type: lzma, image
                              name: "u-boot image"
23296         0x5B00          LZMA compressed data, properties: 0x5D, dictionary size:
                              8388608 bytes, uncompressed size: 97476 bytes
64968         0xFDC8          XML document, version: "1.0"
78448         0x13270         uImage header, header size: 64 bytes, header CRC:
                              0x78A267FF, created: 2019-07-26 07:46:14, image size:
                              1088500 bytes, Data Address: 0x80060000, Entry Point:
                              0x80060000, data CRC: 0xBB9D4F94, OS: Linux, CPU: MIPS,
                              image type: Multi-File Image, compression type: lzma,
                              image name: "MIPS OpenWrt Linux-3.3.8"
78520         0x132B8         LZMA compressed data, properties: 0x6D, dictionary size:
                              8388608 bytes, uncompressed size: 3164228 bytes
1167013       0x11CEA5        Squashfs filesystem, little endian, version 4.0,
                              compression:xz, size: 14388306 bytes, 2541 inodes,
                              blocksize: 65536 bytes, created: 2019-07-26 07:51:38
15555328      0xED5B00        gzip compressed data, from Unix, last modified: 2019-07-26
                              07:51:41

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบฎเบนเบšเบžเบฒเบšเบ™เบตเป‰.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฎเบนเบšเบžเบฒเบš เป€เบฎเบทเบญ เบ”เบณ เบ™เป‰ เบณ เป€เบ›เบฑเบ™ bootloader (เบชเปˆเบงเบ™เบซเบปเบงเบฎเบนเบšเบžเบฒเบšเบขเบนเปˆเบ—เบตเปˆ 0x5AC0 เปเบฅเบฐเบฎเบนเบšเบžเบฒเบš bootloader เบ—เบตเปˆเบ–เบทเบเบšเบตเบšเบญเบฑเบ”เบขเบนเปˆเบ—เบตเปˆ 0x5B00). เบญเบตเบ‡เปƒเบชเปˆเบชเปˆเบงเบ™เบซเบปเบงเบ‚เบญเบ‡ uImage เบ—เบตเปˆ 0x13270, เบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเปเบกเปˆเบ™ MIPS เปเบฅเบฐ Linux kernel เปเบกเปˆเบ™เบฎเบธเปˆเบ™ 3.3.8. เปเบฅเบฐเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆ 0x11CEA5, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒ rootfs เป€เบ›เบฑเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ squashfs.

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบฐเบเบฑเบ” bootloader (U-Boot) เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ dd:

$ dd if=archer-c7.bin of=u-boot.bin.lzma bs=1 skip=23296 count=41162
41162+0 records in
41162+0 records out
41162 bytes (41 kB, 40 KiB) copied, 0,0939608 s, 438 kB/s

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฎเบนเบšเบžเบฒเบšเบ–เบทเบเบšเบตเบšเบญเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ LZMA, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ decompress เบกเบฑเบ™:

$ unlzma u-boot.bin.lzma

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบฎเบนเบšเบžเบฒเบš U-Boot:

$ ls -l u-boot.bin
-rw-rw-r-- 1 sprado sprado 97476 Fev  5 08:48 u-boot.bin

เบงเบดเบ—เบตเบเบฒเบ™เบŠเบญเบเบซเบฒเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบชเปเบฒเบฅเบฑเบš bootargs?

$ strings u-boot.bin | grep bootargs
bootargs
bootargs=console=ttyS0,115200 board=AP152 rootfstype=squashfs init=/etc/preinit mtdparts=spi0.0:128k(factory-uboot),192k(u-boot),64k(ART),1536k(uImage),14464k@0x1e0000(rootfs) mem=128M

U-Boot เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ•เบปเบงเปเบ› bootargs เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบœเปˆเบฒเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป„เบ›เบซเบฒ kernel Linux. เปเบฅเบฐเบˆเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ”เบตเบ‚เบถเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ flash เบ‚เบญเบ‡เบญเบธเบ›เบฐเบเบญเบ™.

เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบชเบฐเบเบฑเบ”เบฎเบนเบšเบžเบฒเบšเปเบเปˆเบ™ Linux?

$ dd if=archer-c7.bin of=uImage bs=1 skip=78448 count=1088572
1088572+0 records in
1088572+0 records out
1088572 bytes (1,1 MB, 1,0 MiB) copied, 1,68628 s, 646 kB/s

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบฎเบนเบšเบžเบฒเบšเป„เบ”เป‰เบ–เบทเบเบชเบฐเบเบฑเบ”เบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ file:

$ file uImage
uImage: u-boot legacy uImage, MIPS OpenWrt Linux-3.3.8, Linux/MIPS, Multi-File Image (lzma), 1088500 bytes, Fri Jul 26 07:46:14 2019, Load Address: 0x80060000, Entry Point: 0x80060000, Header CRC: 0x78A267FF, Data CRC: 0xBB9D4F94

เบฎเบนเบšเปเบšเบšเป„เบŸเบฅเปŒ uImage เป‚เบ”เบเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเป‰เบงเปเบกเปˆเบ™เบฎเบนเบšเบžเบฒเบšเปเบเปˆเบ™ Linux เบ—เบตเปˆเบกเบตเบชเปˆเบงเบ™เบซเบปเบงเป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เปƒเบซเป‰เบฅเบถเบšเบชเปˆเบงเบ™เบซเบปเบงเบ™เบตเป‰เบญเบญเบเป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบนเบšเบžเบฒเบš kernel Linux เบชเบธเบ”เบ—เป‰เบฒเบ:

$ dd if=uImage of=Image.lzma bs=1 skip=72
1088500+0 records in
1088500+0 records out
1088500 bytes (1,1 MB, 1,0 MiB) copied, 1,65603 s, 657 kB/s

เบฎเบนเบšเบžเบฒเบšเป„เบ”เป‰เบ–เบทเบเบšเบตเบšเบญเบฑเบ”, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ–เบญเบ”เบกเบฑเบ™เบญเบญเบ:

$ unlzma Image.lzma

เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบฎเบนเบšเบžเบฒเบš kernel Linux:

$ ls -la Image
-rw-rw-r-- 1 sprado sprado 3164228 Fev  5 10:51 Image

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเบฑเบšเบฎเบนเบšเบžเบฒเบšเปเบเปˆเบ™? เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบชเบฐเบ•เบฃเบดเบ‡เปƒเบ™เบฎเบนเบšเบžเบฒเบšเปเบฅเบฐเบŠเบญเบเบซเบฒเบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ Linux kernel เปเบฅเบฐเบฎเบฝเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบเปˆเบ™:

$ strings Image | grep "Linux version"
Linux version 3.3.8 (leo@leo-MS-7529) (gcc version 4.6.3 20120201 (prerelease) (Linaro GCC 4.6-2012.02) ) #1 Mon May 20 18:53:02 CST 2019

เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ firmware เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒเปƒเบ™เบ›เบตเบเบฒเบเบ™เบตเป‰ (2019), เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰ Linux kernel เบฎเบธเปˆเบ™เป€เบเบปเปˆเบฒ (3.3.8) เบ—เบตเปˆเบ›เปˆเบญเบเบญเบญเบเบกเบฒเปƒเบ™เบ›เบต 2012, เบฅเบงเบšเบฅเบงเบกเบเบฑเบš GCC เบฎเบธเปˆเบ™เป€เบเบปเปˆเบฒเบซเบผเบฒเบ (4.6) เบ•เบฑเป‰เบ‡เปเบ•เปˆเบ›เบต 2012. !
(เปเบ›เบ›เบฐเบกเบฒเบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เป€เบŠเบทเปˆเบญ routers เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปƒเบ™เบซเป‰เบญเบ‡เบเบฒเบ™เปเบฅเบฐเบขเบนเปˆเป€เบฎเบทเบญเบ™?)

เบ”เป‰เบงเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ --opcodes เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ binwalk เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปเบฅเบฐเบเปเบฒเบ™เบปเบ”เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ‚เบญเบ‡เบฎเบนเบšเบžเบฒเบš:

$ binwalk --opcodes Image
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
2400          0x960           MIPS instructions, function epilogue
2572          0xA0C           MIPS instructions, function epilogue
2828          0xB0C           MIPS instructions, function epilogue

เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบ? เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบชเบฐเบเบฑเบ”เบฎเบนเบšเบžเบฒเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เปƒเบซเป‰เปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบ binwalk --extract:

$ binwalk --extract --quiet archer-c7.bin

เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบฎเบฒเบเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™เบˆเบฐเบ–เบทเบเปเบเบเบญเบญเบเป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ:

$ cd _archer-c7.bin.extracted/squashfs-root/

$ ls
bin  dev  etc  lib  mnt  overlay  proc  rom  root  sbin  sys  tmp  usr  var  www

$ cat etc/banner
     MM           NM                    MMMMMMM          M       M
   $MMMMM        MMMMM                MMMMMMMMMMM      MMM     MMM
  MMMMMMMM     MM MMMMM.              MMMMM:MMMMMM:   MMMM   MMMMM
MMMM= MMMMMM  MMM   MMMM       MMMMM   MMMM  MMMMMM   MMMM  MMMMM'
MMMM=  MMMMM MMMM    MM       MMMMM    MMMM    MMMM   MMMMNMMMMM
MMMM=   MMMM  MMMMM          MMMMM     MMMM    MMMM   MMMMMMMM
MMMM=   MMMM   MMMMMM       MMMMM      MMMM    MMMM   MMMMMMMMM
MMMM=   MMMM     MMMMM,    NMMMMMMMM   MMMM    MMMM   MMMMMMMMMMM
MMMM=   MMMM      MMMMMM   MMMMMMMM    MMMM    MMMM   MMMM  MMMMMM
MMMM=   MMMM   MM    MMMM    MMMM      MMMM    MMMM   MMMM    MMMM
MMMM$ ,MMMMM  MMMMM  MMMM    MMM       MMMM   MMMMM   MMMM    MMMM
  MMMMMMM:      MMMMMMM     M         MMMMMMMMMMMM  MMMMMMM MMMMMMM
    MMMMMM       MMMMN     M           MMMMMMMMM      MMMM    MMMM
     MMMM          M                    MMMMMMM        M       M
       M
 ---------------------------------------------------------------
   For those about to rock... (%C, %R)
 ---------------------------------------------------------------

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบซเบผเบฒเบเบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ„เบปเป‰เบ™โ€‹เบซเบฒโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบเบฒเบ™โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹, hashes เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบœเปˆเบฒเบ™โ€‹, เบเบฐโ€‹เปเบˆ cryptographic เปเบฅเบฐโ€‹เปƒเบšโ€‹เบขเบฑเป‰เบ‡โ€‹เบขเบทเบ™โ€‹เบ”เบดโ€‹เบˆเบดโ€‹เบ•เบญเบ™โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบงเบดเป€เบ„เบฒเบฐเป„เบŸเบฅเปŒเบชเบญเบ‡เบชเปเบฒเบฅเบฑเบš เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ เปเบฅเบฐเบˆเบธเบ”เบญเปˆเบญเบ™.

เบ”เป‰เบงเบเบ„เบงเบฒเบกเบŠเปˆเบงเบเป€เบซเบผเบทเบญเบ‚เบญเบ‡ whoa ะธ roเบฒเบเป€เบœเบฑเบ” เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ (emulate) เบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบฒเบเบฎเบนเบšเบžเบฒเบš:

$ ls
bin  dev  etc  lib  mnt  overlay  proc  rom  root  sbin  sys  tmp  usr  var  www

$ cp /usr/bin/qemu-mips-static .

$ sudo chroot . ./qemu-mips-static bin/busybox
BusyBox v1.19.4 (2019-05-20 18:13:49 CST) multi-call binary.
Copyright (C) 1998-2011 Erik Andersen, Rob Landley, Denys Vlasenko
and others. Licensed under GPLv2.
See source distribution for full notice.

Usage: busybox [function] [arguments]...
   or: busybox --list[-full]
   or: function [arguments]...

    BusyBox is a multi-call binary that combines many common Unix
    utilities into a single executable.  Most people will create a
    link to busybox for each function they wish to use and BusyBox
    will act like whatever it was invoked as.

Currently defined functions:
    [, [[, addgroup, adduser, arping, ash, awk, basename, cat, chgrp, chmod, chown, chroot, clear, cmp, cp, crond, crontab, cut, date, dd, delgroup, deluser, dirname, dmesg, echo, egrep, env, expr, false,
    fgrep, find, free, fsync, grep, gunzip, gzip, halt, head, hexdump, hostid, id, ifconfig, init, insmod, kill, killall, klogd, ln, lock, logger, ls, lsmod, mac_addr, md5sum, mkdir, mkfifo, mknod, mktemp,
    mount, mv, nice, passwd, pgrep, pidof, ping, ping6, pivot_root, poweroff, printf, ps, pwd, readlink, reboot, reset, rm, rmdir, rmmod, route, sed, seq, sh, sleep, sort, start-stop-daemon, strings,
    switch_root, sync, sysctl, tail, tar, tee, telnet, test, tftp, time, top, touch, tr, traceroute, true, udhcpc, umount, uname, uniq, uptime, vconfig, vi, watchdog, wc, wget, which, xargs, yes, zcat

เบเบดเปˆเบ‡เปƒเบซเบเปˆ! เปเบ•เปˆเบเบฐเบฅเบธเบ™เบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ BusyBox เบฅเบธเป‰เบ™ 1.19.4. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบงเบตเบŠเบฑเบ™เป€เบเบปเปˆเบฒเบซเบผเบฒเบเบ‚เบญเบ‡ BusyBox, เบ›เปˆเบญเบเบญเบญเบเบกเบฒเป€เบกเบทเปˆเบญเป€เบ”เบทเบญเบ™เป€เบกเบชเบฒ 2012.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ TP-Link เบ›เปˆเบญเบเบฎเบนเบšเบžเบฒเบšเป€เบŸเบตเบกเปเบงเปƒเบ™เบ›เบต 2019 เป‚เบ”เบเปƒเบŠเป‰เบŠเบญเบšเปเบง (GCC toolchain, kernel, BusyBox, เปเบฅเบฐเบญเบทเปˆเบ™เป†) เบ•เบฑเป‰เบ‡เปเบ•เปˆเบ›เบต 2012!

เบ•เบญเบ™เบ™เบตเป‰เป€เบˆเบปเป‰เบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเปเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบ•เบดเบ”เบ•เบฑเป‰เบ‡ OpenWRT เบขเบนเปˆเปƒเบ™ routers เบ‚เบญเบ‡เบ‚เป‰เบญเบเบชเบฐเป€เปเบต?

เบ™เบฑเป‰เบ™เบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”

Binwalk เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ entropy, เบžเบดเบกเบ‚เปเป‰เบกเบนเบ™ entropy เบ”เบดเบš, เปเบฅเบฐเบชเป‰เบฒเบ‡เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡ entropy. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, entropy เบซเบผเบฒเบเปเบกเปˆเบ™เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เป€เบกเบทเปˆเบญ bytes เปƒเบ™เบฎเบนเบšเบžเบฒเบšเปเบกเปˆเบ™เปเบšเบšเบชเบธเปˆเบก. เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบฎเบนเบšเบžเบฒเบšเบ›เบฐเบเบญเบšเบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, เบšเบตเบšเบญเบฑเบ”, เบซเบผเบทเบชเบฑเบšเบชเบปเบ™. เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบเบฒเบ? เป€เบ›เบฑเบ™โ€‹เบซเบเบฑเบ‡โ€‹เบšเปเปˆ.

Reverse engineering router เป€เบฎเบทเบญเบ™เปƒเบŠเป‰ binwalk. เป€เบˆเบปเป‰เบฒเป€เบŠเบทเปˆเบญเบŠเบญเบšเปเบงเป€เบฃเบปเบฒเป€เบ•เบตเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบšเป?

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป„เบ”เป‰ --raw เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบฅเปเบฒเบ”เบฑเบšเป„เบšเบ•เปŒเบ”เบดเบšเปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡เปƒเบ™เบฎเบนเบšเบžเบฒเบš เบซเบผเบทเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต --hexdump เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™ dump hex เบ›เบฝเบšเบ—เบฝเบšเบชเบญเบ‡เป„เบŸเบฅเปŒเบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™.

เบฅเบฒเบเป€เบŠเบฑเบ™เปเบšเบšเบเบณเบ™เบปเบ”เป€เบญเบ‡ เบชเบฒเบกเบฒเบ”เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆ binwalk เป‚เบ”เบเบœเปˆเบฒเบ™เป„เบŸเบฅเปŒเบฅเบฒเบเป€เบŠเบฑเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป€เบญเบ‡เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป‚เบ”เบเปƒเบŠเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต --magic, เบซเบผเบทเป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเบžเบงเบเบกเบฑเบ™เปƒเบชเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต $ HOME / .config / binwalk / magic.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบš binwalk เป„เบ”เป‰เบ—เบตเปˆ เป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™.

เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ binwalk

เบกเบต API binwalk, เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เป‚เบกเบ”เบนเบ™ Python เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เป‚เบ”เบเบชเบฐเบ„เบดเบš Python เปƒเบ”เป†เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เบชเบฐเปเบเบ™ binwalk, เปเบฅเบฐเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ binwalk เบชเบฒเบกเบฒเบ”เบŠเป‰เปเบฒเบเบฑเบ™เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เปเบ–เบงเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” Python!

import binwalk
binwalk.scan()

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ API Python เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰ Python plugins เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปเบฅเบฐเบ‚เบฐเบซเบเบฒเบ binwalk.

เบเบฑเบ‡เบกเบต เบ›เบฅเบฑเบเบญเบดเบ™ IDA เปเบฅเบฐเบชเบฐเบšเบฑเบšเบŸเบฑเบ‡ Binwalk Pro.

เบชเบฐเบ™เบฑเป‰เบ™ เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบˆเบปเป‰เบฒเบˆเบถเปˆเบ‡เบšเปเปˆเบ”เบฒเบงเป‚เบซเบผเบ”เบฎเบนเบšเป€เบŸเบตเบกเปเบงเบˆเบฒเบเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ” เปเบฅเบฐเบฅเบญเบ‡เปƒเบŠเป‰ binwalk? เบ‚เป‰เบญเบเบชเบฑเบ™เบเบฒเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเบกเปˆเบงเบ™เบซเบผเบฒเบ :)

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™