레나튜토리얼1. reverseMe

* 다양한 리버싱 방법이 있으며, 문제 해결에 집중하였습니다.
* 수정할 부분이나 더 좋은 방법이 있으시면, 댓글 부탁드립니다.



레나튜토리얼 첫번째 reverseMe를 실행파일을 실행하면 출력되는 메시지 박스.


* 평가판 기간이 끝났습니다. 새로운 라이센스를 구매해주세요




이 문제는 리버싱을 통해서 메시지 박스를 변경하여 출력하면 됩니다.





* 풀이



=> 40107B - JNZ 명령어를 JMP 명령으로 수정.

=> 4010B0 - JNZ 명령어를 JMP 명령으로 수정.

=> 4010BF - JL 명령어를 JG로 수정.

=> 4010D6 - JL 명령어를 JG로 수정.





올리디버거를 통해서 실행파일을 디버깅하면  401000부터 디스어셈블 창에 표시됩니다.


F8 을 눌러 하나씩 아래로 내려가면 주소 401073에서 CreateFileA 함수를 확인하실 수 있습니다.


CreateFileA (msdn 참고)

- 파일 혹은 입출력장치를 생성하거나 여는 함수

- 7개의 매개변수를 가지며, FileName을 포함하고 있음.

- 파일이 생성 및 열지를 못하면 -1 값을 리턴함.


CreateFileA 함수를 통해서 keyfile.dat을 열어서 키 값을 확인하는데, 우리는 파일이 없다.

그래서 함수가 정상 실행되지 못하고 return 값으로 -1(FFFFFFFF)을 넘겨준다.



주소 401073 함수 실행 

- EAX의 리턴값이 FFFFFFFF로 설정되어 있다.

(어셈블리에서 함수의 리턴값은 EAX에 저장되며, -1은 FFFFFFFF로 표현됨.)


주소 401078 CMP EAX, -1

- EAX과 -1을 비교하면 zf(zero flag)값이 1로 설정

- 여기서 값이 같으므로 1로 설정됨.


주소 40107B JNZ SHORT reverseM.0040109A

- 매우 중요한 부분. 이 부분을 수정하여 초기 '라이센스 구매' 메시지 박스를 피할 수 있다.

- JNZ => zf가 1이 아니면 점프하라. 현재 ZF가 1로 설정이 되어 있어 점프하지 않고 다음 명령을 그대로 실행.

- 이 경우 "라이센스 구매" 메시지 박스가 출력되므로 반드시 점프해야한다.

- 해결방안 => JNZ명령어를 JMP명령으로 수정. (CMP 명령과 상관없이 점프하므로 라이센스 메시지 박스를 피함.)









'리버싱' 카테고리의 다른 글

레나튜토리얼1) reverseMe  (0) 2019.01.31
리버싱) 바이트 오더링 및 레지스터  (0) 2018.12.03
리버싱) Ollydbg (올리디버거)  (0) 2018.11.27
리버싱) 리버스 엔지니어링  (0) 2018.11.24

+ Recent posts