Serial을 구하시오
패스워드를 입력하는 란이 있다. 패스워드를 입력하면 에러 메시지가 출력된다.
우선 x32dbg로 실행이 되지 않아, ollydbg를 사용하였다.
debugger가 생각보다 완벽하지 않아, 내가 잘못된 것이라고 생각하고 삽질을 계속하였다..
Visual Basic으로 작성된 프로그램은 프로그램의 구조가 특이하다.
Entrypoint 아래에 Main 함수가 있고, Main 함수는 다시 모듈 내의 main 함수로 이동된다. 특이한 점은 Entrypoint 위에 사용되는 함수의 목록들이 아래와 같이 나열된다는 점이다.
주의할 점은 jmp dword prt ds:function_name
여기에 bp를 걸면 안 된다는 것이다. 해당 코드는 단순히 함수로 점프할 수 있는 코드일 뿐이라서, 함수를 실행한다고 반드시 해당 코드를 거치지 않는다는 것이다.
아래와 같이 함수를 직접 검색한 후에 bp를 설정해주자.
패스워드가 존재하고, 내 입력값과 패스워드를 비교할 것이라 생각하여 strcmp 함수에 bp를 걸고 확인하였다. 상당히 쉬웠던 문제.
677345
x32dbg로는 실행이 되지 않았는데, 사용자의 입력을 기다리는 상태로 새 창을 띄우지 못하고 대기 중이었다. 그 이유를 알 수 없음..