先看看 main 函数,直接strcmp比较
2023-12-03T214728
提交zer0pts{********CENSORED********}错误
继续分析,应该是在执行main函数之前,进行了某些修改
执行main函数前一般会执行init函数,查看init函数
2023-12-03T215514
跟踪一下 off_200DF0 和 funcs_889
2023-12-03T215754
off_200DF0 指向了 sub_6A0
funcs_889 指向了 sub_6E0 和 sub_795
而在init函数中 若 v4 != 0 则会调用funcs_889中的函数
所以我们跟踪一下 sub_6E0 和 sub_795
sub_6E0 中没有什么有用的信息
sub_795 中对 strcmp 进行了hook
会先执行 sub_6EA 再执行 strcmp
2023-12-03T220224
sub_6EA 中对 比较的内容进行了修改
2023-12-03T220614
据此写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;

int main(){
char flag[] = "zer0pts{********CENSORED********}";
uint64_t k[] = {0, 0x410A4335494A0942, 0x0B0EF2F50BE619F0, 0x4F0A3A064A35282B, 0};
for (int i = 0; i < 4; i++){
*(uint64_t *)&(flag[i * 8]) += k[i];
}
printf("%s\n", flag);
return 0;
}
//zer0pts{l3ts_m4k3_4_DETOUR_t0d4y}