이진 이미지에서 펌웨어 MCU 확인
어려운 문제-펌웨어를 다운로드 할 수있는 CANBUS 컨트롤러 (ELF가 아닌 바이너리 이미지)를 리버스 엔지니어링하려고하지만 어떤 MCU를 사용하는지 모르겠습니다. binwalk
, r2
나에게 유용한 것을주지 마십시오. Binwalk opcode는 mipsel과 일치하지만 함수 서명은 쓰레기입니다.
펌웨어에서 MCU를 확인하려면 어떻게해야합니까?
답변
3 julian
MIPS 32 비트 little-endian 기계 코드 인 것으로 보입니다.
첫째, 파일은 .hex에서 바이너리로
$ objcopy --input-target=ihex --output-target=binary FORD_P5_STEER_RevA_v1.2.0.hex FORD_P5_STEER_RevA_v1.2.0.bin
binwalk
엔트로피 플롯과 16 진수 덤프를 살펴본 후 , 0x00021330
이후 거의 모든 것이 0x00 바이트에 불과하기 때문에 첫 번째 바이트를 잘라 냈습니다 .
000212f0 5f 50 35 20 53 74 65 65 72 00 00 00 20 24 00 00 |_P5 Steer... $..|
00021300 00 04 08 10 14 18 00 00 08 00 e0 03 00 60 62 41 |.............`bA|
00021310 08 00 e0 03 20 60 62 41 08 00 e0 03 00 00 00 00 |.... `bA........|
00021320 08 00 e0 03 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00021330 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| <--\
* |-- Huge gap
00071e40 01 00 00 00 02 00 00 00 00 00 00 00 46 4f 52 44 |............FORD| <--/
00071e50 20 50 35 20 53 74 65 65 72 69 6e 67 20 45 6d 75 | P5 Steering Emu|
00071e60 6c 61 74 6f 72 20 28 46 4f 52 44 5f 50 35 5f 53 |lator (FORD_P5_S|
00071e70 54 45 45 52 29 20 52 65 76 41 00 00 00 00 00 00 |TEER) RevA......|
00071e80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
02bf9e80 00 9d 1f 3c 70 79 ff 37 08 00 e0 03 00 00 00 00 |...<py.7........|
02bf9e90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
02bfce70 ff ff ff 3e d9 79 f9 ff 5b 0e 66 ff ff ff ff 7f |...>.y..[.f.....|
02bfce80
ISAdetect 결과 :
{
"prediction": {
"wordsize": 32,
"endianness": "little",
"architecture": "mips"
},
"prediction_probability": 0.81
}
확인하기 위해 슬라이스에서 기계어 코드를 추출하여 참조와 비교했습니다.
바이트 값 분포는 거의 일치합니다.
1 IgorSkochinsky
실제로 유효한 MIPS litte-endian 코드입니다.
seg000:1D0121F0 A8 FF BD 27 addiu $sp, -0x58 seg000:1D0121F4 04 00 A1 AF sw $at, 0x58+var_54($sp) seg000:1D0121F8 08 00 A2 AF sw $v0, 0x58+var_50($sp) seg000:1D0121FC 0C 00 A3 AF sw $v1, 0x58+var_4C($sp) seg000:1D012200 10 00 A4 AF sw $a0, 0x58+var_48($sp) seg000:1D012204 14 00 A5 AF sw $a1, 0x58+var_44($sp) seg000:1D012208 18 00 A6 AF sw $a2, 0x58+var_40($sp) seg000:1D01220C 1C 00 A7 AF sw $a3, 0x58+var_3C($sp) seg000:1D012210 20 00 A8 AF sw $t0, 0x58+var_38($sp) seg000:1D012214 24 00 A9 AF sw $t1, 0x58+var_34($sp) seg000:1D012218 28 00 AA AF sw $t2, 0x58+var_30($sp) seg000:1D01221C 2C 00 AB AF sw $t3, 0x58+var_2C($sp) seg000:1D012220 30 00 AC AF sw $t4, 0x58+var_28($sp) seg000:1D012224 34 00 AD AF sw $t5, 0x58+var_24($sp) seg000:1D012228 38 00 AE AF sw $t6, 0x58+var_20($sp) seg000:1D01222C 3C 00 AF AF sw $t7, 0x58+var_1C($sp) seg000:1D012230 40 00 B8 AF sw $t8, 0x58+var_18($sp) seg000:1D012234 44 00 B9 AF sw $t9, 0x58+var_14($sp) seg000:1D012238 48 00 BF AF sw $ra, 0x58+var_10($sp) seg000:1D01223C 12 40 00 00 mflo $t0
seg000:1D012240 4C 00 A8 AF sw $t0, 0x58+var_C($sp)
seg000:1D012244 10 40 00 00 mfhi $t0 seg000:1D012248 50 00 A8 AF sw $t0, 0x58+var_8($sp) seg000:1D01224C 01 9D 1A 3C+ li $k0, 0x9D012CA4
seg000:1D01224C A4 2C 5A 27
seg000:1D012254 00 00 00 00 nop
seg000:1D012258 00 68 04 40 mfc0 $a0, Cause # Cause of last exception seg000:1D01225C 00 60 05 40 mfc0 $a1, SR # Status register
seg000:1D012260 09 F8 40 03 jalr $k0
seg000:1D012264 00 00 00 00 nop
장치가 Microchip의 PIC32 시리즈를 사용하고 있다고 생각합니다 .