基础的东西不想多讲,简单的提一句,具体请问度娘。
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中添加一些代码。
添加的代码:
注意Load() 函数时工具生成的。这个函数用来加载原始DLL。
HMODULE hLoad;char *v;
hLoad=LoadLibrary("zr.dll");if (hLoad==NULL)
{
MessageBoxA(NULL,"无法载入 zr.dll",NULL,MB_OK);gotoloading;
}
v=(char *)GetProcAddress(hModule,"TxEntry");if(!v)
{
MessageBoxA(NULL,"无法找到 TXEntry 函数",NULL,MB_OK);gotoloading;
}
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)v,0,0,NULL);
loading:return Load();
这段代码的目的是加载zr.dll然后调用TxEntry函数。
注入进去后就可以随心所欲的干一些不和谐的事情。 比如搜索内存/修改内存。
到了现在,就可以去易语言论坛找一些最新的 无限视距DLL 注入进去试试啦。
当按下确认按钮后 TP保护才开始加载。
相关工具已经打包。