2017-03-29 4 views
0

XBee DigiMesh 펌웨어 (Cortex-M3, EM357)에서 기계 코드를 추출하려고하는데, 내부에 3 개의 섹션이있는 SREC 파일이 있습니다. 나는이 섹션 중 하나가 코드 섹션이라고 생각하지만 arm-none-eabi-objdump는 "알려지지 않은 명령어"를 자주보고합니다. 왜 이런 일이 발생하는지 알고 있습니까?Cortex-M3 펌웨어에서 기계 코드를 추출 할 수 없습니다.

이 내가이 일을 시도하는 방법입니다

arm-none-eabi-objcopy --input-target=srec --output-target=binary -j .sec2 xbp24-dm_8073.ehx2.dec sec2.bin 
arm-none-eabi-objdump -D -bbinary -marm -Mforce-thumb sec2.bin 

업데이트 : 대답은 https://reverseengineering.stackexchange.com/questions/15049/cant-extract-machine-code-from-cortex-m3-firmware

+0

[리버스 엔지니어링] (http://reverseengineering.stackexchange.com/) 사이트에서이 질문을하십시오. –

답변

0

에있다 cortex-m3 지원 가변 명령 길이 인 thumb2는 시작 부분에서 간단히 시작하여 가변 길이 명령 세트를 디스 어셈블 할 수 없으며 쉽게 동기화되지 않고 출력이 가비지가되어 영원히 계속 남을 수 있습니다. 이 경우는 아니지만 오류가 발생할 것으로 예상됩니다. 디스어셈블러를 혼동하게하는 항목을 추가 한 것은 가능합니다.

또한 그래서,

껍질-m에게 단어의 첫 덩어리 인은 벡터 테이블 수 없습니다 ... 여기 많은 데이터를 가질 수있다, 또는 코드를 압축 할 수있다, 또는 누가 어떤 다른 알고 이 코드는 무엇입니까? gnu 도구를 사용하는 방식으로 결과물을 살펴보면 실제 코드처럼 보이지 않으므로 아마도 암호화되거나 압축되어있을 것입니다. 스택 프레임이 빌드되고 함수가 팝후 (ldmia)로 끝나는 것을 보시겠습니까? 그런 다음 몇 가지 정적 단어가있는 링크 레지스터가 포함 된 다음 그 다음 함수의 시작과 비슷합니다. 컴파일 된 코드가 전부는 아니지만 일부는 컴파일 된 코드처럼 보일 것입니다.

일부 펌웨어를 해킹하려고하는 경우이 방법이로드되는 방법과 위치를 파악하고 명령어 세트 시뮬레이터를 작성/사용해야합니다. 그래도 벡터 테이블을 시작하지 않고 재미있게 지내십시오.

당신은 당신이 그 srec 옵션을 가지고 프로그램을 만들 수 있습니다,

S123110001BE8110204D5401BE96102452... 
0x1100 : 0x01BE 
0x1102 : 0x8110 
0x1104 : 0x204D 
0x1108 : 0x5401 
0x110C : 0xBE96 
0x110E : 0x1024 

등 그 주소의 컨텐츠를 분실하거나 아마

0x1100 : 0xBE01 
0x1102 : 0x1081 

을 byteswapped 당신이 당신의 분해를했던 방법 :

.hword 0xbe01 
.hword 0x1081 

항목의 인접한 주소 범위마다 하나씩, 주소 점프가 새로 시작될 때 파일을 만들고, 각 섹션의 시작 주소를 커버하는 링커 스크립트를 만들고, 어셈블하고, 그 중 하나에서 _start 레이블을 만들고, 스크립트와 링크 한 다음 분해 할 수있는 엘프를 가지고 있지만, 여전히 문제가 될 것이라고 예상하지만, 상대 주소 지정은 의미가 있고 절대 주소 지정이됩니다.

는 또한 진짜 가정 당신의 진입 점

S903189351 

주의, 이유가 있다고 가정 없습니다.

관련 문제