그냥 키젠 문제..
첫 입력값은 "12345"이다.
text 검색을 통해 성공/실패 메시지를 출력하는 부분을 찾았고,
실패 메시지로 분기되는 4개의 지점에 모두 BP를 걸었다.
결과적으로 네 번의 분기점에서 key 값을 얻어내서 조합하면 된다.
첫 번째 지점에서는 CMP [ESP+5], 61으로 비교를 한다.
0x61은 아스키코드로 'a'이고, 비교할 문자는 내가 입력한 문자열 중 두 번째 문자열인 '2'이다.
따라서 key의 두 번째 문자는 'a'이다.
두 번째 입력값 "1a345".
첫 번째 분기를 지나면, "5y"와 내가 입력한 나머지 "345"를 인자로 4010C3에서 어떤 함수를 호출하고 있음을 볼 수 있다.
함수 내부로 진입해서 확인해보자.
REPE CMPS 명령어를 이용해서, 두 글자를 비교한다.
내가 입력한 "345"에서 "34" 두 글자를 "5y"와 비교한다.
다를 경우 실패메시지로 분기되니 여기서 key 값의 힌트를 또 얻을 수 있다.
세 번째 입력값 : "1a5y"
그 아래로 내려오면 다음과 같이 스텍 세그먼트의 특정 부분의 값을 EAX로 옮겨서 작업을 하는데,
이거 결국 내가 입력한 값을 저장한 곳이다.
해당 루프문을 분석해보면, EAX값과 ESI값을 증가시키면서 비교를 한다.
즉, 내가 입력한 값과 특정 문자열(R3versing)을 비교한다.
그림에서는 dump창에 표시한 부분에 문자열이 더 있어야 한다..
이 부분에 "R3versing"이라는 문자열이 들어가줘야 함.
네 번째 입력값 : "1a5yR3versing"
그 뒤로 내려오면 기다리던 첫 번째 문자를 비교하는 곳을 찾을 수 있다.
마지막으로 첫 번째 문자가 맞는지를 검사한 후, 맞으면 성공 메시지를 출력하는 부분으로 분기한다.
'Reversing' 카테고리의 다른 글
[reversing.kr] Easy Unpack (0) | 2020.04.13 |
---|---|
[reversing.kr] Easy Keygen (0) | 2020.04.06 |
[코드엔진] Malware Analysis 05 (0) | 2020.04.02 |
[코드엔진] Malware Analysis 04 (0) | 2020.04.02 |
[코드엔진] Malware Analysis 03 (0) | 2020.04.02 |