오늘 문제는 nag를 없애는 문제이다.
프로그램 실행 시작 전, 종료할 때 nag가 출력이 된다.
nag가 실행이 될 때, 일시정지를 눌러준다.
Call Stack에 가서 하나씩 분석해 보자.
<JMP.&MFC부터 들어가 브레이크 포인트를 걸어주고 재실행을 해보자.
해당 부분에서 브레이크가 걸리는 거 보면 여기 부분에서 호출을 하는 거 같다.
콜이 돼서 온 것 같으니까 ESP를 확인하면 호출된 주소로 갈수있다.
분기점을 찾아서 평소 하던 대로 JE를 JNZ로 수정을 하고 실행을 시키면 프로그램이 종료가 돼버린다.
인라인 패치를 하기 위해 JE를 JMP로 수정을 해 여하는데 공간이 작아서 수정을 하기가 애매하다.
그렇기 때문에 CALL <JMP 부분의 공간을 사용할 것이다.
빈 공간을 찾아 이동을 한다. 여기에서는 쓰기 권한이 없기 때문에 사용을 못 한다. 그렇기 때문에 쓰기 권한이 있는 곳으로 이동하는 프로그래밍을 해줘야 한다.
메모리에 들어가서 쓰기 권한이 있는. data 부분의 빈 공간에다가 인라인 패치를 할 것이다.(올리디버그 툴이 이상하게 쓰기 권한 표시가 안 보인다.... 다른 툴은 보임..)
00446 FF0 공간을 사용할 것이다.
CALL 00432 D3 E
push eax -> EAX를 사용해서 인라인 패치를 할 때는 함부로 데이터를 갖다 쓰면 안 되기 때문에 EAX를 고정시킨다
mov eax, [446 FF0] -> eax로 가져온다.
inc eax -> eax를 1을 올려준다.
mov [446 FF0], eax -> [446FF0] 주소에다가 eax를 저장한다.
cmp eax, 2
pop eax -> 다 쓰고 나서 다시 복구를 해줘야 한다.
je 42037b -> eax가 2면 windows가 실행이 된다.
jmp 004204 BA -> windows가 실행이 안된다 nag가 실행 안된다
새로 작성한 주소로 jmp 437 D65를 해준다.
그다음 나머지는 Nop으로 채워주고 파일을 저장하면 정상적으로 첫 번째 nag와 세 번째 nag가 실행이 안된다.
'모의해킹 > 리버싱' 카테고리의 다른 글
키 생성기(키젠) 만들기 : 레나 챌린지(Level17) (0) | 2023.09.30 |
---|---|
윈도우 ID 추적과 레디스트리 쿼리 분석 : 레나 챌린지(Level16) (0) | 2023.09.26 |
올리디버거를 사용한 인라인 패치 : 레나 챌린지 (Level 14) (0) | 2023.09.25 |
안티디버깅 Exception과 중요한 API 정보 확인 : 레나 챌린지(Level13) (0) | 2023.09.24 |
난독화의 시작 (델파이 프로그램) : 레나 챌린지 (Level 12) (0) | 2023.09.23 |