안티-리버싱 기법에 대해 관심이 많으신 분들은~~ 다들 알만한 내용입니다만...

-0- 스스로 정리하는 차원에서;; 살포시 포스팅 해봅니다..

PEB 에서 ImageBase 값 및 LDR_DATA 의 첫번째 모듈(보통은 메인 프로세스죠;;)의

이미지베이스, 엔트리포인트, 이미지크기 등을 조작해서 해당 정보를 읽지 못하게 하면 되는데요~

코드는 대략 아래와 같습니다.

__asm {
    // 프로세스의 이미지 베이스 제거 
    MOV     EAX, DWORD PTR FS:[0x30]
    MOV     DWORD PTR [EAX + 0x08], 0

    // LDR_DATA 의 첫번째 모듈 정보 조작
    MOV     EAX, DWORD PTR FS:[0x30]
    MOV     EAX, DWORD PTR [EAX + 0x0C]
    MOV     EAX, DWORD PTR [EAX + 0x0C]

    // 모듈의 베이스 주소
    MOV     DWORD PTR [EAX + 0x18], 0
    // 모듈의 엔트리 포인트
    MOV     DWORD PTR [EAX + 0x1C], 0
    // 모듈의 사이즈
    ADD     DWORD PTR [EAX + 0x20], 0x1000
}
 
LordPE 에는 'correct ImageSize' 라고 이미지 사이즈가 조작된 경우 이를 어느 정도 바로잡아 주는 기능이 있는데..

위와 같이 이미지 베이스 등~ 정보를 다 조작해버리면 그 기능도 사용할 수 없습니다~ :)

( 직접 분석해보면서 부분 덤프를 해야하겠죠;;... )


보통은 위와 같은 구현으로 잘 돌아갑니다만...

테스트를 해보니 문제가 발생하는 경우가 있었습니다..

실행파일이 "Delay Import" 를 가지는 경우인데요~

정확한 이유는~~ =0= 다음에 좀 더 살펴보고 이어서 포스팅을 할까 합니다..
( 사실 =0= 아직 이유를 모르거든요;;;.. )

암튼.. 위와 같은 방식을 단일 실행파일에 적용하는 것은 괜찮겠지만...

패커나 프로텍터 등~ 다양한 파일을 지원하는 프로젝트에 적용하는 것은~

고려를 해봐야될 듯 합니다.. ^^: