Codeengn Challenges = Basic 10 풀이.
10번 문제다.
역시 OEP 문제이고, OEP를 구한 후 등록 성공으로 가는 분기점의 OPCODE를 구해야 한다.
다운로드를 눌러서, ./exe 프로그램을 실행해봤다.
이름과 시리얼 입력 칸, 그리고 등록이 안 됐다면서 다시 시도하라는 문구가 존재한다.
가장 중요한 것은 입력 칸에 입력이 안 된다.
About을 눌러봤다.
?????????? 이 CrackMe는 언제 만들어졌고....등등 그냥 소개하는 느낌이다.
PEID 실행.
몇 번이더라......? 아무튼 전 문제에서 나왔던 UPX 패킹이 아닌 ASPack 2.000이라는 것으로
패킹되었다. ASPack ==> PUSHAD ==> 압축 해체 코드 ==> POPAD ==> RETURN 과정으로 동작한다고 한다.
자세한 설명은 http://securityfactory.tistory.com/205 참고.
먼저 ASpack 언패킹해서 OEP를 찾아봤다.
찾는 방법은 처음에 바로 PUSHAD로 레지스터를 모두 스택에 올린다. 그리고 패킹이 풀리고 나면, 그 레지스터들이 POPAD로 인해서 다시 불러오게 된다. 그래서 스택에 저장된 esp에
브레이크포인트를 걸면, 패킹이 풀린 뒤의 정상적인 프로그램 시작 전으로 돌아갈 수 있다.
아래 그림의 설명 과정이다.
한 줄만 실행 한 후의 레지스터. 여기 스택 esp의 주소의 값을 follow in dump로 확인한다.
누르면 좌측 하단의 메모리 덤프 창이 변한다.
이제는 esp 주소에 직접적으로 브레이크포인트를 건다.
위를 보면 첫번째 줄에 POPAD로 레지스터를 불러왔고, 네번째 줄을 보면 RETN OC라는
부분을 볼 수 있다. 저게 바로 OEP가 있는 가는 부분이다.
저기서 다음으로 넘어가면.
이 화면이 나오게 되는데, OEP를 CTRL + A로 코드를 재분석해주면,
코드가 아래 화면과 같이 제대로 정렬된다.
아주 보기에도 좋다.
OEP는 00445834 ==> 즉 분기점의 OPCODE를 구해야 한다.
문자열 검색을 한 스크린샷이고, 클릭되어 있는 부분이 성공했을 경우의 메시지로 추측되는 부분은 문자열의 위치로 간다.
드디어 끝났다.
첫번째 줄에 7555 즉. Opcode는 7555.
위에서 OEP는 00445834.
cf) 섬세하고, 분석을 잘해야 풀 수 있는 문제 같다.
ASpack은 Upx에 거의 기능이 비슷한데, 인지도가 좀 낮다.
'# Related site issues > CODEENGN' 카테고리의 다른 글
Codeengn Challenges = Basic 12. (0) | 2018.03.28 |
---|---|
Codeengn Challenges = Basic 11. (0) | 2018.03.28 |
Codeengn Challenges = Basic 09. (0) | 2018.03.28 |
Codeengn Challenges = Basic 08. (0) | 2018.03.28 |
Codeengn Challenges = Basic 07. (0) | 2018.03.28 |