[Dreamhack]wargame/REVERSING

[Dreamhack] Reversing Basic Challenge-3

bigwhaleking 2024. 5. 13. 16:31

-코드 분석

IDA에 문제 파일을 실행했을 때 보이는 모습입니다. 여기에서 볼 수 있는 점은 입력한 문자열이 맞으면 correct, wrong 해주는 것을 볼 수 있습니다.

여기서 디버그 해보겠습니다.

디버그 한 모습에서 if 문이 보이는데 if문 안에 있는 sub_140001000에서 뭔가가 일어나 correct 또는 wrong을 출력해 주는 것을 볼 수 있습니다.

sub_140001000에 들어 갔을 때 무슨 반복문을 볼 수가 있습니다.

그리고 byte_140003000이라는 것이 있는데 들어 갔을 때 이런 값들을 볼 수가 있습니다.

이런 것들을 종합해서 봤을 때 I 가 byte_140003000에 있는 값들을 나타내는 것을 알 수 가 있습니다.

 

-EXPLOIT

sub_140001000에 있던 반복문을 이제 역산해 주기만 한다면 DH값을 얻을 수가 있을 겁니다.

#include <stdio.h>

 

main() {

unsigned char a[] = { 0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0x0A5, 0x9D, 0x45, 0x00};

for (int i = 0; i < 24; i++) {

char b = (a[i] - 2 * i) ^ i;

printf("%c", b);

}

}

이 코드를 실행해 준다면

이라는 문구가 나옵니다.

이것이 맞는지 프로그램에 입력을 해보면 맞는 것을 볼 수가 있습니다.