注入方式,劫持dll注入的实现

基础的东西不想多讲,简单的提一句,具体请问度娘。

Windows的PE加载器会从执行文件目录下寻找DLL,若是找不到再去其余地方找。

把咱们特定的DLL假装成系统DLL,而后放在执行文件目录下,就能实现DLL劫持。

劫持来干吗? 确定是要在被干程序体内有一席之地,而后想干什么就干什么。好比劫持ws2_32.dll能够实现抓包,改包,转向等。

如何伪造?
  
固然是伪造导出表啦,导出表是一个DLL最总要的部分。

LPK.dll。 网络

#pragma comment(linker, "/EXPORT:LpkInitialize=_gamehacker_LpkInitialize,@1")
#pragma comment(linker, "/EXPORT:LpkTabbedTextOut=_gamehacker_LpkTabbedTextOut,@2")
#pragma comment(linker, "/EXPORT:LpkDllInitialize=_gamehacker_LpkDllInitialize,@3")
#pragma comment(linker, "/EXPORT:LpkDrawTextEx=_gamehacker_LpkDrawTextEx,@4")
#pragma comment(linker, "/EXPORT:LpkExtTextOut=_gamehacker_LpkExtTextOut,@6")
#pragma comment(linker, "/EXPORT:LpkGetCharacterPlacement=
_gamehacker_LpkGetCharacterPlacement,@7")
#pragma comment(linker, "/EXPORT:LpkGetTextExtentExPoint=_gamehacker_LpkGetTextExtentExPoint,@8")
#pragma comment(linker, "/EXPORT:LpkPSMTextOut=_gamehacker_LpkPSMTextOut,@9")
#pragma comment(linker, "/EXPORT:LpkUseGDIWidthCache=_gamehacker_LpkUseGDIWidthCache,@10")
#pragma comment(linker, "/EXPORT:ftsWordBreak=_gamehacker_ftsWordBreak,@11")

 

复制代码



是的,纯手写伪造很麻烦,一下子还得写转发代码~~~。 若是某DLL的导出函数比较多,那真是一个累人的活儿。

在这里我介绍一款比较好用的自动生成工具:

aheadlib

功能:根据输入DLL的导出表生成劫持源码。

把生成的源码载入vc编译器是能够正常编译的。  

选项很简单,本身摸索,通常默认便可。

在生成的代码中,你能找到:

AheadLib_ + 原始DLL导出函数名 ()

这样的函数

好比:函数

ALCDECL AheadLib_gethostbyname(void)
{
                  
        GetAddress("gethostbyname");
        __asm JMP EAX;
}

 


你能够在这个函数中添加你本身的响应代码。 拦截就直接retn +参数长度。孩子,知道抓包工具该怎么写了吧?

下面介绍一个好玩的拦截例子。能够注入到大部分的企鹅网络游戏客户端。

在system32目录下有一个 rasadhlp.dll。

企鹅游戏在启动的时候会加载rasadhlp.dll,并且仍是在保护机制开启以前。

因此劫持rasadhlp.dll就能过保护轻松注入腾讯游戏。【今天的LOL至少还能注入 2015.7.12】

使用工具,生成一份rasadhlp.dll的劫持代码。

而后在DllMain中添加一些代码。

<ignore_js_op> 

添加的代码:

注意Load() 函数时工具生成的。这个函数用来加载原始DLL。

工具

HMODULE hLoad;
                char *v;
                hLoad=LoadLibrary("zr.dll");
                if (hLoad==NULL)
                {
                        MessageBoxA(NULL,"没法载入 zr.dll",NULL,MB_OK);
                        goto loading;
                }
                v=(char *)GetProcAddress(hModule,"TxEntry");
                if(!v)
                {
                                MessageBoxA(NULL,"没法找到 TXEntry 函数",NULL,MB_OK);
                                goto loading;
                }
                CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)v,0,0,NULL);
loading:
                return Load();

 



这段代码的目的是加载zr.dll而后调用TxEntry函数。

注入进去后就能够为所欲为的干一些不和谐的事情。 好比搜索内存/修改内存。

到了如今,就能够去易语言论坛找一些最新的 无限视距DLL 注入进去试试啦。

<ignore_js_op> 

当按下确认按钮后 TP保护才开始加载。

相关工具已经打包。spa

相关文章
相关标签/搜索