2018中原工CTF校赛

2018中原工CTF校赛 re2

第二题的re很容易看懂,但是写起来。。。
一开始没有写出来鸭
当然经过acm室友和大佬的指点
我成功get了新技巧
分组爆破2333333
在这里插入图片描述
先将程序拖入ida,很明显的就是爆破
和susctf那道用c#写的题很像啊
但是爆破一开始爆不出,所以只能一个一个爆了
逐个确定最高位
上代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <string.h>
int main()
{
    char byte_408040[32]={0};
    unsigned char byte[32]={0xA4, 0x19, 0x04, 0x82, 0x7E, 0x85, 0x50, 0xA8, 0xD1, 0xEA,
  0xE3, 0xF9, 0xE8, 0xE1, 0x60, 0x3A, 0x1A, 0x0A, 0x87, 0xDD,
  0xE1, 0x61, 0xA0, 0xC0, 0x60, 0xA4, 0x48, 0x28, 0x16, 0x0B,
  0x05, 0x20};
    unsigned int input,la;
    char v5=0;
    unsigned int8_t ,v4;
    int i;
    for(la=0;la<0xff;la++)
    {
        input = la;
        input = input << 28;//左移的位数要看确定了多少位
        input |= 0xa0ab3e2;//确保低位不变,求高位
        v5 = 0;
        for ( i = 0; i <= 31; ++i )//这边i <= 31,一开始可以写成i <= 5,然后逐步变多
  {
    v4 = v5 ^ (input&0xff) ^ byte[i];
    byte_408040[i] = v4;
    if ( (byte_408040[i]<'A'||byte_408040[i]>'Z')&&byte_408040[i]!='}'&&byte_408040[i]!='{'&&byte_408040[i]!='_' )
    {
      break;
    }
    v5 ^= byte[i];
    input >>= 1;
  }
  if(i == 32)                             //后面的位数,由上面循环中i <= 多少而定
  //if(!strncmp("FLAG{",byte_408040,5))    //确定前五位时用这个
    {
        for(i=0;i<32;i++)
            printf("%c",byte_408040[i]);
            printf("\n%x",la);             //打出16进制确定爆破出的高位
            printf("\n");
    }
    }
    return 0;
}

flag跑完就有了,当然也能调试。
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值