리버스 엔지니어링/치트엔진

치트엔진으로 안티디버깅 우회 해보기 - PEB

뿔맨 2018. 9. 19. 05:19
반응형
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 공간이 나오게 됩니다.

디버깅을 해보시면은 " 정상 " 이 출력됩니다.

감사합니다.

반응형