首页 > 代码库 > 应用层反外挂技术研究

应用层反外挂技术研究

标 题: 应用层反外挂技术研究
作 者: choday
时 间: 2013-06-19,17:02:32
链 接: http://bbs.pediy.com/showthread.php?t=173897

此技术不算原创,但算是整理,详解 

话说神秘人物v校,73%可能性为女性。此技术是从他那里学来的。
此人说话言简意赅,需要耐心体会。

外挂,与反外挂,是矛与盾的关系,要想做好反外挂,必须了解矛的构成,以及盾的技术,才能制造出一个较好的盾。

纵观当前反外挂形势,就像是世界大战,各种驱动满天横飞。战火连天,一发生战争,最受伤的是老百姓,一但用到驱动去反外挂,最受伤的是用户
bs驱动反外挂技术,我很欣赏应用层反外挂技术,稳定,优雅,不会伤及无辜。

下面讲讲应用层反外挂技术。

某日,突然想起应用层反外挂技术,自己不得其解,跑去问v校,
问:"应用层反外挂,有什么好点子没有,因为今天 x64大行其道 ,弄驱动,已不合时宜了?"
答:"Dllmain DLL_THREAD_ATTACH"
问:"怎么讲"
答:"阻止远程线程,不开线程,他能干什么?"
问:"如果是SetWIndowsHooks呢"
答:"WH_DEBUG"
问:"怎么讲"
答:"干掉其它进程来的HOOK"
...


这样的回答,十分精辟,我只能叫他v佛,下面,我们仔细口味

技术1: 干掉远程线程,防止利用远程线程注入

只有想不到,没有做不到,这么简单的东西,被我们经常忽略掉了,
我从来没有想到Dllmain这个东西,还能用来反外挂,下面讲讲DLLMain用在反外挂有什么用处

DLLMain是一个回调,如果有新线程创建时,会收到一个DLL_THREAD_ATTACH,
这个时候 ,判断线程入口 点是不是为LoadLibraryA(W),如果 是的话,可以肯定是远程线程正在干注入这事,所以Kill之。至于 如何取得线程入口点QueryThreadInformation,自己百度去。


技术2: 干掉hook,防止SetWindowsHookEx注入

自己先给进程加上一个名叫WH_DEBUG的钩子,
这个钩子能干什么呢。他能监控其它钩子,如果发现,其它进程正在给本进程安装钩子,直接返回FALSE了事,自己的进程在给自己安装钩子,返回TRUE,并且CallNextHookEx
怎么知道是谁在给自己安装钩子呢。

我们看这个回调的第三个参数
LRESULT CALLBACK DebugProc(          int nCode,
    WPARAM wParam,
    LPARAM lParam
);

第三个参数传递以下结构体
typedef struct {
    DWORD idThread;
    DWORD idThreadInstaller;
    LPARAM lParam;
    WPARAM wParam;
    int code;
} DEBUGHOOKINFO, *PDEBUGHOOKINFO;

在这个结构体中,包含了Installer的Theadid,跟据ThreadID可以找到相应的进程,发现了干坏事的进程,想怎么处置,自己看着办吧



矛与盾的关系,不是绝对的,上面两项技术,不能阻止所有外挂程序,但可以阻止大部分外挂,
就第一项,还可以用来干其它的,因为上面两项不能防止所有注入操作,但是他可以监控线程创建,如果一个外挂,不创建线程,能干哪些事,当然,这不是绝对 的,给我一次执行机会,我就能干许多事。


上面只是浅显的技术研究,第一项技术可干许多 的事,自己研究吧 

应用层反外挂技术研究