杀软报警的基本原理

      你如果在程序里写了恶意代码,杀软就会报警,然而杀软为啥会报警了,这就要涉及到HOOK技术,或者叫做钩子技术,钩子技术用的很广不仅杀软用它勾住一些API函数,像那个RegSetValueEx函数,还有WriteProcesMemory函数,一旦有程序调用这些函数就会立刻报警,病毒也会有针对性的对键盘输入挂钩,从而记录键盘输入,达到盗号,盗密码的目的。然而钩子是怎么实现的呢,这些介绍一种比较简单的Inline Hook,需要一定的汇编基础。
Inline HOOK:
    API函数都会保存在系统提供的一些DLL里面,当你的程序要用到这些函数时,编辑器就是隐式加载这些DLL,这样你就可以像调用自己的函数一样调用API了。当你用到CreateFIle函数时,程序会自动加载kernel32.dll模块中的CreateFile,你可以在VC最下面的窗口里看看,它编译的过程中调取了哪些dll,有没有这个,就大致明白了哪些API在哪些dll里面了,多看多想就会懂得越多。
    CreateFile是API函数,但是API函数也是人写的,也可以改再编译而成,在VC里按F10调试程序,然后在查看里,选择调试窗口选择Disasembly这个窗口(或者直接按ALT 8就可以打开这个窗口了),你就可以看到这些函数的反汇编代码了,可以看看这些函数是怎么写的,一步步调试,看看它在机器中实现的过程。主要用到jmp指令,通过jmp指令来实现。
    这是在OD里提取的某个程序的函数一端反汇编码,以便说明HOOK的形成过程。:
00401860    55             PUSH EBP
00401861    8BEC           MOV EBP,ESP
00401863    6A FF          PUSH -1
00401865    68 00254000    PUSH 0.00402500
    如果我将这里的这几行代码改成 jmp 12345678 后,12345678为一个地址,该地址保存你的代码,可以看到程序变成了这样,从地址00401860到0040185这5字节被一个命令占用
00401860  E9 133EF411    JMP 12345678
00401865  68 00254000    PUSH 0.00402500
    可以看到这里对应的16进制码为 E9 13 3E F4 11 ,这里/xE9为jmp指令的机器码,后面的13 3E F4 11应该为11 F4 3E 13这是因为内存中是高位存储高字节,低位存储低字节.这个11 F4 3E 13对应的偏移量,偏移量计算公式为: 11 F4 3E 13 = 12 34 56 78  - 00 40 18 60 -5 。5 就是jmp 12345678这个命令所占用的字节数,所以jmp计算公式为:
JMP后的偏移量=目标地址-原地址-5
    这是个很重要的公式,最好要记得,还有最好记得jmp的机器语言对应的十六进制的E9,方便我们直接改内存或文件添加HOOK,只需要要将文件以二进制形式打开,然后修改某处地址的数字 把它改成E9 然后在后面加个地址占四个字节,即一个DWORD数据。然后当你运行你的程序时,运行到这个位置,就会跳转到这个地址位置来执行,这个位置当然存储着你想HOOK的指令,比如杀软在这个地址的位置存储的就是弹出警告对话框的代码,安装了杀软,它们就会在你的电脑里的那些关键API的dll里的某些位置写入很多这样的JMP指令,当这些函数被调用,这些JMP使得杀软写好的代码被执行。这就构成了一个Inline HOOK ,从而保证某些可能危害系统函数在执行过程中始终被监控。
    很细的讲了JMP这个指令,下面来看看Inline HOOk的流程吧,流程如下:
(1)构造跳转指令。如杀软对应的跳转指令就是发出警告,如果警告被采纳就阻止程序继续运行,
(2)在内存中找到欲HOOK函数的地址,并保存欲HOOK位置处的前5个字节。
(3)将构造的跳转指令写入需HOOK的位置处。
(4)当被HOOK位置被执行时就会跳转到我们的流程来来执行
(5)如果要执行原来的流程,那么取消HOOK,也就是还原被修改的字节。
(6)执行原来的流程
(7)继续HOOK住原来的位置
    这就是Inline HOOK的大概流程,也就是为什么当你用某些功能时,杀软会检测到并发出警报的原理,最基本的就是JMP指令的运用.当然要破它也很容易。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值