kaka09
code engn basic 17 본문
[사진]1-1
이번에는 연속 우려먹는 문제에서 탈출하였다. 키값이 주어지고 주어진 키값에 맞는 name값을 찾으라는 문제이다. 점점 마지막에 가까워지니 난이도 조절을 하는 것일까?? 아무튼 이번에도 PEID로 먼저 확인절차를 가해보았다.
[사진]1-2
확인결과 패킹은 씌워져 있지 않았다. 고로 올리 디버거로 바로 확인해보았다.
[사진]1-3
올리 디버거로 실행결과 정상적으로 프로그램이 불러와졌다. 이전 과정과 똑같이 성공메세지 부분을 찾아보자
[사진]1-4
이번 문제는 이전 문제들과 달리 실패 메세지가 존재하지 않은것 같다. Good boy, well done등 메세지가 보이는걸로 봐서 성공 했을경우만 성공 메세지가 출력하는것 같다. 그래서 성공 메세지 영역으로 들어가 어셈코드를 분석해 보았다.
[사진]1-5
분기문을 살펴보면 00404c3c 함수를 거쳐 나오면서 zero 플래그가 1이 아니면 실패로 간주하는 코드인것 같다. 일단은 직접 동적 디버깅을 시도해보면서 00404C3C 함수로 진입한 다음에 루틴 과정을 살펴보자
[사진]1-6
NAME을 입력하면서 길이가 3글자 이상만 입력이 가능하다고 한다.. 하지만 분명 문제에서는 답이 한 글자라고 했는데..?? 그래서 길이를 체크하는 어셈코드를 확인해 보았다.
[사진]1-7
해당 영역에서 길이를 체크하는것을 알 수 있다. 따라서 다음 단계를 진행하기 위해 CMP EAX, 3 ->EAX, 1 로 바꿔서 진행해야 한다.
바꾼 다음 00404C3C 함수영역으로 진입해보자
[사진]1-8
EAX와 EDX가 서로 같은지 비교하는 구문이 존재한다. 00404C3C 함수는 값이 서로 같은지 체크만 할 뿐 실제 키값 생성은 이전함수에서 처리하는것을 알 수 있다. 따라서 실제 키값을 생성하는 함수를 찾아 보았다.
[사진]1-9
0045B850 함수를 거치고 나니 NAME 1에 대한 키값이 생성되는것을 확인 할 수 있었다. 키값이 생성되는 알고리즘을 보려면 0045B850함수에 진입해야 한다.
[사진]1-10
함수에 진입하면 키를 생성하기위한 여러 어셈코드가 보이는데 [사진]1-10은 [사진]1-9에서 "63E2"를 만들어내는 알고리즘이다. NAME 1의 아스키 코드인 31에서 더하고 곱하고 더하고 곱하고를 연산 과정을 반복하면 최종적으로 63E2 라는 키값을 만들어 낸다. 나머지 키값들도 다소 차이가 있지만 위 과정처럼 해서 만들어진다. 내부 함수를 뜯어봐서 키값으로 추정 되는 4개의 값을 도출해내었다.
EDX=63E2EBF0
EDX=02336B74
81C577AC 082F7A95144E148611717010 from 008045b4a0
EDI=089C5112
EBX=222D8440
도출된 키값들은 각각 해당 레지스터에 저장되고 순서는 기술되어 있는대로 값이 도출되어 레지스터에 저장된다. "81C577AC~"의 값은 008045b4a0 함수에서 가져오는것 같은데 정확히 어떤 원리로 해당 값이 도출되었는지는 나중에 분석을 해봐야겠다. 그에 반해 나머지 값들은 [사진]1-10 과 비슷하게 어떠한 연산과정을 통해 도출된 값들이다.
재밌는점은 여기서 0을 제외한(앞자리가 0이면 제외하는지 아닌지는 모름) 4글자씩만 뽑아서 서로 잇는 다는점이다.(3번째 자리 제외 3번째 자리는 8글자를 가져옴).
서로 값을 이어보면 63E2-2336-81C577AC-89C5-222D 라는 키값이 도출된다. [사진]1-9에 나온 값하고 비교해보자 일치하는 값이 있다.
고로 어느 특정값을 입력하게 된다면
BEDAXXXX
2F56XXXX
BC4F4368XXXXXXXXXXXXXXXXXXXXX
8A71XXXX
870BXXXX
값을 차례대로 생성한다고 할 수 있다. 정답은 1글자이고 영숫자중 하나이니 Bruteforce를 통해 알아내었다. [a~zA-Z][0-9]
[사진]1-11
F에서 서로 키값이 같은것을 알 수 있다.
'Reversing' 카테고리의 다른 글
Reversing.kr Easy_CrackMe Write Up (0) | 2017.11.01 |
---|---|
code engn basic 18 (0) | 2017.08.03 |
code engn basic 16 (0) | 2017.08.02 |
code engn basic 15 (0) | 2017.08.02 |
code engn basic 14 (0) | 2017.08.02 |