病毒、木马、外挂等必须要有的 “安全工作”
因为你一个安全软件一旦被成功调试了,就等同于被调戏了,一切主要操作顺序都被人掌握了,只要开发出逆向的突破即可。
我们要研究他们这些安全软件如何反调试的
比如软件发现被OD打开,直接自爆。。。
开始
第一个程序
F8运行程序
找到了弹出反调试报错的call
F7
程序调用了 IsDebuggerPresent 函数
IsDebuggerPresent :是确定调用进程是否由用户模式的调试器调试。
修改跳转Z,将指令改为nop不让他跳转就OK了
第二个程序
程序在OD中运行,什么也没有
这次直接跳转到了错误的位置,我们nop跳转就OK了
第三个程序
遇到被调试,直接退出进程,我们也可以nop到跳转
第四个程序
运行 ,程序选择和你同归于尽,大家一起死
程序直接跳转到00000001 ,同样改跳转为nop
高级
探讨程序使怎么做到反调试的
F8这行指令直接就错误了,此call为win32API创建模式对话框
alt+F9也回不去用户领空了,
DialogBoxParanA的第二个参数为过程函数,就是我们自己编写要做的事
找到函数地址,下断点
call处再次报错,下图
进入call
研究反调试过程
1. CreateToolhelp32Snapshot:可以通过获取进程信息为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程建立一个快照。(所有进程拍照),返回句柄
2. Process32First:是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用process32First函数来获得第一个进程的句柄。
3. 将进程名称和我们打开的OD进行字符串对比
4. Process32Next:是一个进程获取函数,当我们利用函数CreateToolhelp32Snapshot()获得当前运行进程的快照后,我们可以利用Process32Next函数来获得下一个进程的句柄。
5. 循环比较进程名称
6. 如果有OD就跳转退出程序,自爆。