첫 프로그램 실행 시 다음과 같이 Name과 Serial을 입력하는 창이 뜨게 된다
랜덤한 값을 넣어주면 마지막 줄에 다음과 같이 출력되게 된다
문제의 요구사항은 위와 같이 시리얼이 주어져 있을 때, 이름을 구하라는 내용이다
Search for - All referenced text strings를 통해 해당 프로그램에서 볼 수 있는 문자열들을 확인해 보기로 하였다
Input Name, Input Serial, Wrong 등의 내용이 확인 되는 것을 알 수 있다
클릭해 들어가면, 이러한 부분이 뜨게 되는데 초록색 부분의 함수 가장 상단으로 가보도록 하자
이 부분에서 익숙한 401000을 만날 수 있다
이제 이곳에 BP를 걸어주었다
F8을 눌러 빨간 부분에 접근 시 다음과같은 실행창이 뜨게 된다
여기서 InputName에 1234를 넣어주었다
이후에 이렇게 1234과 다음과 같이 하단의 창에 값이 0019FE08에 입력이 된 것을 볼 수 있다
빨간줄의 경우, ESP+ESI+C의 내용을 바이트로 전환하여 ECX에 넣어준다라는 내용이다
해당 내용에 필요한 값들을 오른쪽 창에서 파악해주었고
ESP는 0019FDF8, ESI는 0x0, 0xC 라는 사실을 확인했다
위의 값들을 모두 더해 계산하면 19FE04가 나오는데, 이 바이트 값이 ECX들어간다는 말이 된다.
다음줄로 내려가면, 0x19FE04의 바이트값이 들어있는 ECX 값에는 10들어있는 것을 볼 수 있다
그 다음 줄로 내려가면, 같은 원리로 필요한 값들을 확인해주어야한다
ESP는 0019FDF8이고 EBP는 0x0, 0x10라는 것을 파악하였다
해당 모두 더하면 19FE08인데, 이것을 EDX에 바이트 전환하여 넣어주는 것이다
다음 줄에서 EDX는 00000031인 것을 알 수 있다
다음 줄에서는 XOR을 통해 ECX, EDX를 해주어야하는데
위에서 ECX가 00000010이고 EDX가 00000031이라는 사실을 확인했으므로,
0x00000010^0x00000031의 값을 계산만 해주면 된다 이 값을 앞의 ECX에 대입해주는 것이다
XOR 계산기를 사용하였는데, 결과 값이 21이 나왔다
XOR 시에 XOR EAX, EAX면 0이런 결과가 나왔겠지만,
위와 같이 숫자값이 들어가면 따로 이렇게 연산을 해주어야 한다
다음줄에 내려가보니, 실제로 ECX에 00000021값이 담겨 있다
XOR계산한 값이 PUSH되고 ESP에 ADD가 된다
여기서 조금 위쪽의 %s%02%는 입력한 값을 한바이트씩 받아오는 것을 의미한다
그래서, 우리가 알 수 있는 것은
한번 돌때 EBP를 1씩 증가해서 EBP와 ECX의 값이 같아지면 탈출 하라는 내용이다
이 함수는 JL을 마주하면, 계속 반복되는 사실 또한 확인할 수 있다
여기서 우리가 내릴 수 있는 결론은,
한글자씩 Name에 넣은 값을 반복시켜 특정값을 XOR한 값을 시리얼로 사용한다는 것이다
실제로 1,2,3,4를 넣어줬을 때 위의 반복문이 4번 반복되는 것을 확인할 수 있었다
1,2,3,4를 통해 4번 반복을 마친 후, 바로 다음 줄로 넘어가게 된다
이 과정을 반복하며 깨달은 사실이 있다
ECX값은 반복 시에 0x30까지 증가하고 그 다음 로직에서는 0x10으로 바뀐다는 사실이다
이를 통해 ECX값은 0x10 ~ 0x30까지를 반복하는 것을 알 수 있다
Name값을 입력하여 위와같은 반복에 따라 시리얼 결과값이 나온 것이므로,
로직에 따라 주어진 시리얼키를 복호화하는 파이썬 코드를 작성하고자 하였다
앞서 문제를 다시 확인 하자면, 시리얼은 시리얼 5B134977135E7D13이다
XOR특성상 연산한 값을 다시 거꾸로 연산하면 원래대로 돌아오는 성질이 있어서
우리는 이제 복호화 코드에 시리얼 키를 넣으면 => 원래 Name이 출력될 것이라는 것을 기대할 수 있다
그래서 위와 같은 복호화 코드를 사용해주었고
결과는 K3yg3nm3 이 나오게 된다!
'2. Reversing (리버싱) > 1) Write UP' 카테고리의 다른 글
[2020.04.14] Reversing.kr | ImagePrc 문제 (0) | 2020.04.26 |
---|---|
[2020.05.14] Reversing.kr | AutoHotkey1 문제 (0) | 2020.04.26 |
[2020.04.07] Reversing.kr | CSHOP 문제 (0) | 2020.04.25 |
[2020.03.31] Reversing.kr | Easy crack 문제 (0) | 2020.04.25 |
[2020.04.07] Reversing.kr | Easy_Unpack (0) | 2020.04.23 |