https://ctf.j0n9hyun.xyz/challenges
이 문제는 이름이 이름인 만큼 바로 IDA로 열어보았습니다.
이것이 이 프로그램의 구조입니다.
주목할 부분은 40058D주소로 가면 실패메시지가 뜨게 되는데 main함수에서 rbp+var_4 주소에 1을 넣고
0과 비교를 해서 다르면 40058D로 점프합니다.
점프를 하지 않으면 400571과 400544를 왔다 갔다 하게 됩니다.
rbp+var_8의 값을 카운터로 사용하는데 0x1E라는 값을 넣어주고 작거나 같을 때 점프하는 jle명령어가 있으므로
31번 동안 반복한다는 것을 알 수 있습니다.
400544는 string과 array에서 한 글자씩 가져와서 더한 다음 다시 string에 넣어주는 코드입니다.
이 과정을 C언어로 코드를 짜서 답을 구해보도록 하겠습니다.
#include <stdio.h>
int main()
{
int i;
int array[33]={0x7,0x4,0x3,0x1,0x4,0x6,0x3,0x1,0x9,0xA,0xB,0xC,0xD,0xE,0xF,0x10,0x1,0x1,0x1,0x2,0x2,0x2,0x3,
0x4,0x5,0x2,0x5,0x2,0x2,0x2,0x2,0x2,0x0};
int string[33]={0x41,0x5D,0x60,0x6A,0x3F,0x4E,0x43,0x7A,0x3F,0x65,0x69,0x48,0x62,0x3A,0x52,0x5E,0x43,0x6B,
0x64,0x41,0x2E,0x6A,0x61,0x50,0x2B,0x46,0x2B,0x2E,0x2E,0x6A,0x62,0x21,0x7D};
for(i=0;i<31;i++)
{
string[i]+=array[i];
}
for(i=0;i<33;i++)
{
printf("%c",string[i]);
}
return 0;
}
답:HackCTF{HotToHanDleC0ldT0H000ld!}
'HackCTF Write Up > Reversing' 카테고리의 다른 글
HackCTF Reversing Keygen Write Up (0) | 2021.09.20 |
---|---|
HackCTF Reversing Strncmp Write Up (1) | 2021.09.19 |
HackCTF Reversing Reversing Me Write Up (0) | 2021.09.19 |
HackCTF Reversing Welcome_REV Write Up (0) | 2021.09.19 |