恋爱的犀牛 发表于 2013-3-26 09:46:24

关于hook api偷代码 的防御方法

最近发现偷代码这话题很热闹..也来凑热闹一下。


方法很多。
理论上来说,用API自己防御好,比用 汇编写内存字节集来的安全。


1.从获取api函数头入手。
=================
大部分HOOK API,要得到API函数头位置吧?

模块句柄=GetModuleHandleA("kernel32.dll")
函数地址 = GetProcAddress (模块句柄, “WriteProcessMemory”)

可以自己改造GetProcAddress,做一个过滤。这样大部分小菜偷代码根本得不到 WriteProcessMemory位置。


2.给函数做自校验,或者直接把整个kernel32.dll的内存做一个校验。
================
CreateToolhelp32Snapshot
Module32First
Module32Next
组合,得到kernel32.dll的
modBaseAddr//地址
modBaseSize//大小
一开始就就
读内存字节集(modBaseAddr,modBaseSize) 存个全局变量。

读写重要代码的时候,重新读一遍。比较是否一致。


3.直接保护kernel32.dll
PROCESS_VM_OPERATION 开进程,NtProtectVirtualMemory直接把kernel32.dll保护。
还有这个,VirtualProtectEx也可以。方法很多的。

================================
题外话.
除了HOOK API偷代码..最强大的应该是冷月的那个全局不可写入。然后等你写入出错。利用出错位置找你写的东西。
真心强大,虽然防御的方法有.制造了很多负担.
1.在取进程pid时,别被假的"目标程序"骗了,多做一些筛选条件。
2.写入前,用快照api判定下是否被保护。

以上处理完,对付菜鸟偷代码基本够用。对付大牛..r0hook也只是永无休止的攻防战了。

andy03 发表于 2013-3-26 14:30:28

不错,支持一个
页: [1]
查看完整版本: 关于hook api偷代码 的防御方法