对于“ESP定律脱壳实验“中的脱壳程序结果,换种分析方法
x32dbg分析
加断点
打开脱壳程序,在“符号”标签页选择DiskProbe_dump_SCY.exe模块,搜索GetSystemTime
右键,选择切换断点

在断点中查看是否标记

分析断点代码
F9执行到断点,但是我们要的是调用这个函数的位置,不是这个函数的内部位置,有两个方法
- 执行到这里时,栈顶就是这个函数调用完之后的下一条指令地址
(右击栈顶地址,选择在反汇编中转到指定DWORD) - 调试器中断的地址是函数的开头代码,但是这个函数是外部定义的系统函数,属于系统空间地址。可以利用调试器的运行到用户代码功能,alt+F9快速执行这个函数,跳到用户代码位置,即这个函数调用完的位置


在汇编代码中,常见的比较会使用cmp指令进行比较操作,然后使用跳转指令进行分支操作,常见的条件跳转指令有jg, jle, jb, je, jz, ...
分析代码段,发现退出程序

所以跳转发生在GetSystemTime和这条指令之间,借用蓝色虚线进行分析,认为这条指令是关键跳转
cmp esi,eax
jg diskprobe_dump_scy.435463
我们可以对其进行取反,即将jg改为jle
选中指令,单击空格,修改指令即可
F9测试发现成功了
补丁
使用补丁进行修改,然后打开测试

ida pro静态分析
查找GetSystemTime函数调用代码
在import模块中搜索即可

我们复制这个地址,在IDA View-A搜索(快捷键g)

单击这个函数,使用快捷键x打开交差引用列表,单击OK跳转到函数调用的地址

代码分析
我们可以看到两个鲜明的红色箭头,然后有一处消息框函数

offset就是消息框显示的消息,我们先双击这条消息,进入数据页面,然后按快捷键a,自动进行字符串解析,然后按esc退出,显示出字符串结果

我们分析上面的代码,不难得出要修改的是第一个跳转

选中之后使用Edit -> Patch Program -> Assemble…进行修改即可
补丁
菜单命令 Edit -> Patch Program -> Apply patches to input file… ,打开补丁对话框,单击确定

可以重命名

测试成功