拿到文件,拖入ida,是64位
检查字符串
就顺着这个过去了,结果这个也就是main函数,没什么特别
patch_me
很容易,输入偶数输出flag
get_flag
仔细看一下,就1,4,5有用
1,是f1追加到s后面,f2追加到s后面,f1知道,f2还不知道,s是空的
4,是给f2赋值
5,给f2加密
所以顺序应该是4->5->1
小结
1,本题是64位,所以是大端序,再给f2赋值时,s需要倒过来(我这边是先转换成16进制在倒过来)
2,发现编译器在输出16进制时要加0x,不然编译器报错
附录脚本
#include
#include <string.h>
int main(){
char f2[] = { 0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f };
printf("GXY{do_not_");
for (int j = 0; j <= 7; ++j )
{
if ( j % 2 == 1 ){
f2[j]-=2;
printf("%c",f2[j]);
}
else{
f2[j]-=1;
printf("%c",f2[j]);
}
}
system("pause");
return 0;
}
GXY{do_not_hate_me}
(输入进去竟然不对,明明查了就是这个!!!)
ok,我回来改下,输入flag{do_not_hate_me},算对