BUUCTF Reverse/[QCTF2018]Xman-babymips

32位程序,代码很简单

一个移位和按位与操作,直接爆破就行

int __fastcall sub_4007F0(const char *a1)
{
  char v1; // $v1
  size_t i; // [sp+18h] [+18h]

  for ( i = 5; i < strlen(a1); ++i )
  {
    if ( (i & 1) != 0 )
      v1 = (a1[i] >> 2) | (a1[i] << 6);
    else
      v1 = (4 * a1[i]) | (a1[i] >> 6);
    a1[i] = v1;
  }
  if ( !strncmp(a1 + 5, (const char *)off_410D04, 27u) )
    return puts("Right!");
  else
    return puts("Wrong!");
}

脚本

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

int main()
{
   char s[]= { 0,0,0,0,0, 0x52, 0xFD, 0x16, 0xA4, 0x89, 0xBD, 0x92, 0x80, 0x13, 0x41,
  0x54, 0xA0, 0x8D, 0x45, 0x18, 0x81, 0xDE, 0xFC, 0x95, 0xF0,
  0x16, 0x79, 0x1A, 0x15, 0x5B, 0x75, 0x1F};
  char flag[33] = {'Q','|','j','{','g'};
  int i,j;
  for(i = 5 ; i < 32 ; i++)
  {

      for (j = 0 ; j < 256 ;  j++)
      {
          char v1 = 0;
          if( (i & 1) != 0)
            v1 = (j >> 2)  | (j << 6);
          else
            v1 = (4 * j) | (j >> 6);
          if(v1 == s[i])
          {
              flag[i] = j;
              break;
          }


      }
  }
  for(i = 0 ; i < 32; i++)
  {

      printf("%c",flag[i] ^ (32 - i));
  }
  return 0;

}

flag: flag{ReA11y_4_B@89_mlp5_4_XmAn_}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ofo300

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值