반응형
PEB구조체를 이용해서 안티디버깅을 적용하고 치트엔진으로 우회 하는 실습을 해보겠습니다.
PEB는 간단하게 BeingDebugged 값을 체크하는 안티디버깅 기법입니다.
자세한거는 나중에 Windbg를 공부하면서 알아보도록 하겠습니다.
위는 간단한 소스코드 입니다. 디버깅이 탐지 될 때 " 디버깅 탐지 " 를 띄우고,
그 반대로 " 정상 " 을 띄우는 소스코드 입니다.
치트엔진을 켜고 프로세스를 attach 합니다. 현재 디버깅을 안 해서 " 정상 " 이라고 출력 중 입니다.
이번에 추가적으로 툴을 하나 더 실행 시킵니다. " Process Explorer " 라는 좋을 툴입니다.
대표적으로
- 프로세스 리스트 (Suspend, Resume, Terminate, Dump)
- 해당 프로세스의 Thread, TCP/IP 등을 보여줌
저는 주로 프로세스 Suspend나 Thread, TCP/IP 를 봅니다.
본론으로 들어가 Process Explorer 를 실행하는 이유는 해당 프로세스의 Thread를 보기 위함입니다.
해당 프로세스를 더블클릭 후 Thread 탭을 보게되면 "Moduel + Offset" 이 보입니다.
여기서 빨간색 박스를 친 부분을 볼 것입니다.
빨간색 박스를 친 Module + Offset 을 치트엔진의 메모리 뷰에 "복사 - 붙여넣기" 합니다.
그러면 위와 같이 해당 프로그램에서 사용 중인 함수들을 볼 수 있습니다.
위와 같이 의심 되는 함수에 BP를 설정 하고 F9(Run)를 누릅니다.
스크린샷은 안 찍었지만 사용되는 함수는 Sleep, Printf 2 개의 함수에 BP가 걸립니다.
그러면 위의 오른쪽 처럼 Main함수에 접근할 수 있습니다.
두 개의 어셈과 소스코드를 비교해보면 유사하다는 것을 알 수 있습니다.
call 002603DC 를 따라가다보면 PEB를 체크하는 어셈코드를 확인 할 수 있습니다.
우회하는 방법은 cmp 비교문 부분에서 01부분을 00으로 바꾸거나 분기문을 수정하는 방법 등이 있습니다.
이번에는 직접 수동으로 변조하지 않고 스크립트를 짜서 코드케이브(Code Cave)를 해보겠습니다.
메모리 뷰의 상단 탭에 Tool - Auto Assemble 을 클릭합니다.
하얀색 빈 창이 뜨는데, 상단 탭의 Template - Cheat Table framework code 를 클릭합니다.
그러면
[enable]
[disable]
이 생깁니다.
상단 탭의 File - Assign to current cheat table 을 클릭합니다.
치트엔진의 하단 테이블에 스크립트가 생깁니다.
위와 같이 스크립트를 작성 해 줍니다. (바이트 수 맞추는게 익숙하지 않아서 오래 걸렸네요 ㅠㅠ)
스크립트의 체크박스를 클릭합니다.
방금 전의 " mov [ebp-10], eax " 코드는 사라지고 " jmp 046A0000 " 코드로 바뀝니다.
이 코드를 따라가보면은
아까의 test 공간이 나오게 됩니다.
디버깅을 해보시면은 " 정상 " 이 출력됩니다.
감사합니다.
반응형
'리버스 엔지니어링 > 치트엔진' 카테고리의 다른 글
치트엔진으로 안티디버깅 우회 해보기 IsDebuggerPrensent -2 (Code Cave) (2) | 2018.09.27 |
---|---|
치트엔진으로 안티디버깅(IsDebuggerPresent) 우회 해보기 (1) | 2018.09.16 |
치트엔진으로 Crackme 분석해보기 (0) | 2018.09.01 |