рдХрд╛рд╣реА рджрд┐рд╡рд╕рд╛рдВрдкреВрд░реНрд╡реА, рдореА рдмрд┐рдирд╡реЙрдХ рд╡рд╛рдкрд░реВрди рдорд╛рдЭреНрдпрд╛ рд░рд╛рдЙрдЯрд░рдЪреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рд░рд┐рд╡реНрд╣рд░реНрд╕ рдЗрдВрдЬрд┐рдирд┐рдпрд░ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.
рдореА рд╕реНрд╡рддрдГ рд╡рд┐рдХрдд рдШреЗрддрд▓реЗ
рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рдореА рдирд╡реАрди рд░рд╛рдЙрдЯрд░ рдЦрд░реЗрджреА рдХрд░рддреЛ, рдореА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ
OpenWRT рдбрд╛рдЙрдирд▓реЛрдб рдХреЗрд▓реНрдпрд╛рд╡рд░, рдореА рджреЗрдЦреАрд▓
рдмрд┐рдирд╡реЙрдХ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?
рдХреНрд░реЗрдЧ рд╣реЗрдлрдирд░ рджреНрд╡рд╛рд░реЗ 2010 рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ, рдмрд┐рдирд╡реЙрдХ рдлрд░реНрдорд╡реЗрдЕрд░ рдкреНрд░рддрд┐рдорд╛ рд╕реНрдХреЕрди рдХрд░реВ рд╢рдХрддреЗ рдЖрдгрд┐ рдлрд╛рдпрд▓реА рд╢реЛрдзреВ рд╢рдХрддреЗ, рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рддрд┐рдорд╛ рдУрд│рдЦреВ рдЖрдгрд┐ рдХрд╛рдвреВ рд╢рдХрддреЗ, рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдХреЛрдб, рд╕рдВрдХреБрдЪрд┐рдд рд╕рдВрдЧреНрд░рд╣, рдмреВрдЯрд▓реЛрдбрд░ рдЖрдгрд┐ рдХрд░реНрдирд▓, рдлрд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк рдЬрд╕реЗ рдХреА JPEG рдЖрдгрд┐ PDF рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА.
рдлрд░реНрдорд╡реЗрдЕрд░ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдмрд┐рдирд╡реЙрдХрдЪрд╛ рд╡рд╛рдкрд░ рд░рд┐рд╡реНрд╣рд░реНрд╕ рдЗрдВрдЬрд┐рдирд┐рдЕрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд░реВ рд╢рдХрддрд╛. рдЕрд╕реБрд░рдХреНрд╖рд┐рддрддреЗрд╕рд╛рдареА рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓реНрд╕ рд╢реЛрдзрд╛, рдлрд╛рдЗрд▓реНрд╕ рдХрд╛рдврд╛ рдЖрдгрд┐ рдмреЕрдХрдбреЛрдЕрд░ рдХрд┐рдВрд╡рд╛ рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╢реЛрдзрд╛. рдЖрдкрдг рджреЗрдЦреАрд▓ рд╢реЛрдзреВ рд╢рдХрддрд╛ opcodes
рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ CPU рдЪреНрдпрд╛ рд╕рдореВрд╣рд╛рд╕рд╛рдареА.
рддреБрдореНрд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдлрд╛рдЗрд▓реНрд╕ (passwd, shadow, рдЗ.) рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рддрд┐рдорд╛ рдХрд╛рдвреВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдкрд╛рд╕рд╡рд░реНрдб рд╣реЕрд╢ рддреЛрдбрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛. рддреБрдореНрд╣реА рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реНрд╕рдордзреНрдпреЗ рдмрд╛рдпрдирд░реА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд░реВ рд╢рдХрддрд╛. рд╕рдВрдХреБрдЪрд┐рдд рдбреЗрдЯрд╛ рдХрд┐рдВрд╡рд╛ рдПрдиреНрдХреЛрдб рдХреЗрд▓реЗрд▓реНрдпрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рдбреЗрдЯрд╛рд╡рд░ рдПрдиреНрдЯреНрд░реЙрдкреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ рд╢рдХрддрд╛. рд╣реЗ рд╕рд░реНрд╡ рд╕реНрддреНрд░реЛрдд рдХреЛрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рди рдХрд░рддрд╛.
рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ рдЧреЛрд╖реНрдЯ рддреЗрдереЗ рдЖрд╣реЗ :)
рдмрд┐рдирд╡реЙрдХ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ?
рдмрд┐рдирд╡реЙрдХрдЪреЗ рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рдореНрд╣рдгрдЬреЗ рддреНрдпрд╛рдЪреЗ рд╕рд┐рдЧреНрдиреЗрдЪрд░ рд╕реНрдХреЕрдирд┐рдВрдЧ. рдмрд┐рдирд╡реЙрдХ рд╡рд┐рд╡рд┐рдз рдЕрдВрдЧрднреВрдд рдлрд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдЖрдгрд┐ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рдлрд░реНрдорд╡реЗрдЕрд░ рдкреНрд░рддрд┐рдорд╛ рд╕реНрдХреЕрди рдХрд░реВ рд╢рдХрддреЗ.
рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдпреБрдЯрд┐рд▓рд┐рдЯреА рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХрд╛ 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
рдлрд╛рдЗрд▓ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдкрд╛рд╣рддреЛ рдЖрдгрд┐ рдлрд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрд╡рд╛рдХреНрд╖рд░реА (рдЬрд╛рджреВ рдХреНрд░рдорд╛рдВрдХ) рд╢реЛрдзрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рдлрд╛рдЗрд▓ рдмрд╛рдЗрдЯреНрд╕рдЪреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рд╕реБрд░реВ рд╣реЛрддреЗ 0x89 0x50 0x4E 0x47 0x0D 0x0A 0x1A 0x0A
, рддреА PNG рдлрд╛рдЗрд▓ рдЖрд╣реЗ рд╣реЗ рдорд╛рд╣реАрдд рдЖрд╣реЗ. рдЪрд╛рд▓реВ
рдмрд┐рдирд╡реЙрдХ рддреНрдпрд╛рдЪ рдкреНрд░рдХрд╛рд░реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ. рдкрд░рдВрддреБ рдХреЗрд╡рд│ рдлрд╛рдЗрд▓рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рд╢реЛрдзрдгреНрдпрд╛рдРрд╡рдЬреА, рдмрд┐рдирд╡реЙрдХ рд╕рдВрдкреВрд░реНрдг рдлрд╛рдЗрд▓ рд╕реНрдХреЕрди рдХрд░реЗрд▓. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдмрд┐рдирд╡реЙрдХ рдЗрдореЗрдЬрдордзреНрдпреЗ рдЖрдврд│рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕ рдХрд╛рдвреВ рд╢рдХрддреЛ.
рд╕рд╛рдзрдиреЗ file
╨╕ binwalk
рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рд╛ libmagic
рдлрд╛рдЗрд▓ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рдУрд│рдЦрдгреНрдпрд╛рд╕рд╛рдареА. рдкрд░рдВрддреБ binwalk
рд╕рдВрдХреБрдЪрд┐рдд/рдЭрд┐рдк рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реА, рдлрд░реНрдорд╡реЗрдЕрд░ рд╢реАрд░реНрд╖рд▓реЗрдЦ, рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓, рдмреВрдЯрд▓реЛрдбрд░, рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдЖрдгрд┐ рдЗрддрд░ рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА рд╕рд╛рдиреБрдХреВрд▓ рдЬрд╛рджреВрдЪреНрдпрд╛ рд╕реНрд╡рд╛рдХреНрд╖рд░реАрдВрдЪреНрдпрд╛ рд╕реВрдЪреАрд▓рд╛ рджреЗрдЦреАрд▓ рд╕рдорд░реНрдерди рджреЗрддреЗ.
рдЪрд▓рд╛ рдереЛрдбреА рдордЬрд╛ рдХрд░реВрдпрд╛?
рдмрд┐рдирд╡реЙрдХ рд╕реНрдерд╛рдкрдирд╛
Linux, OSX, FreeBSD рдЖрдгрд┐ Windows рдпрд╛рд╕рд╣ рдЕрдиреЗрдХ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдорд╡рд░ рдмрд┐рдирд╡реЙрдХ рд╕рдорд░реНрдерд┐рдд рдЖрд╣реЗ.
рдмрд┐рдирд╡реЙрдХрдЪреА рдирд╡реАрдирддрдо рдЖрд╡реГрддреНрддреА рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╣реЗ рдХрд░реВ рд╢рдХрддрд╛
рдмрд┐рдирд╡реЙрдХрдордзреНрдпреЗ рдЕрдиреЗрдХ рднрд┐рдиреНрди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрд╣реЗрдд:
$ 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
рдкреНрд░рддрд┐рдорд╛ рд╕реНрдХреЕрдирд┐рдВрдЧ
рдкреНрд░рддрд┐рдореЗрдЪреНрдпрд╛ рдЖрдд рдлрд╛рдЗрд▓ рд╕реНрд╡рд╛рдХреНрд╖рд░реА рд╢реЛрдзреВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛ (рд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рдкреНрд░рддрд┐рдорд╛
--signature рдкреЕрд░рд╛рдореАрдЯрд░рд╕рд╣ рдмрд┐рдирд╡реЙрдХ рдЪрд╛рд▓рд╡рдгреЗ:
$ 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
рдЖрддрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдпрд╛ рдкреНрд░рддрд┐рдореЗрдмрджреНрджрд▓ рдмрд░реАрдЪ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ.
рдкреНрд░рддрд┐рдорд╛ рд╡рд╛рдкрд░рддреЗ 0x5AC0
рдЖрдгрд┐ рдпреЗрдереЗ рдПрдХ рд╕рдВрдХреБрдЪрд┐рдд рдмреВрдЯрд▓реЛрдбрд░ рдкреНрд░рддрд┐рдорд╛ 0x5B00
). 0x13270 рд╡рд░реАрд▓ uImage рд╢реАрд░реНрд╖рд▓реЗрдЦрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ MIPS рдЖрд╣реЗ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдЖрд╡реГрддреНрддреА 3.3.8 рдЖрд╣реЗ. рдЖрдгрд┐ рдкрддреНрддреНрдпрд╛рд╡рд░ рд╕рд╛рдкрдбрд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддрд┐рдореЗрд╡рд░ рдЖрдзрд╛рд░рд┐рдд 0x11CEA5
, рдЖрдкрдг рддреЗ рдкрд╛рд╣реВ рд╢рдХрддреЛ rootfs
рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЖрд╣реЗ squashfs
.
рдЖрддрд╛ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рдмреВрдЯрд▓реЛрдбрд░ (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 рд╡рд╛рдкрд░реВрди рдкреНрд░рддрд┐рдорд╛ рд╕рдВрдХреБрдЪрд┐рдд рдХреЗрд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ рдбреАрдХрдВрдкреНрд░реЗрд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
$ unlzma u-boot.bin.lzma
рдЖрддрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдпреВ-рдмреВрдЯ рдкреНрд░рддрд┐рдорд╛ рдЖрд╣реЗ:
$ 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-Bot Environment Variable bootargs
рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рд▓рд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ. рдЖрдгрд┐ рд╡рд░реАрд▓рд╡рд░реВрди, рдЖрдореНрд╣рд╛рд▓рд╛ рдбрд┐рд╡реНрд╣рд╛рдЗрд╕рдЪреНрдпрд╛ рдлреНрд▓реЕрд╢ рдореЗрдорд░реАрдЪреА рдЪрд╛рдВрдЧрд▓реА рд╕рдордЬ рдЖрд╣реЗ.
рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдкреНрд░рддрд┐рдорд╛ рдХрд╛рдврдгреНрдпрд╛рдмрджреНрджрд▓ рдХрд╛рдп?
$ 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 рдлрд╛рдИрд▓ рдлреЙрд░рдореЕрдЯ рдореБрд│рд╛рдд рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЕрд╕рд▓реЗрд▓реА рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдкреНрд░рддрд┐рдорд╛ рдЖрд╣реЗ. рдЕрдВрддрд┐рдо рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдкреНрд░рддрд┐рдорд╛ рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛рдвреВрди рдЯрд╛рдХреВрдпрд╛:
$ 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
рдЖрддрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓ рдкреНрд░рддрд┐рдорд╛ рдЖрд╣реЗ:
$ ls -la Image
-rw-rw-r-- 1 sprado sprado 3164228 Fev 5 10:51 Image
рдХрд░реНрдирд▓ рдкреНрд░рддрд┐рдореЗрд╕рд╣ рдЖрдкрдг рдХрд╛рдп рдХрд░реВ рд╢рдХрддреЛ? рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдореНрд╣реА рдЗрдореЗрдЬрдордзреНрдпреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢реЛрдзреВ рд╢рдХрддреЛ рдЖрдгрд┐ рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдирд▓рдЪреА рдЖрд╡реГрддреНрддреА рд╢реЛрдзреВ рд╢рдХрддреЛ рдЖрдгрд┐ рдХрд░реНрдирд▓ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдмрджреНрджрд▓ рдЬрд╛рдгреВрди рдШреЗрдК рд╢рдХрддреЛ:
$ 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
рдлрд░реНрдорд╡реЗрдЕрд░ рдЧреЗрд▓реНрдпрд╛ рд╡рд░реНрд╖реА (2019) рд░рд┐рд▓реАрдЭ рдЭрд╛рд▓реЗ рдЕрд╕рд▓реЗ рддрд░реА, рдореА рд╣рд╛ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рдд рдЕрд╕рддрд╛рдирд╛ рддреЗ 3.3.8 рдордзреНрдпреЗ рд░рд┐рд▓реАрдЬ рдЭрд╛рд▓реЗрд▓реНрдпрд╛ Linux рдХрд░реНрдирд▓ (2012) рдЪреА рдЬреБрдиреА рдЖрд╡реГрддреНрддреА рд╡рд╛рдкрд░рдд рдЖрд╣реЗ, рдЬреА 4.6 рдкрд╛рд╕реВрди рдЬреАрд╕реАрд╕реА (2012) рдЪреНрдпрд╛ рдЦреВрдк рдЬреБрдиреНрдпрд╛ рдЖрд╡реГрддреНрддреАрд╕рд╣ рд╕рдВрдХрд▓рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ. !
(рдЕрдВрджрд╛рдЬреЗ рднрд╛рд╖рд╛рдВрддрд░. рддреБрдордЪрд╛ рдЕрдЬреВрдирд╣реА рдСрдлрд┐рд╕ рдЖрдгрд┐ рдШрд░реА рддреБрдордЪреНрдпрд╛ рд░рд╛рдЙрдЯрд░рд╡рд░ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХрд╛?)
рдкрд░реНрдпрд╛рдпрд╛рд╕рд╣ --opcodes
рдЖрдореНрд╣реА рдорд╢реАрди рд╕реВрдЪрдирд╛ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдЗрдореЗрдЬрдЪреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрд┐рдирд╡реЙрдХ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ:
$ 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)
---------------------------------------------------------------
рдЖрддрд╛ рдЖрдкрдг рдЦреВрдк рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдЧреЛрд╖реНрдЯреА рдХрд░реВ рд╢рдХрддреЛ.
рдЖрдореНрд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓реНрд╕, рдкрд╛рд╕рд╡рд░реНрдб рд╣реЕрд╢, рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдХреА рдЖрдгрд┐ рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░реЗ рд╢реЛрдзреВ рд╢рдХрддреЛ. рдЖрдкрдг рдмрд╛рдпрдирд░реА рдлрд╛рдЗрд▓реНрд╕рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ рд╢рдХрддреЛ
рдЪреНрдпрд╛ рдорджрддреАрдиреЗ
$ 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 рдЯреВрд▓рдЪреЗрди, рдХрд░реНрдирд▓, BusyBox, рдЗ.) рд╡рд╛рдкрд░реВрди 2012 рдордзреНрдпреЗ рдлрд░реНрдорд╡реЗрдЕрд░ рдкреНрд░рддрд┐рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ!
рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдордЬрд▓реЗ рдЖрд╣реЗ рдХреА рдореА рдиреЗрд╣рдореА рдорд╛рдЭреНрдпрд╛ рд░рд╛рдЙрдЯрд░рд╡рд░ OpenWRT рдХрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЛ?
рдПрд╡рдвреЗрдЪ рдирд╛рд╣реА
рдмрд┐рдирд╡реЙрдХ рдПрдВрдЯреНрд░реЙрдкреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рджреЗрдЦреАрд▓ рдХрд░реВ рд╢рдХрддреЗ, рдХрдЪреНрдЪрд╛ рдПрдиреНрдЯреНрд░реЙрдкреА рдбреЗрдЯрд╛ рдореБрджреНрд░рд┐рдд рдХрд░реВ рд╢рдХрддреЗ рдЖрдгрд┐ рдПрдиреНрдЯреНрд░реЙрдкреА рдЖрд▓реЗрдЦ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЗ. рд╕рд╛рдорд╛рдиреНрдпрддрдГ, рдЬреЗрд╡реНрд╣рд╛ рдкреНрд░рддрд┐рдореЗрддреАрд▓ рдмрд╛рдЗрдЯреНрд╕ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрд╕рддрд╛рдд рддреЗрд╡реНрд╣рд╛ рдЬрд╛рд╕реНрдд рдПрдиреНрдЯреНрд░реЙрдкреА рджрд┐рд╕реВрди рдпреЗрддреЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рд╣реЛрдК рд╢рдХрддреЛ рдХреА рдкреНрд░рддрд┐рдореЗрдордзреНрдпреЗ рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб, рд╕рдВрдХреБрдЪрд┐рдд рдХрд┐рдВрд╡рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдлрд╛рдЗрд▓ рдЖрд╣реЗ. рд╣рд╛рд░реНрдбрдХреЛрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреА? рдХрд╛ рдирд╛рд╣реА.
рдЖрдкрдг рдкреЕрд░рд╛рдореАрдЯрд░ рджреЗрдЦреАрд▓ рд╡рд╛рдкрд░реВ рд╢рдХрддреЛ --raw
рдЗрдореЗрдЬ рдХрд┐рдВрд╡рд╛ рдкреЕрд░рд╛рдореАрдЯрд░рдордзреНрдпреЗ рд╕рд╛рдиреБрдХреВрд▓ рд░реЙ рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо рд╢реЛрдзрдгреНрдпрд╛рд╕рд╛рдареА --hexdump
рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓реНрд╕рдЪреА рддреБрд▓рдирд╛ рдХрд░реВрди рд╣реЗрдХреНрд╕ рдбрдВрдк рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.
--magic
, рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдВрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЬреЛрдбреВрди $ HOME / .config / binwalk / magic
.
рддреБрдореНрд╣рд╛рд▓рд╛ рдмрд┐рдирд╡реЙрдХрдмрджреНрджрд▓ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреА рдпреЗрдереЗ рдорд┐рд│реЗрд▓
рдмрд┐рдирд╡реЙрдХ рд╡рд┐рд╕реНрддрд╛рд░
рддреЗрдереЗ
import binwalk
binwalk.scan()
Python API рд╡рд╛рдкрд░реВрди рддреБрдореНрд╣реА рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛
рджреЗрдЦреАрд▓ рд╡рд┐рджреНрдпрдорд╛рди рдЖрд╣реЗ
рдордЧ рддреБрдореНрд╣реА рдЗрдВрдЯрд░рдиреЗрдЯрд╡рд░реВрди рдлрд░реНрдорд╡реЗрдЕрд░ рдЗрдореЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВрди рдмрд┐рдирд╡реЙрдХ рдХрд╛ рдХрд░рдд рдирд╛рд╣реА? рдореА рд╡рдЪрди рджреЗрддреЛ рдХреА рддреБрдореНрд╣рд╛рд▓рд╛ рдЦреВрдк рдордЬрд╛ рдпреЗрдИрд▓ :)
рд╕реНрддреНрд░реЛрдд: www.habr.com