본문 바로가기

My Study/Reversing

네이트온 안티디버깅 우회

테스트 네이트온 버전
리버싱을 하는 사람으로서 OllyDbg, WinDbg등 이런 디버거들을 항상 켜야만 한다.
하지만 네이트온에서는 이런 툴들을 킨 상태에서 로그인을 하려고하면 

위와 같은 창을 경험하게 될 것입니다.

네이트온을 까고 싶진 않지만.. 내 공부와 네이트온을 같이 하기 위해서는 어쩔 수 없이 안티디버깅 부분을 우회할 수밖에 없었습니다. 시작해보겠습니다. 그 부분만 잘 찾으면 크게 어려운 건 없었습니다. 어셈블리언어로 안티디버깅 기술을 적용시켜논게 아니었기도 했구요 ^^

가장 먼저 안티디버깅에 걸리는 부분은 ID와 PW를 치고 로그인을 눌렀을 때 걸리게 됩니다. 
여기서 생각해볼 수 있는게 ID와 PW를 검증하기 전에 안티디버깅 기술이 있다고 생각이 됩니다.
그리고 네이트온만 켜논 상태에서 Attach를 시키면 안티디버깅에 걸리진 않습니다. 

전 Attach를 시키고 먼저 암호를 치려고하면 무조건 걸리는 SendMessage함수에 브포를 걸고 거기서부터 계속해서 트레이스를 했습니다. 그래서 특정 부분이 걸렸습니다.

해당 부분 함수를 실행시키면 걸리게 되더군요. 함수 안으로 들어가보겠습니다.

빨간색 네모친 부분만 보시면 됩니다. 위쪽에서 EBP에 특정 값을 넣고 있구요. 아래서 그 값에 해당하는 함수를 실행하고 있습니다. 그러면 어떠한 값을 EBP에 넣고 있는지 봐보겠습니다.

CKAppEx라는 라이브러리에서 GetHashCodeEx라는 함수를 가장 처음 부릅니다.
하지만 CALL EBP를 실행하는 순간 또 안티디버깅에 걸리게 됩니다. 그래서 다른 함수를 호출하게 하면 되겠구나라고 생각하고 함수들을 전부 바꿔서 실행해 보았지만 실패했습니다. 하지만 

안티디버깅에 걸리진 안았지만 위와 같은 창이 뜨더군요. ( ID와 PW는 올바르게 입력했습니다. )
이제 결론이 났습니다. 네이트온은 로그인을 하기위해 ID와 PW를 인증하는 부분에 안티디버깅 기술을 같이 적용시켜 논 것입니다. 그러면 아까 그 부분에서 GetHashCodeEx라는 함수 내부로 들어가보겠습니다. 어떠한 안티디버깅 기술을 쓰고 있는지 보고 우회를 하겠습니다.

안으로 들어가서 중요한 부분만 또 봐보도록 하겠습니다.
아마 트레이스 하시다보면 ID와 PW를 인증하는 부분이기 때문에 자신이 입력했던 ID와 PW를 그대로 가지고와서 암호화시키고 등등..하는 것을 보실 수 있습니다. 하지만 이것은 우리 목적이 아니기 때문에 넘어가겠습니다.

가장 처음에 보실수 있는 안티디버깅 기술 적용된 부분입니다.

해당 부분을 실행하면 프로그램이 종료되게 됩니다. 안으로 들어가서 봤더니
ID와 PW를 인증하는 부분과 아무런 관련이 없는 부분이라서 전..가장 간단한 방법인!
NOP처리를 해버렸습니다. 그랬더니 잘 넘어가더군요. 그 아래로 보시면

무수히 많은 ExitProcess라는 함수들을 볼수 있었습니다. 딱 봐도 빨간색 네모쳐진 부분처럼 저런 함수들 결과에 따라 ExitProcess되느냐 마느냐가 결정되는거 같습니다. 빨간색 네모쳐진 함수 내부로 들어가보겠습니다.

봐보니 안티디버깅 함수인 CheckRemoteDebuggerPresent함수를 떡하니 호출하고 있었습니다.
해당 부분을 살포시 넘어가겠습니다. 레지값을 바꿔도 되고 해당 함수를 나와서 점프문을 바꾸던지 플래그 값을 바꾸던지해서 우회를 하면됩니다.

그 다음 함수를 계속 보겠습니다. 두번째 빩간색 네모 쳐진 부분입니다.

해당 함수 또한.. OLLYDBG라는 응용프로그램을 찾고 있네요. 있다면 종료시키겠죠. 이 부분 또한 허접하지만 안티디버깅 부분이네요.

이제 어떠한 함수를 보실지 대충 아실것입니다. ExitProcess함수로 가느냐 마느냐를 결정짓는 함수를 계속 보겠습니다.

해당 함수 또한..아시겠죠?? ^^ 간단히 우회를 해주시면 됩니다.
다음 함수를 보겠습니다.

오.. 이번에는 어셈블리언어로 안티디버깅기술을 적용시켜놨습니다. IsDebuggerPresent함수인거 같네요.
안티디버깅 쪽으론 크게 지식이 없지만.. 이것 참.. 너무 알기쉽게 되어있네요.
그리고 이런 안티디버깅 기술을 몰라도 위쪽에서 단순이 점프문 수정으로만 전부 우회해버릴 수 있습니다.

그 아래쪽으로도 몇개의 안티디버깅 기술이 더 있지만 단순히 점프문 우회만으로 전부 ExitProcess부분을 우회시킨 다음 
F9를 눌러서 실행시키면 오류창이 뜨지 않고 네이트온이 정상적으로 로그인되는 것을 보실 수 있습니다.

전 해당 부분 전부 고쳐서 네이트온 써야겠네요 ^^ 이런 오류창이 불편하신 분들도 저처럼 쓰시길..
수정시킨 DLL은 올려드리겠습니다. 다들 리버싱 공부 열심히 합니다.^^ 
( 현재 해당 파일이 있는 위치에 덮어 씌워주면 됩니다 )

'My Study > Reversing' 카테고리의 다른 글

Segment Register  (0) 2010.03.10
Assembly 점프 문  (4) 2010.02.26
OllyDbg 심볼 파일  (0) 2010.02.19
IDA 원격디버깅 ( 리눅스 파일 IDA에서 라이브 디버깅 해보자 )  (0) 2010.02.09
8086어셈블리 명령어  (0) 2010.01.08