diakla

导航

攻防世界 simple-check-100

因为不会动态调试所以完全是IDA静态做的
反编译一下,关键伪代码是这部分:

如果会动态的话绕过check_key()就行了,这里静态直接进入interesting_function():

v4是这一段:

然后flag_data是这一段:

这一句 v2 = *(_DWORD *)(4 * i + v4) ^ 0xDEADBEEF; 后面那个十六进制其实是v2的4*i到4*i+3位分别异或EF BE AD DE,然后剩下的就是每四位倒序输出就行了

#include<iostream>
#include<cstdio>
using namespace std;
const int N=105;
int n=28,c[40];
int f[N]={220,23,191,91,212,10,210,27,125,218,167,149,181,50,16,246,28,101,83,83,103,186,234,110,120,34,114,211};
int a[N]={84,-56,126,-29,100,-57,22,-102,-51,17,101,50,45,-29,-45,67,-110,-87,-99,-46,-26,109,44,-45,-74,-67,-2,106,19};
int main()
{
    for(int i=0;i<7;i++)
    {
        a[4*i+0]^=0xEF,a[4*i+1]^=0xBE,a[4*i+2]^=0xAD,a[4*i+3]^=0xDE;
        for(int j=3;j>=0;j--)
            printf("%c",(char)(a[4*i+j]^f[4*i+j]));
    }
    return 0;
}

posted on 2020-12-18 22:54  diakla  阅读(214)  评论(0)    收藏  举报