reversing.kr 1번 문제 초기화면
시작하자마자 401xxx 주소이므로 따로 엔트리포인트를 찾을 필요가 없다.
문자열 검색을 해보면
이렇게 매우 의미 심장한 단어들이 나온다.
해당 번지로 점프해서 트레이싱 해보자
수상한 문자열과 GetDlgItemTextA api를 사용하는 루틴을 찾았다. 401080에 bp를 걸고 천천히 따라가보자.
우선 입력값으로 1234를 주고 실행시켜보았다.
보면 ESP-4 부터 내가 입력한 1234의 아스키코드가 들어가있고 4010B0명령어에서 ESP+5에 해당하는 글자, 즉 2번째 글자와 61(a)를 비교하고있다.
같지 않으면 401135로 점프한다는데 401135를 살짝 살펴보자
따라서 2번째 글자는 a로 확정이다.
그 다음은 문자열 5y와 ECX에 담긴 값을 가지고 401150에 있는 함수를 호출하고있다. 1a34를 넣고 직접 트레이싱 해보자
ecx는 입력해준 문자열의 마지막 두 글자를 가리키고 있고
repe와 cmp가 반복되는걸 보니 문자열의 길이를 구하고 그 길이만큼 비교하는 루틴 같다. 5y와 34를 비교해서 다르면 401135로 점프하는 문장이다.
++팁! NEG ECX와 REPNE SCAS BYTE어쩌구가 같이 나오면 10중 9는 문자열의 길이를 구하는 문장이다. 왜그런지는 예전에 알았는데 지금은 까묵움;
이제 컨f2를 누르고 1a5y를 입력하고 다시 트레이싱 해보자
401179와 40117B에서 비교 결과에 따라서 점프하는 문장이 있다. 이 부분은 걍 쓰기 귀차늠 ㅅㄱ 암튼 0이 맞는거
2번째 검사루틴이다.
우선 우리가 입력한 문자열은 ESP+0xC부터 들어간다. 따라서 ESP+0x10은 5번째 글자라는걸 알 수 있다.
반복문의 구조를 보면 알 수 있지만 매우 단순하다.
esi에는 R3versing이라는 문자열을 넣고
eax에는 우리가 넣은 문자열의 5번째 글자부터 끝까지 집어넣는다.
1번 : eax, esi에 들어있는 문자열 비교
2번 : eax+1, esi+1에 들어있는 문자열 비교
3번 : eax += 2, esi += 2
즉 비교해서 만약 다르면 401135로 점프하는 루틴으로 넘어간다 (401102)
정상적인 수순으로 나온다면 TEST문에서 EAX가 0일것이고 401102를 통해서 나오면 다른 값이 들어갈 것이다.
마지막으로 esp+4 즉, 첫글자를 검사해서 45(E)라면 그대로 칸그레츄레이션으로 간다.
굳 답은 Ea5yR3versing이었다.
'write-up > reversing.kr' 카테고리의 다른 글
Replace (0) | 2018.12.19 |
---|---|
position (0) | 2018.12.18 |
ImagePrc (0) | 2018.12.05 |