• 【软件逆向】带壳带反调试找flag教程(VMProject3.0+X64dbg+ScyllaHide)


    本教程是博主解答特定题目的一次特殊经历,但是解答问题的方法和思路是共通的,希望能帮到做逆向的朋友。

    一、答案

    jZiBUViF0WUYwISp4qjx5YwucMNGpb4g

    二、解题步骤

    1. 查壳。
    2. 尝试去壳。
    3. 反反调试。
    4. 动态调试,输入字符串。
    5. 找寄存器附近是否有具有flag特征的字符串。(特别是具有循环比较特征的汇编代码)
    6. 找到后重新运行crackme2.exe,验证字符串是否是flag,若是,结束;若不是,重复第5步。

    三、解题工具

    查壳工具:ExeInfoPE、Detect It Easy。
    脱壳工具:Scylla。
    调试工具:IDA Pro、X64dbg。
    反反调试插件:ScyllaHide。

    四、解题过程

    1. 使用Exeinfo PE查壳,显示“VMProtect v.3.0x - ver.3.0.0 - 3.5.0”表示有壳,类型为VMP3.0~3.5,但是同时显示“not packed”表示无壳,比较奇怪,用其他工具再验证一下。
      在这里插入图片描述
    2. 使用Detect It Easy再次查壳,查明确实有VMProtect加壳,版本在3.2.0~3.5.0之间。
      在这里插入图片描述
    3. 尝试使用Scylla去壳,点击dump保存crackme2.exe的dump文件。
      在这里插入图片描述
    4. 使用X64dbg动态调试,找到程序的真实OEP。加壳前后RSP寄存器的值应该保持一致,所以程序的入口处的RSP应该与运行到地址0x140340CD3处的RSP保持一致,为0x14FF28。
      在这里插入图片描述
    5. 对0x14FF28处地址下4字节的硬件写入断点。
      在这里插入图片描述
    6. 重新开始动态调试,每次RSP==0x14FF28时都使用IAT Autosearch,并且Get Imports,如果全部为绿色的对勾,则说明找到了入口,点击Fix Dump使用第3步保存的dump文件修复。
      在这里插入图片描述
    7. 由于有9个红叉,没能完全脱壳,程序不能正常运行,但是可以使用IDA Pro查看静态反汇编代码。可以看到代码中的花指令基本消失了。
      在这里插入图片描述
    8. 使用ScyllaHide反反调试,将以下文件放入“./Xdbg/ release/x64/plugins/”路径下。
      在这里插入图片描述
    9. 重启x64dbg后动态调试crackme2.exe,打开ScyllaHide Options把“kill反附加”和“禁止创建线程”勾上。
      在这里插入图片描述
    10. 动态运行到0x140349714处,程序会阻塞,等待控制台输入。
      在这里插入图片描述
    11. 输入任意字符串回车,立刻回x64dbg按F7继续调试。(按晚了程序会退出,暂时未找到原因)
      在这里插入图片描述
    12. 按F7调试执行到0x4A3813处,此时rbx地址为0x14FDE0。
      在这里插入图片描述
    13. 在内存窗口中查看rbx指向的数据,一串字符‘4’后面跟着的字符串具有flag特征。
      在这里插入图片描述
    14. 重新运行crackme2.exe,输入第13步中的字符串
      jZiBUViF0WUYwISp4qjx5YwucMNGpb4g
      在这里插入图片描述

    五、参考文献

    [1] ScyllaHide教程:https://blog.csdn.net/kinghzking/article/details/122070991
    [2] 反反调试理论教程:https://bbs.kanxue.com/thread-226455.htm
    [3] 反反调试实践教程:https://www.52pojie.cn/thread-1432590-1-1.html
    [4] Scylla脱壳实践教程:https://blog.iamli.cc/archives/20

  • 相关阅读:
    QT modbus rtu 拖动主界面时,modbus的槽函数无法响应
    开源项目在线化 中文繁简体转换/敏感词/拼音/分词/汉字相似度/markdown 目录
    Java安全--篇2-类的动态加载
    电池电动汽车 (BEV) 优化调度(Matlab代码实现)
    使用Python采集京东商品评论并保存至本地
    Opencv——图像模板匹配
    大语言模型训练数据常见的4种处理方法
    百战RHCE(第四十七战:运维工程师必会技-Ansible学习2-Ansible安装配置练习环境)
    发布适用于 .NET 7 的 .NET MAUI
    使用js获取选中的dom元素 并改变选中(有序dom)的状态
  • 原文地址:https://blog.csdn.net/zhangjiuding/article/details/134002827