본문 바로가기

Windows x64 binary 모듈 단위 이동 보통 프로그램 내부적으로 DLL Injection을 수행하고 인라인후킹을 하면 전형적으로 타겟 주소 명령어 부분에 5Byte의 jmp 명령어를 박게 됩니다. 하지만 이러한 방법은 32bit 응용 프로그램에서나 100% 확율로 통하는 방법이고 64bit 응용 프로그램에서는 단순 jmp 명령어가지곤 후킹이 실패할 수 있습니다. 먼저 jmp 명령어 설명을 보겠습니다. jmp 명령어는 jmp 0x12345678 이라는 명령어가 있을 때 Opcode는 0x12345678 이 그대로 박히는게 아닌 현재 EIP 기준 offset 값이 들어갑니다. 이는 32bit이던, 64bit이던 똑같이 적용됩니다. 그리고 명령어 사이즈도 현재 64bit 모드라고해서 offset을 담을 수 있는 공간이 64bit로 커지는것도 아닙니.. 더보기
ZwProtectVirtualMemory 의 악몽 2 아놔......... ZwProtectVirtualMemory가 끝까지 사람을 괴롭히네요!!이것 때문에 또 한시간 반을 날렸습니다 ㅠㅠ NTSTATUS NTAPI ZwProtectVirtualMemory (IN HANDLE ProcessHandle, IN OUT PVOID *BaseAddress, IN OUT PSIZE_T ProtectSize,IN ULONG NewProtect,OUT PULONG OldProtect); 이게 해당 함수의 원형입니다.http://ezbeat.tistory.com/449여기 글에선 두 번째, 세 번째 IN OUT 특성을 갖는 인자 때문에 빡쳤었습니다.이번엔 다른 이유입니다. 돌아가는 환경은Windows 7 x64 환경입니다. 아래 코드에서 이상한 점을 찾아보세요. ( us.. 더보기
Windows Hang Dump 분석 개발자들은 개발을 하다보면 디버깅이라는 필수적인 과정을 수행하게 됩니다.하지만 항상 컴파일러 상에서 지원해주는 디버깅을 사용할 순 없는 것입니다.만약 소스코드는 Windows 7 x64에서 짜고 있지만 실제로 테스트해볼 환경은Windows XP, Windows vista, Windows 7, Windows 8 각각의 x86, x64 버전에서 전부 해야한다면 가상머신에서 테스트 할 수 밖에 없습니다. 그렇다보니 컴파일러에서 지원해주는 디버거를 바로 사용할 수 없겠지요.이럴 경우 전 여러가지 방법을 사용합니다. IDA와 OllyDbg를 사용해 디버깅을 하기도 하구요. 커널이나 ollydbg에서 접근할 수 없는 상황인 경우는 windbg로 분석을 하기도합니다. 하지만 이는 작은 프로그램이나 큰 프로그램의 특정.. 더보기