(十五)、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了

浙公网安备 33010602011771号