안녕하십니까 코딩 파인애플입니다
이번에는 rev-basic-0~3을 풀어보겠습니다
참고로 사용한 툴은 Radare2 입니다
뭐, IDA나 Radare2나 거기서 거기인 정적 분석 도구죠 뭐.
https://dreamhack.io/wargame/challenges/14
대략적인 흐름은 최대 %256s 자의 입력을 받아 var_20h스택에 저장하고
Call section..text 로 넘겨 결과를 eax로 받습니다
그리고 eax가 1이라면 0x140001157로 넘겨 Correct 출력을, 0이라면 0x140001166으로 넘겨 Wrong 출력을 하는 단순한 구조입니다
이제 section..text 함수를 살펴봅시다


flag : DH{Compar3_the_str1ng}
https://dreamhack.io/wargame/challenges/15
main함수는 rev-basic-0과 비슷한 구조라서 생략하겠습니다

맨 위의 함수 블럭의 경우 67 (C)와 동일한지 판별함을 알 수 있고 참이라면 오른쪽 함수로, 거짓이면 왼족 함수로 xor을 통해 0을 반환하여 메인으로 보내는 함수임을 추측할 수 있습니다
이를 계속 반복하는 구조입니다
대략적인 코드를 짜보면 다음과 같습니다
str = [67,111,109,112,97,114,51,95,116,104,101,95,99,104,52,114,97,99,116,51,114]
for i in str: print(chr(i),end='')

flag : DH{Compar3_the_ch4ract3r}
https://dreamhack.io/wargame/challenges/16
Comp4re_the_arr4y 배열을 이용해 입력 버퍼의 바이트마다 dword[i]로 1바이트씩 비교하는 rev-basic-0과 비슷한 구조의 함수입니다
하나라도 다르면 즉시 eax에 0을 반환하고 18개가 전부 일치하면 eax에 1을 반환해 Correct를 출력합니다


내일 작성할랍니다 lol.