-
CodeEngn(basic) crackme4 풀이Reversing/CodeEngn(Basic) crackme 2019. 3. 31. 16:10
크랙미4 풀이입니다. 5까지는 무난하게 풀겠네요.
? 프로그램은 계속 정상만 출력하는 기능을 하나요. 아무래도 디버깅을..
일단 코드구요, 아직은 힌트가 없죠. 이쯤에서 문제를 봅시다.
문제는 디버거 프로그램을 탐지하는 함수의 이름을 묻고 있습니다.
그걸 키워드(디버거 탐지 함수)로 해서 구글링하면 함수 IsDebuggerPresent 가 나오는데요, 간략히 설명하고 가겠습니다. PEB 구조체의 디버깅 상태값을 확인하여, 디버깅 당하는 상태라면 1, 아니면 0을 리턴하는 함수입니다.
커널 모드의 디버거는 탐지 불가하며, kernel32.dll에서 호출되는 함수이구요. 보통 프로그램의 보호 차원에서 쓰인다고 합니다. 아무래도 악성코드나 백신코드 등에서 디버깅을 잘 하지 못하도록 하는 역할로 쓰일거 같네요(? 사실 디버깅을 하고 있는건지만 알려줍니다 디버깅 억제는 따로 있을듯 하네요)
아무튼- 문제의 답은 IsDebuggerPresent 같습니다.
그래서 올리디버거로 실행하면 디버깅 당함이라는 문장만 계속 출력되네요. 1초 간격으로 출력되는걸 보면 아마 시간을 세는 함수도 찾으면 있을 거 같아요.
뭐 이거는 저 프로그램을 끄면 나타나는 끝나는 코드구요
예상대로 시간을 세는 함수가 쓰이고 있었죠? 그 아래에는 IsDebuggerPresent 함수가 쓰여 1초 간격으로 디버깅 당하는지를 알려주는 거 같습니다. 사실 굳이 패치를 안해도 되는데, 자기만족 겸 해서 디버깅당하고 있어도 정상이라는 문장이 출력되게 만들어봅시다.
간단하게 IsDebuggerPresent 함수를 NOP으로 바꾸면 되겠죠?
네, 정상이네요 ^~^
레쓰비 마시러 갑니다 홀홀
2019.3.31
'Reversing > CodeEngn(Basic) crackme' 카테고리의 다른 글
CodeEngn(basic) crackme6 풀이 (0) 2019.03.31 CodeEngn(basic) crackme5 풀이 (1) 2019.03.31 CodeEngn(basic) crackme3 풀이 (0) 2019.03.31 CodeEngn(basic) crackme2 풀이 (0) 2019.03.31 CodeEngn(basic) crackme1 풀이 (0) 2019.03.31