CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC

CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC

来源:https://buuoj.cn/

内容:无

附件:链接:https://pan.baidu.com/s/16pQIqjmG2nUhGGDt8Iw-TQ?pwd=g965 提取码:g965

答案:sctf{Ae3_C8c_I28_pKcs79ad4}

总体思路

简单反调试的patch

_except_handler的知识点

smc得到解密算法,得到题目的flag密文

使用ctrl+alt+f发现encode方法是aes加密

猜测得到key和iv,解密得到flag

详细步骤

  • 检查文件信息

  • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第1张图片

  • 经过检查发现可能存在检查debugger的,进入该方法,找到所有退出进程的地方,nop掉

    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第2张图片
  • 点击edit-patch program-apply patches to...应用上面的nop

    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第3张图片
    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第4张图片
    • 开始动调,发现有DebugBreak的时候点击Yes pass to app将异常给app自行处理。
    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第5张图片
    • 发现调用smc方法进行了自解密SMC入门学习
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ucs7dhU8-1649549533259)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410072437865.png)]
  • dword_404000按c将其转换成代码,再按p将其声明为函数,再按F5得到伪代码

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2MKXyiu-1649549533259)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410072821803.png)]
  • return处断点,让其运行完,发现全局变量的值发生了改变,变成了nKnbHsgqD3aNEB91jB3gEzAr+IklQwT1bSs3+bXpeuo=,按shift+e复制该变量

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BbWYNz3r-1649549533259)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410073031505.png)]
  • 继续动调,回到主程序,随便输入一些值例如1111111111111111

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VK5DF4bN-1649549533260)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410073201350.png)]
  • 发现调用f_encode方法后得到了v_encode_result,并且拿来和v_key进行比较

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iT7qyXE4-1649549533260)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410073543754.png)]
  • 重新开始动调,进入f_encode方法,发现v_input_address的值为0x7d2660,按下g跳转过去发现这里是我们的输入值

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXGzYHzP-1649549533261)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410073838639.png)]
    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第6张图片
  • 按下ctrl+alt+f查看编码发现存在大量加密算法,同时在f_encode方法中发现了aes算法,标注出来

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opeAseH8-1649549533261)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410074455282.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUyqtMld-1649549533261)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410074504035.png)]
  • 在该方法中发现了一个字符串sycloversyclover,双击进去,发现上面还有个字符串,按下x跟进其出现位置

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-45jP0XEQ-1649549533262)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410074544885.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wx6NbINm-1649549533262)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410075915223.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CjoWGAo4-1649549533263)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410075942343.png)]
  • 猜测上面两个字符串分别是AES加密的密钥和偏移量,f_encode执行完以后发现值变成了ZJ+E8g0oeUq671t/NxUXWcI6ybXkZP3O6hbOC0s+xBU=

    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第7张图片
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4d55SqK0-1649549533263)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410075026808.png)]
  • 使用cyberchef测试

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jilq4jj0-1649549533264)(https://raw.githubusercontent.com/serfend/res.image.reference/main/image-20220410075310928.png)]
  • 解密题目的密文,得到flagsctf{Ae3_C8c_I28_pKcs79ad4}

    • CTF逆向-[SCTF2019]creakme-WP-基于AES加密算法下的保护:反调试及except_handler和SMC_第8张图片

参考文档

  • SMC入门学习
  • 中国某省队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,需要跳过去
    • 大小端序

你可能感兴趣的:(CTF-逆向,安全)