一,这道题刚拿到的时候我是直接载入IDA 结果分析的一团糟
比赛结束之后 看了好多师傅wp 才知道mips架构的专用工具怎么用,比如retdec,jeb-mips
开始是打算用retdec的,结果在线版的https://retdec.com/decompilation/不能用了 感觉windows下不好装 有时间补坑
就选择了jeb-mips(试用版)
扯一点怎样下载 就是https://www.pnfsoftware.com/jeb/demomips这个链接 填写好个人信息 就会发下载地址到邮箱
二,如果想要在linux里面运行 就必须安装qemu了 我记得好像是直接 sudo apt-get install qemu 就好了
正常的话直接终端执行qemu-mips babyre
但是这个文件是32bit 小端序 那么就得用qemu-mips babyre 可是提示我文件损坏。。
三,既然运行不了 就直接载入jeb-mips算了
扫描二维码关注公众号,回复: 3663232 查看本文章可以看到关键字符串flag is 等等 双击任意一个进入
四,接着按大写X 查看交叉引用 可以看到都在main函数 双击任意一个
再按tab键反编译 可以看到sub_400780()就是关键 但是试用版是不支持反编译它的
根据师傅的博客 就是一个替换了base64编码表的加密函数
下面那个if判断可以抠出来要解密的eQ4y46+VufZzdFNFdx0zudsa+yY0+J2m
五,那就只好IDA载入 然后找到编码表就好(下边截图省略中间部分)
R9Ly6NoJvsIPnWhETYtHe4Sdl+MbGujaZpk102wKCr7/ODg5zXAFqQfxBicV3m8U
最后写个脚本 本来自己写了有 但是发现有师傅https://wangyx-max.github.io/MIPS%E5%90%88%E9%9B%86/有更简单的
import string
import base64
my_base64table = "R9Ly6NoJvsIPnWhETYtHe4Sdl+MbGujaZpk102wKCr7/0Dg5zXAFqQfxBicV3m8U"
std_base64table ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
s = "eQ4y46+VufZzdFNFdx0zudsa+yY0+J2m"
s = s.translate(string.maketrans(my_base64table,std_base64table))
print base64.b64decode(s)
#SUCTF{wh0_1s_{0ur_d4ldy}
参考链接:
https://wangyx-max.github.io/MIPS%E5%90%88%E9%9B%86/
https://github.com/Mem2019/Mem2019.github.io/tree/master/writeups/suctf2018#babyre