先静态搜索一波字符串 发现main函数的位置
观察输入 检测了长度为32 然后将前16字节进行拷贝 之后调用了一个loc_404600和change_2进行了变换和check 成功通过会输出Congratulations!!! 所以目的很明显 就是逆向这两个函数
loc_404600 (check_1)
进入发现根本没有栈帧 推测可能是SMC
由于在主函数中没有相关还原代码 所以程序可能在别的位置 查看了下TLS
这个TLS表项最终索引到了这里 可以看到对v6进行了一个操作 然后根据sub_4020b0每次选出一个异或值 然后跟loc_404600+i的值进行异或
由于本人懒 所以直接选择od进行dump操作
动态调试下 大概就是就是取四个进行轮异或操作
SMC解密后的伪代码如下
char __cdecl sub_404600(char *a1, int a2)
{
char result; // al
char v3; // [esp-34h] [ebp-F0h]
int v4; // [esp-30h] [ebp-ECh]
int v5; // [esp-2Ch] [ebp-E8h]
int v6; // [esp-28h] [ebp-E4h]
int v7; // [esp-24h] [ebp-E0h]
int v8; // [esp-20h] [ebp-DCh]
signed int v9; // [esp-1Ch] [ebp-D8h]
char v10; // [esp-18h] [ebp-D4h]
int v11; // [esp-14h] [ebp-D0h]
int v12; // [esp-10h] [ebp-CCh]
int v13; // [esp-Ch] [ebp-C8h]
int v14; // [esp-8h] [ebp-C4h]
int v15; // [esp-4h] [ebp-C0h]
char v16; // [esp+0h] [ebp-BCh]
char v17; // [esp+18h] [ebp-A4h]
cha