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

五、参考文献

[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

你可能感兴趣的:(1024程序员节,软件逆向,CTF)