나는 궁금해했다 - 자기 수정 바이너리를 어떻게 분해 하는가? 올리나 IDA는 정적 디스어셈블러이기 때문에 사용할 수 없을 것 같네요, 맞습니까? 당신이 지시의 한가운데에 뛰어 들면 디스어셈블러는 어떻게됩니까? 그리고 변성 엔진을 어떻게 분석합니까?자기 - 수정 코드 분해하기
답변
OllyDbg와 IDA는 모두 정적 분석기 일뿐 아니라 둘 다 코드를 실행할 수도 있습니다. IDA는 또한 코드를 원격으로 실행할 수 있으며, 아는 한 임베디드 디버깅을 수행 할 수도 있습니다. 물론 프로그램 실행을 어느 시점에서 "중단"하고 해체를 살펴본다면 두 프로그램 모두에서 프로그램 자체의 수정을 포함하여 프로그램의 현재 상태를 반영합니다.
명령어의 중간에 뛰어든 경우 디스 어 셈 블러는 어떻게됩니까?
내 경험에 따르면, 언급 된 디스어셈블러 모두이 상황을 처리 할 수 있습니다.
: 나는 명령의 중간에 EIP = 00892C0F을 만들 때
그리고 : EIP는 00892C0E 경우 예를 들어, 다음을 참조 올리 디버그 그것을 관리하는 방법, 여기 스크린 샷입니다
이 명령은 명령을 다시 분해하여 다른 (그러나 여전히 유효한) opcode로 만듭니다.
그리고 변성 엔진을 어떻게 분석합니까?
다른 코드와 마찬가지입니다. 디스어셈블러와 디버거가 지금처럼 똑똑하지는 않은데, 당신이 언급하는 트릭 (지시의 중간으로 뛰어 올라서 수정)은 주로 오래 전부터 인기가있었습니다.
물론 정적 분석은 매우 어려울 수 있지만 물론 바이너리를 완전히 오프라인으로 분석하고 "morphing"(마음 속)을 해독하여 코드가 수행 할 작업에 대한 아이디어를 얻을 수 있습니다. 그러나 디버거를 사용하면 코드가 무엇인지 쉽게 알 수 있습니다.
물론이 모든 것은 코드를 작성하는 사람들과 코드를 분석하는 사람들 사이의 끊임없는 경쟁입니다. 누가이기는지는 누가 빨리 포기하는지에 달려 있습니다.
이것이 사실이기 때문에 이것을 인용하고 싶습니다. "물론이 모든 것은 코드를 작성하는 사람들과 분석하는 사람들 간의 끝없는 경쟁입니다. 누가 이기는가는 누가 더 빨리 포기할 것인가에 달려 있습니다." –
Ollydbg는 이러한 상황을 처리합니다.
찾고있는 기능은 '분석'입니다. 위치에서 새 지침을 다시 분해하고 업데이트 된 코드로 CPU 창을 새로 고칩니다.
주소 X의 명령어가 몇 가지 자체 수정 변경을한다고 가정합니다. 해당 명령을 실행 한 후 '분석'명령을 실행할 수 있습니다. 이 기본 블록 주위의 코드를 다시 디스 어셈블하고 업데이트 된 지침으로 CPU를 새로 고칩니다.
분석하려면 CPU 창에서 원하는 위치를 마우스 오른쪽 단추로 클릭하고 분석> 코드 분석을 클릭하십시오. 바로 가기는 이고 Ctrl-A입니다.
질문을 너무 가혹하게 비판하지 않으려합니다. 아마 나는 그것을 이해하지 못할 것이다! 그러나 그것은 몇 단락에서 대답 할 수있는 종류의 질문이 아닐 수도 있습니다. – thb