CTF逆向-[CISCN2018]2ex-WP_mips-32架构以及base64换表

CTF逆向-[CISCN2018]2ex-WP_mips-32架构以及base64换表

来源:https://buuoj.cn/

内容:无

附件:https://pan.baidu.com/s/1coGRxCdGn95Ink8mDL9wcQ?pwd=o2f3 提取码:o2f3

答案:flag{change53233}

总体思路

mips-32架构,尝试简单逛逛先,实在不行再用其他工具。

发现了疑似base64的算法

通过换表算法解决

详细步骤

  • 检查文件信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XedTfSsb-1648200180609)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220325162706066.png)]

  • 是mips-32架构的,这种架构在ida7.5以后似乎分析的还行。也看到有使用jeb这种安卓逆向工具去逆伪代码的。此处我们还是使用ida。

对于MIPS架构的逆向,可以参考一下素材:安装专用工具retdec,jeb-mips

详细内容见博客

  • 通过start函数中的sub_4013D8(f_main, a5, (int *)va, init_proc)找到main方法入口

  • 发现内部有四个方法,逐一点开,直到看到第三个中存在一些静态数据的调用。

    • image-20220325165014071
    • 根据余3、余2和1这样的运算,以及=字符,猜测是base64
    • image-20220325165113118
    • 双击进入g_key,按下Shift+E获取其值。猜测是base64换表
  • image-20220325164902893

  • 尝试将输出的值恢复为换表前的base64,然后解码,得到答案

  • import base64
    # output = "│_r-+_Cl5;vgq_pdme7#7eC0=" 会报错
    output = "_r-+_Cl5;vgq_pdme7#7eC0="
    raw_table = "@,.1fgvw#`/2ehux$~\"3dity%_;4cjsz^+{5bkrA&=}6alqB*-[70mpC()]89no"
    
    
    def switch_base64_table(raw_table, output):
        base64_default_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
        if len(raw_table) < len(base64_default_table):
            raw_table = str.ljust(raw_table, len(base64_default_table), '?')
            print(f'length not enough,padding:\n{raw_table}')
        char_map = str.maketrans(raw_table, base64_default_table)
        trans = output.translate(char_map)
        result = base64.b64decode(trans)
        return result
    
    
    result = switch_base64_table(raw_table, output)
    print(result)
    # b'flag{change53233})'
    
    

参考文档

  • CSDN-MIPS逆向经验
  • 中国某省队CTF集训(逆向工程部分)(已授权)(一)
    • 基础加密方式例如 XXTEABase64换表
    • Python库 Z3 方程式、不定式等的 约束求解
    • 基础的假跳转花指令(脏字节)
    • 非自然程序流程
      • 扁平化程序控制流
      • OLLVM程序流程(虚拟机壳) 很难一般不考
      • ida里面按X键跟踪,寻找所有Tyw的引用(即类型是写入的),通常就是关键位置
  • 中国某省队CTF集训(逆向工程部分)(已授权)(二)
    • ollydb动调去壳,upx为例子
    • python的逆向和自定义虚拟指令
      • 使用pycdc 提取码:dorr 解密python编译的exe或者pyc
      • 逐条去解析用py字典手动实现的指令调用
      • C++编译的程序的逆向
  • 中国某省队CTF集训(逆向工程部分)(已授权)(三)
    • 简单模运算加密

    • base58 寻找一下特别大的数,这种数通常是算法的标识,或者ida7.7版本以上自带的find crypt插件ctrl+alt+f

    • 常见的关键位置是有新的内存分配的地方通常是关键地方,或者函数中间突然return的地方也是

    • 迷宫题 注意绘制出来就好

    • 动调题

      • 注意观察会执行的反调试分支,例如出现int 3,需要跳过去
    • 大小端序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值