[CodeEngn] Basic RCE L12 풀이
- 리버싱/CodeEngn
- 2020. 2. 22. 16:26
CodeEngn Basic RCE L12 문제 확인
성공메시지를 볼 수 있는 key값과 메시지박스에 key값이 나오도록 하려면 파일의 어느 영역을 key값으로 덮어쓰면 되는지를 묻고있다.
파일을 실행시켜 보니 다음과 같이 key값을 입력받고 있다.
CodeEngn Basic RCE L12 풀이
문자열들을 보니 성공메시지와 관련한 문자열 "Congtratulation~"이 보인다.
해당 함수가 사용되는 함수로 가보니 성공메시지가 출력되려면 eax가 0x7A2896BF 여야 한다.
일단 key값으로 '123'을 줘보았다. GetDlgItemInt는 정수 입력값만 받기 때문에 그 외의 값을 주면 리턴값이 0이 되고 정수값이면 리턴값이 입력값이 된다. 123(0x7B)를 입력으로 주었기 때문에 eax에 0x7B가 저장되었고 그 이후에 시리얼처럼 생긴 여러 문자열들을 가져오면서 약간의 연산을 거치는데 처음엔 뭐지 하고 자세히 봤는데 그냥 문제풀이에 혼선을 주기 위한 함정인 것 같다.
IDA에서도 봤다시피, 40107D의 성공으로 가는 분기점까지 실행시켜보면 cmp를로 비교하는데 이때의 eax값은 처음 입력값에서 변화가 없다. 따라서 eax가 0x7A2896BF여야 한다는 것을 알 수 있다.
따라서 0x7A2896BF를 10진수로 바꾼 값을 key값으로 주면 아래와 같이 성공메시지를 볼 수 있다.
그리고 hex값은 원래 메시지박스에 출력하기 위해 저장되어 있었던 문자열에 덮어써주면 된다.
아래와 같이 덮어써준 후 저장해준다.
그럼, 아래와 같이 성공 메시지 대신 키값을 메시지창에서 볼 수 있다.
'리버싱 > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L09 풀이 (StolenByte) (0) | 2020.02.23 |
---|---|
[CodeEngn] Basic RCE L08 풀이 (0) | 2020.02.22 |
[CodeEngn] Basic RCE L07 풀이 (0) | 2020.02.20 |
[CodeEngn] Basic RCE L06 풀이 (0) | 2020.02.20 |
[CodeEngn] Basic RCE L05 풀이 (UPX 패킹) (0) | 2020.02.19 |