将CM.exe拖入DIE,发现程序有vmp壳,并且是用C++编写的
下面进行脱壳,脱壳的关键是找到程序真正的入口OEP(Original Entry Point),然后才能dump下来,得到脱壳后的程序。拖入x32dbg,Ctrl+G搜索VirtualProtect,该函数由动态链接库kernel32.dll提供
可以看到最后一条指令跳转到了VirtualProtect函数的地址,F2下断点
按F9前进,找到vmp1区段的入口,也就是加壳后程序的入口EP(Entry Point)
不断F9直到无法继续跳转(Ollydbg里面堆栈窗口显示PAGE_READONLY,因为代码段是只读的)。地址为CM.00DBB000,就是这个地址的指令调用了VirtualProtect函数进行保护,说明OEP就在这之后不远
使用第二个方法:搜索C++程序特征码EB0B85F375078BC6C1E0100BF0,这是OEP第一个call尾部的指令,地址为00DD39F2
往上找,发现类似C++程序开头段,猜测OEP是00DD37F2。这里需要尝试所有可能的OEP,如果错误dunp下来还是没法反汇编
使用x32dbg的Scylla插件,在OEP处将脱壳后的程序dump下来,即可得到CM_dump.exe,但是无法运行,拖进IDA分析即可