코드엔진 - basic 10
10번을 풀어보겠습니다.
이러한 문제입니다.
실행했을때 이런 화면이 나옵니다.
peid로 확인해보니까 Aspack 패킹이였습니다.
Aspack은 압축해제 -> 압축해제 끝 -> 프로그램 실행
이 순서입니다.
pushad -> 압축해제 -> popad -> oep로 분기
방식으로 원본코드를 볼 수 있습니다.
pushad 발견
pushad 실행 후 esp값 변화 확인
esp우클릭 후 덤프에서 따라기기 클릭
이러한 것이 밑에 뜹니다.
여기서
우클릭 - 중단점 - 하드웨어, 엑세스 - Dword 클릭
이제 esp가 가르키는 메모리 주소에 접근할 때 bp를 걸어두고 실행시키게 되면, 메모리 상에 복구를 마친 뒤 OEP로 분기전 상태가 되며 F9누르면 bp전까지 실행됩니다.
f9로 실행하고 나서 jne구문 발견 이제 push 445834를 하는것을 보면
OEP는 445834이다.
oep로 도착했습니다. 이제 등록성공 분기점 opcode만 찾으면 됩니다.
문자열로 찾아봅시다.
끝쪽까지 다 내리고 나서 보니 성공문이 보입니다.
저기서 enter을 누르면 이런식으로 오류가 뜹니다. (아마 코드 복구가 끝나고 x32dbg에서 새로고침을 안해서 그런가 봅니다.)
디스어셈블러에서 따라가기를 클릭해봅시다.
정상적으로 코드가 보입니다.
여기가 분기점 입니다.
opcode : 7555
oep + opcode = 004458347555
입니다.
답 : 004458347555