문제 : StolenByte를 구하시오 Ex) 75156A0068352040
답 : " 6A0068002040006812204000 " <- 드래그
1. 프로그램 살펴보기
프로그램을 실행하면 이런 창이 뜨고 OK버튼을 누르면 2번 사진과 같이 파일을 못 찾겠다는 오류가 뜬다.
패킹 여부등을 알아보기 위해 Detect It Easy를 사용했다.
Detect It Easy를 통해 UPX로 패킹되었음을 알 수 있었다. 이제 디버거로 프로그램을 분석해보자.
2. 프로그램 분석하기
UPX로 패킹되었듯이 PUSHAD로 시작하였고, POPAD를 찾아 OEP를 찾았다.
일단 여기가 OEP라는건 알았는데, 난 StolenByte가 무엇인지 알지 못해서, 구글링을 해보았다.
그러던 중 https://honorlog.tistory.com/9 이 분의 글이 개념 정리가 잘되어있어 참고했다.
내용을 요약하면 MessageBox 함수를 호출할 때 인자가 4개 필요한데, 현재는 1개만 입력되어 있으며,
나머지 3번의 PUSH는 UPX의 특성상 POPAD와 OEP로 점프하는 명령어 사이에 있을것이라고 한다.
그리하여 조건에 맞는 명령어들(StolenByte)을 찾아보았다.
그 후 이 명령어들을 OEP위에 입력해주어야 한다고 하여, 00401000에 입력했다.
이를 통해 StolenByte의 OPcode를 입력하면 되니 OPcode는 주소값 오른쪽의 6A00 ~~~~이다.
따라서 답은 6A0068002040006812204000이다.
이번 문제는 좀 어려웠다.
'리버싱 > 리버싱 문제 코드엔진' 카테고리의 다른 글
코드엔진 Basic RCE L10 (0) | 2021.08.03 |
---|---|
코드엔진 Basic RCE L08 (0) | 2021.07.21 |
코드엔진 Basic RCE L07 (0) | 2021.07.21 |
코드엔진 Basic RCE L06 (0) | 2021.07.13 |
코드엔진 Basic RCE L05 (0) | 2021.05.25 |