易语言编译完成dll文件怎么劫持
Ⅰ 易语言编译完成DLL文件,怎么劫持注入到游戏中
利用游戏或系统缺陷注入 如伪装成输入法、驱动权限强制加载、文件伪装替换等等。
Ⅱ 用易语言编辑好的DLL文件,怎么注入到游戏中
比较多人用的是输入法注入
Ⅲ 易语言如何调用DLL文件
---------------------------------------------------------在易语言的左边功能选项找---程序---dl命令--右键---插入新dll命令DLL命令名=你给他的名称(在窗口程序下可直接代码输入)DLL库文件名=你调用那个DLL命名DDL库中的对应名=在被调用的DLL的子程序 完了后直接在窗口下输入代码(DLL命令名)打包的时候将DLL放置包下(可减少错误率)
Ⅳ 易语言怎么调用DLL文件
不用改后缀名,改了之后就不能运行了,直接用“运行()”这个命令就可以了,dll和可执行文件是不同的,dll动态链接库有程序接口可供其他程序调用里面的子程序,调用的时候只需要在易语言的dll列表里填好相关信息,然后像调用其他子程序一样调用就行了,也可以用dll注入
Ⅳ DLL文件劫持应该怎么办 急啊
DLL当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。
由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统桐知DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系祥简统DLL同名函数里执行,如图18.4。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。
184.gif
利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll, ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll,游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll,这些DLL都可被劫持。
利用5.6.2章提供的CrackMeNet.exe来演示一下如何利用劫持技术制作补丁,目标文件用Themida v1.9.2.0加壳保护。
1.补丁地址
去除这个CrackMe网络验证方法参考第5章,将相关补丁代码存放到函数PatchProcess( )里。例如将401496h改成:
代码:00401496 EB 29 jmp short 004014C1
补丁编程实现就是:
代码:
unsigned char p401496[2] = {0xEB, 0x29};
WriteProcessMemory(hProcess,(LPVOID)0x401496, p401496, 2, NULL);
p401496这个数组的数据格式,可以用OllyDBG插件获得,或十六进制工具转换。例如Hex Workshop打开文件,执行菜单Edit/Copy As/Source即可得到相应的代码格式。
2.构建输出函数
查看实例CrackMeNet.exe输入表,会发现名称为ws2_32.dll的DLL,因此构造一个同名的DLL来完成补丁任务。伪造的ws2_32.dll有着真实ws2_32.dll一样的输出函数,完整源码见光盘。实现时,可以利用DLL模块中的函数转发器来实现这个目标,其会将对一个函数的调用转至另一个DLL中的另一个函数。可以这样使用一个pragma指令:
代码:#pragma comment(linker, "/EXPORT:SomeFunc=DllWork.someOtherFunc")
这个pragma告诉链接程序,被编译的DLL应该输出一个名叫SomeFunc的函数。但是SomeFunc函数的实现实际上位于另一个名叫SomeOtherFunc的函数中,该函数包含在称为DllWork. dll的模块中。
如要达到劫持DLL的目的,生局宴消成的DLl输出函数必须与目标DLL输出函数名一样,本例可以这样构造pragma指令:
代码:#pragma comment(linker, "/EXPORT:WSAStartup=_MemCode_WSAStartup,@115")
编译后的DLL,会有与ws2_32.dll同名的一个输出函数WSAStartup,实际操作时,必须为想要转发的每个函数创建一个单独的pragma代码行,读者可以写一个工具或用其他办法,将ws2_32.dll输出函数转换成相应的pragma指令。
当应用程序调用伪装ws2_32.dll的输出函数时,必须将其转到系统ws2_32.dl中去,这部分的代码自己实现。例如WSAStartup输出函数如下构造:
代码:
ALCDECL MemCode_WSAStartup(void)
{
GetAddress("WSAStartup");
__asm JMP EAX;//转到系统ws2_32.dll的WSAStartup输出函数
}
其中GetAddress()函数的代码如下:
代码:
// MemCode 命名空间
namespace MemCode
{
HMODULE m_hMole = NULL; //原始模块句柄
DWORD m_dwReturn[500] = {0}; //原始函数返回地址
// 加载原始模块
inline BOOL WINAPI Load()
{
TCHAR tzPath[MAX_PATH]={0};
TCHAR tzTemp[MAX_PATH]={0};
GetSystemDirectory(tzPath, sizeof(tzPath));
strcat(tzPath,"\\ws2_32.dll");
m_hMole = LoadLibrary(tzPath);//加载系统系统目录下ws2_32.dll
if (m_hMole == NULL)
{
wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);
MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);
}
return (m_hMole != NULL);
}
// 释放原始模块
inline VOID WINAPI Free()
{
if (m_hMole)
FreeLibrary(m_hMole);
}
// 获取原始函数地址
FARPROC WINAPI GetAddress(PCSTR pszProcName)
{
FARPROC fpAddress;
TCHAR szProcName[16]={0};
TCHAR tzTemp[MAX_PATH]={0};
if (m_hMole == NULL)
{
if (Load() == FALSE)
ExitProcess(-1);
}
fpAddress = GetProcAddress(m_hMole, pszProcName);
if (fpAddress == NULL)
{
if (HIWORD(pszProcName) == 0)
{
wsprintf(szProcName, "%d", pszProcName);
pszProcName = szProcName;
}
wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);
MessageBox(NULL, tzTemp, TEXT("MemCode"), MB_ICONSTOP);
ExitProcess(-2);
}
return fpAddress;
}
}
using namespace MemCode;
编译后,用LordPE查看伪造的ws2_32.dll输出函数,和真实ws2_32.dll完全一样,如图18.5所示。
185.gif
查看伪造的ws2_32.dll中任意一个输出函数,例如WSACleanup:
代码:
.text:10001CC0 ; int __stdcall WSACleanup()
.text:10001CC0 WSACleanup proc near
.text:10001CC0 push offset aWsacleanup ;"WSACleanup"
.text:10001CC5 call sub_10001000 ;GetAddress(WSACleanup)
.text:10001CCA jmp eax
.text:10001CCA WSACleanup endp
会发现输出函数WSACleanup()首先调用GetAddress(WSACleanup),获得真实ws2_32.dll中WSACleanup的地址,然后跳过去执行,也就是说ws2_32.dll各输出函数被HOOK了。
3.劫持输出函数
ws2_32.dll有许多输出函数,经分析,程序发包或接包时,WSAStartup输出函数调用的比较早,因此在这个输出函数放上补丁的代码。代码如下:
代码:
ALCDECL MemCode_WSAStartup(void)
{
hijack();
GetAddress("WSAStartup");
__asm JMP EAX;
}
hijack()函数主要是判断是不是目标程序,如是就调用PatchProcess()进行补丁。
void hijack()
{
if (isTarget(GetCurrentProcess())) //判断主程序是不是目标程序,是则补丁之
{
PatchProcess(GetCurrentProcess());
}
}
伪造的ws2_32.dll制作好后,放到程序当前目录下,这样当原程序调用WSASTartup函数时就调用了伪造的ws2_32.dll的WSASTartup函数,此时hijack()函数负责核对目标程序校验,并将相关数据补丁好,处理完毕后,转到系统目录下的ws2_32.dll执行。
这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用,当挂接函数被执行时,相关的代码己被解压,可以直接补丁了。有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。
一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,应引起注意。
Ⅵ 怎么劫持别人电脑里的DLL文件
电影中的2012离我们还有多远,没有人知道,但中国4亿网民电脑的2012却已经到来了。因为普遍存在于常用软件的DLL劫持漏洞曝光,直接威胁所有网民的电脑,该漏洞被黑客亲切地称为“世界末日漏洞”!
常用软件无一幸免
你上网吗?你下载文件吗?你看电影吗?你用Office吗?你听音乐吗?也许你感觉这些问题比较小白,所有电脑用户,都要玩这些,没有例外。可你知道吗,当你用软件做这些操作时,威胁正一步一步冲你逼来——盗号病毒虎视眈眈地盯着你的电脑,试图远程入侵,企图盗取你的网银、网游等账号和密码。
现在,你心中很疑惑,为什么做这些操作会引来盗号病毒?因为DLL劫持漏洞,因为你使用的常用软件中就有该漏洞!例如浏览器有火狐(图1)、Opera等,下载软件有迅雷、风行、uTorrent等,播放软件有暴风影音、QQ音乐播放器、酷狗音乐、Winamp等,图片处理软件AutoCAD、Photoshop等,办公软件Office,QQ游戏……
图1
可以毫不夸张地说,中国4亿网民,无人逃得过DLL劫持漏洞的威胁,这也是为什么该漏洞被称为世界末日漏洞的原因。糟糕的是,该漏洞的利用代码已经被公开了,利用该漏洞的病毒正在蔓延。更可怕的是,如果病毒进行了免杀,安全软件将无力应对,就连启发式扫描也很难作为!
一个允许冒名顶替的漏洞
导致DLL劫持漏洞产生的原因一点不复杂,就是部分程序在加载DLL文件时,只给出了文件派亮名,而没有给出完整路径,系统不得不按照默认搜索顺序找出DLL文件(图2)。黑客就想,如果制造一个与程序同名的DLL文件,采取技术手段确保它先于正常DLL文件被加载,不就可以激活病毒了吗?
图2
打一个比喻:如果一封信件上指明了收信人的房门号,邮递员就会直接投递过去;反之邮递员就会挨家挨户敲门去询问,如果有不怀好意的人知道了邮递员敲门的顺序和收信人的姓名,就可以假冒收信人抢先一步接触邮递员并得到信件,再伪造信件命令程序运行病毒。
看到这里,有的读者朋友可能会问:不对呀,这个原理很早就被人发现了,此前还有利用该原理的病毒呢!这不是在忽悠我们吗?不错,很早以前就有人发现了该漏洞的原理,微软还曾经给出了警告,不过一直被忽视了。
忽视的理由很简单,此前该漏洞的利用只能在本地,所以要触发漏洞,得先搞一个DLL文件到电脑里,过程野蛮容易引起杀毒软件的警觉,导致病毒激活的成功率不高,中羡备当真是食之无味弃之可惜。
不过,现在发现了远程利用该漏洞的方法,不用想办法把DLL文件塞进用户的电脑,只要诱使用户访问特定的东东,就可以激活漏洞,这样一来该漏洞的价值体现出来——具备了大规模传播病毒的能力,这才引起安全厂商和微软的高度关注,才会推出应对方法。
用补丁封住漏洞
如此恐怖的漏洞,如何才能堵上?等软件公司推出更新补丁?这么多常用软件,太麻烦了,最好的方法是安装微软紧急推出的安全补丁。登录http://support.microsoft.com/kb/2264107,拖动鼠标到网页的中间,可以看到提供补丁下载的链接,根据自己Windows系统版本下载相应的补丁并安装。
接着,登录http://go.microsoft.com/?linkid=9742148,下载第二个补丁,安装后,远程利用DLL漏洞的途径就被掐断了,但还别松气,漏洞还可以在本地被利用。那又该如何防范呢?
防范的方法是修改注册表。点击“运行→regedit”,定位到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\,右侧有一个名为CWDIllegalInDllSearch的子键,双击该子键,修改它的值,填入ffffffff,选择“十六进制”(图3),点击“确定”即可,最后重启电脑就彻底堵上该漏洞了(堵漏洞的原理是:修改DLL的查找顺序)。
图3
治本还要靠规范软件编程
根据漏洞激活的原理,我们可以知道导致漏洞出现的根本原因是软件编程的不规范,不关系统的事,这也是当初漏洞才爆发时,为什么微软不愿意推出安全补丁——至少表面原因是这样。
那真正的原因是什么呢?现在的补丁表面看堵上漏洞了,其实还留下了隐患,如果黑客研究透了补丁的原理,就可能再出现破解之法,例如还原注册卖毁表、破解调整后的搜索顺序等,说白了微软的补丁只能治标,不能治本。
要治本微软必须修改当前DLL的运行机制,可该机制已经非常成熟了,且如果改动工作量惊人,所以微软初期不愿意推出补丁,但责任所在不得已推出了治标的补丁。从技术来看,要治本最简单的方法是规范软件编程,我们预计不久之后,大量被漏洞威胁的软件会推出相应的补丁,大家注意及时更新,避免被利用该漏洞的病毒攻击。
Ⅶ 易语言DLL如何防止他人调用有哪些源码参考
可以主程序窗口里拖一个“服务器”进去,DLL里加客户端,客户端连接服务端,在时限里客户端连接到服务器通过验证才能使用。
也可以使用进程通讯。还可以写一串验证码到某个文件里或者注册表里,这串验证码根据时间动态生成,DLL来检验这串字符是否正确。
推荐“淡淡网络程序拓展模块 9.39”,这个模块比外挂作坊1.5强大不知道多少,外挂作坊1.5好像是2006年出的,好多功能都不行,在WIN7下用不了。启亮告
Ⅷ 易语言 怎么调用已经编译好的DLL
在程序界面里选择Dll命令
记得选我啊
Ⅸ 【易语言】【OD】关于写dll劫持(也可叫做静态补丁)的方法
改文件我渣空余觉得不如dll注入来的优雅。
VirtualAllocEx申请内存,
WriteProcessMemory将你的装载dll的shellcode写过去,
CreateRemoteThread创建线程,指向你如滚的shellcode。
简单愉快,完全不需要改OEP,更不用搜索00。
如果你那么固执要用你的静态补丁方法,
其实我觉得你也不需要用什么易语言了,直接把你用OD修改的DLL,保存并替代原文件,
就可以了,何须那么麻烦,当然除非你这个DLL还是EXE有什么特殊的地方不能这样。
易语言用汇编比较蛋疼,而且我对易语言也不太了解,
如果你那么固执要用编程来解决,我就大概提一下思路。
一、搜00,找个足够大的空的地方
二、通过读PE结构获取OEP,不懂的话请自行网络PE结构。
三、OEP改成你步骤一找到的空地,
这一块涉及到文件虚拟地址对齐问题(好像是这么叫的),比较复杂,而且我也不太清楚,
交给你自己解决。
四、空地里写入你的shellcode。你的shellcode有个问题,call LoadLibrary用的是相对偏移跳 转,当你这句汇编的位置483AFE,那么你就会call到别的地方去了,可以改亏御成如下代码:
mov eax,LoadLibrary地址
call eax
五、shellcode末尾jmp回原OEP,同样涉及对齐问题,自行研究吧。