SUSCTF re方向部分wp

1.Helloworld

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
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
这个。。。凯撒密码,可以写逆运算,当然直接百度在线解密一下也行
CTF在线工具
SUSCTF re方向部分wp

pyyy

反编译后用ue打开
SUSCTF re方向部分wp
代码很复杂。。。再加上我py不咋地,看着有点懵逼,但仔细看看,只要吧验证的那段全都删掉就可以了
SUSCTF re方向部分wp
然后百度在线py,跑一下就行了。
SUSCTF re方向部分wp

accumulator

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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
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<b;i++)
{
    printf("%c",a[i]);
}
    return 0;
}

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

gccc

发现是C#
直接换工具反编译
SUSCTF re方向部分wp
emmmmmmm
**吧

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>


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
不出一会跑出答案。
下面五题明天再说写wp
//最后俩题mov 和a maze 已经超出我的。。。能力范围了。。。
//还是太菜了
//2333

相关文章:

  • 2021-07-13
  • 2021-12-04
  • 2021-08-16
  • 2021-11-19
  • 2021-12-25
  • 2021-09-30
  • 2021-04-21
猜你喜欢
  • 2021-11-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-12
相关资源
相似解决方案