(十五)、babymips

Babymips

攻防世界 第35题

 

 

一、获取文件,查壳

 

 

 

Mips架构

 

二、IDA静态分析

IDA7.0 无法解析mips架构的伪代码,IDA7.6版本可正常显示伪代码或使用Jeb工具也可以

1、字符串搜索

 

 

2、交叉引用

 

这里有一个比较语句

 

点开 fdata

 

 

Q|j{g

这是对输入的字符串处理后比较了前五个字节

 

3、sub_4007F0

点进 sub_4007F0 函数

 

 

 

对输入的字符串进行运算后与 off_410D04 数组比较

点开off_410D04:

 

再点

 

到这里解题思路就很明确了

三、写出解密脚本

 

#include <iostream>
#include <windows.h>

int main()
{     
      byte arr[] = {0x51, 0x7C, 0x6A, 0x7B, 0x67,
      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
      };
      
      for(int i = 5;i<32;i++)
      {
          if((i & 1) != 0)
          {
              arr[i] = (arr[i]>>6) | (arr[i]<<2);  //后两位与前六位换一下位置// 
          }
          else
          {
              arr[i] = (arr[i]>>2) | (arr[i]<<6);
          }
      }
      
      for(int i = 0;i<32;i++)
      {
          arr[i] ^= 32-i;
//          printf("%c\n",arr[i]);
      }
      std::cout<<arr;
      
}
 

 

四、拿到flag

 

qctf{ReA11y_4_B@89_mlp5_4_XmAn_}

五、总结

不会用python处理这个脚本,用python不会拿捏数据宽度

有的大佬直接手撸mips架构汇编,而我自己可能有点依赖于F5了

 

posted @ 2022-02-03 09:52  TLSN  阅读(76)  评论(0)    收藏  举报