https://ctf.j0n9hyun.xyz/challenges
이 문제를 IDA로 열어보도록 하겠습니다.
아마도 check_key의 값이 참이면 플래그를 출력하는 프로그램인 것 같습니다.
입력한 문자열의 길이가 9자 이상 64자 미만이어야 합니다.
그리고 입력한 문자열을 encoding이라는 함수를 통해서 값을 바꿔준 후에
"OO]oUU2U<sU2UsUsK"와 같으면 성공인 것 같습니다.
입력한 값은 이 과정을 거치면서 변형됩니다.
이제 이 부분을 C언어로 이식한 다음 무차별 대입을 통해서 답을 구해보도록 하겠습니다.
#include <stdio.h>
int main()
{
int i,j,k=0;
int a=72,b;
char string[17]={"OO]oUU2U<sU2UsUsK"};
char flag[100]={"0"};
for(i=0;i<17;i++)
{
for(j=33;j<127;j++)
{
b=((j+12)*a+17)%70+48;
if(b==string[i])
{
a=b;
flag[k]=j;
k++;
break;
}
}
}
printf("%s",flag);
return 0;
}
이렇게 해서 나온 값은 "A,d<&$+$''.+$&.&&"입니다.
이제 이 값을 문제 서버에 넣어주면...
놀랍게도 아무 일도 일어나지 않습니다.
왜 그런가 하고 검색을 해봤더니 문자열을 입력받는 fgets함수가 원인이었습니다.
fgets함수는 문자열을 입력받을 때 마지막에 입력되어있는 개행 문자(\0)까지 입력받기 때문입니다.
따라서 마지막에 있는 "&"를 지운 "A,d<&$+$''.+$&.&"를 입력하면 답을 얻을 수 있습니다.
답:HackCTF{Y0u_5ucc33d3d_w1th0ut_d1fficul7y?}
'HackCTF Write Up > Reversing' 카테고리의 다른 글
HackCTF Reversing Strncmp Write Up (1) | 2021.09.19 |
---|---|
HackCTF Reversing Handray Write Up (0) | 2021.09.19 |
HackCTF Reversing Reversing Me Write Up (0) | 2021.09.19 |
HackCTF Reversing Welcome_REV Write Up (0) | 2021.09.19 |