SUSCTF re方向部分wp

SUSCTF re方向部分wp

1.Helloworld

拖进ida
SUSCTF re方向部分wp_第1张图片
方法很简单鸭直接上代码了,需要稍加注意小端序。

#include 
#include 
#include 
#include 
int main()
{
    int a[28]={0xF1, 0xE8, 0x81, 0xC8,0xD2, 0x81, 0xCF, 0xCE
    ,0xD5, 0x81, 0xC0, 0x81, 0xD3, 0xC0, 0xD5, 0xC8,
    0xCE, 0xCF, 0xC0, 0xCD,0x81, 0xCF, 0xD4, 0xCC,
    0xC3, 0xC4, 0xD3, 0x8F};
    int i;
    printf("FLAG{");
    for(i=0;i<28;i++)
    {
        a[i]^=0x12B9B0A1;
        printf("%c",a[i]);
    }
    printf("}");
    return 0;
}

simple-rev

SUSCTF re方向部分wp_第2张图片
这个。。。凯撒密码,可以写逆运算,当然直接百度在线解密一下也行
CTF在线工具
SUSCTF re方向部分wp_第3张图片

pyyy

反编译后用ue打开

代码很复杂。。。再加上我py不咋地,看着有点懵逼,但仔细看看,只要吧验证的那段全都删掉就可以了
SUSCTF re方向部分wp_第4张图片
然后百度在线py,跑一下就行了。
SUSCTF re方向部分wp_第5张图片

accumulator

SUSCTF re方向部分wp_第6张图片
拖进ida
首先可以看出v3就是flag的长度
中间有SHA512加密(不懂但是可以继续往下看)
发现其实关键代码在4008C0那
点进去
SUSCTF re方向部分wp_第7张图片
通过调试其实可以发现6013C0和6013B0都是从0开始
那么逻辑就很明显了,再结合一下题目标题的提示。
其实601080里各项放的就是flag与前面各项的和
减一下就能出flag了
上代码

#include 
#include 
#include 
#include 
int main()
{
    int a[]={
  195,
  255,
  493,
  584,
  799,
  929,
  946,
  1086,
  1180,
  1184,
  1421,
  1595,
  1805,
  1846,
  2081,
  2320,
  2430,
  2605,
  2727,
  2972,
  3213,
  3403,
  3418,
  3649,
  3712,
  3950,
  3989,
  4193,
  4228,
  4394,
  4523,
  4624,
  4706,
  4935,
  4999,
  5072,
  5106,
  5291,
  5510,
  5536,
  5644,
  5751,
  5993,
  6118,
  6126,
  6198,
  6211,
  6410,
  6469,
  6609,
  6647,
  6752,
  6978,
  7010,
  7053,
  7106,
  7274,
  7468,
  7563,
  7673,
  7706,
  7956,
  8146,
  8187,
  8257,
  8333,
  8398,
  8469,
  8592,
  8640,
  8693,
  8742,
  8793,
  8844,
  8901,
  8953,
  9007,
  9062,
  9113,
  9161,
  9215,
  9317,
  9374,
  9429,
  9483,
  9540,
  9591,
  9644,
  9692,
  9741,
  9792,
  9846,
  9944,
  9996,
  10045,
  10144,
  10195,
  10246,
  10294,
  10350,
  10402,
  10450,
  10551,
  10652,
  10750,
  10849,
  10946,
  11045,
  11096,
  11147,
  11202,
  11304,
  11353,
  11451,
  11507,
  11605,
  11653,
  11753,
  11852,
  11900,
  11951,
  12052,
  12105,
  12161,
  12259,
  12360,
  12409,
  12461,
  12563,
  12664,
  12718,
  12775,
  12823,
  12921,
  12970,
  13020,
  13071,
  13173,
  13227,
  13276,
  13374,
  13422,
  13521,
  13569,
  13667,
  13718,
  13771,
  13873,
  13972,
  14029,
  14080,
  14179,
  14278,
  14377,
  14432,
  14482,
  14531,
  14579,
  14627,
  14679,
  14732,
  14789,
  14840,
  14894,
  14951,
  15052,
  15154,
  15210,
  15263,
  15314,
  15363,
  15460,
  15509,
  15610,
  15666,
  15763,
  15818,
  15916,
  15968,
  16018,
  16075,
  16132,
  16233,
  16288,
  16386,
  16443,
  16543,
  16600,
  16655,
  16703,
  16801,
  16858,
  16955,
  17005,
  17056,
  17153,
  17250,
  17375
};
int b=sizeof(a)/sizeof(int);
int i;
for(i=b-1;i>0;i--)
{
    a[i]-=a[i-1];
}
for(i=64;i

运行一下就能看到里面的flag

gccc

发现是C#
直接换工具反编译
SUSCTF re方向部分wp_第8张图片
emmmmmmm
爆破吧

#include 
#include 
#include 
#include 


int main()
{
unsigned char a[32]={0xa4, 0x19, 4, 130, 0x7e, 0x9e, 0x5b,
0xc7, 0xad, 0xfc,0xef, 0x8f, 150, 0xfb, 0x7e, 0x27,
0x68, 0x68, 0x92, 0xd0, 0xf9, 9, 0xdb, 0xd0, 0x65,
0xb6, 0x3e, 0x5c, 6, 0x1b, 5, 0x2e};
unsigned char b[32]={0};
unsigned int num,num3,index=0,i;
for(i=2147483648;;i++)
{
    num=i;
    num3=0;
    index=0;
    while(num!=0)
    {
        b[index]=a[index]^(num&0xFF)^num3;
        num3^=a[index];
        index++;
        num>>=1;
    }
    if(!strncmp("FLAG{DO YOU KNOW GRAY",b,21))
        {
            printf("%s\n",b);
        }
}
    return 0;
}

一开始用strncmp是比较FLAG{然后跑出来第一个结果就是FLAG{DO YOU KNOW加上一堆乱码,然后逐步比较定下前面21个数。
SUSCTF re方向部分wp_第9张图片
不出一会跑出答案。
下面五题明天再说写wp
//最后俩题mov 和a maze 已经超出我的。。。能力范围了。。。
//还是太菜了
//2333

你可能感兴趣的:(ctf)