据统计90%查看本帖的人,都已经注册本站了哦
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 尘。 于 2017-8-23 22:55 编辑
写在最前:
DLL注入也并非什么前沿话题了,不过基于易语言对各种注入的分析还是相对较少的
最近也不是太忙,闲下心来也计划写几篇关于注入的文章,简单的谈谈各种注入
本人也只是初学者,文章内仅仅是个人对于该知识点的认知,并不能保证所有内容都完全正确,请结合网上的其他资料一同阅读
也希望大神不吝赐教。在此谢过
一.线程EIP注入
我们知道进程仅仅作为容器,真正执行代码的是线程,我们可以通过修改线程的执行,来让线程执行我们加载DLL的代码
设置线程的上下文我们可以通过Get/SetThreadContext实现.
函数原型如下:
BOOL WINAPI GetThreadContext( _In_ HANDLE hThread, //线程句柄 _Inout_ LPCONTEXT lpContext //Context结构);以下是函数及参数的易语言声明代码:
更多资料可以参阅 https://msdn.microsoft.com/en-us/library/windows/desktop/ms679362(v=vs.85).aspx有办法修改线程的执行了,那可以开始写加载DLL的代码并且写入到游戏内存了我们知道push xxxxxxxx retn可以实现jmp xxxxxxxx的效果,那我们可以写出如下的
loadCodepush 0x1fffffff //返回地址
pushfd //保护寄存器
pushadpush 0x2fffffff //DLL路径
mov eax,0x3fffffff //loadlibrary地址
call eax //调用loadlibrary
popad //恢复寄存器
popfdretn
转换过来的字节集就是{104,255,255,255,31,156,96,104,255,255,255,47,184,255,255,255,63,255,208,97,157,195}
我们需要先执行loadLibrary的代码然后再跳回原来的代码去执行.
那么我们需要获取线程当前EIP.loadLibrary的代码,以及写DLL路径到游戏中,并且把loadCode的代码需要寻址的地方重新计算好如图:
接下来我们通过VirtualAllocEx在目标进程中开辟一片新的内存空间并且用WriteProcessMemory把这段代码写入内存空间中代码如图:
接下来我们只要把线程的EIP设置成我们shellCode的地址就可以了,可以通过我们上述的SetThreadContext函数然后再恢复被我们挂起的线程,那么我们的DLL就可以被加载到我们的目标进程去了如图:
总结:线程EIP注入的步骤1.获取要注入的线程ID,进程ID
2.打开线程和进程,获得线程和进程句柄
3.把DLL路径写入游戏内存中
4.获取LoadLibary的地址
5.挂起线程
6.获取线程EIP
7.计算LoadCode
8.把LoadCode写入目标进程的内存中
9.设置线程EIP为LoadCode的地址
10.恢复线程运行
11.等待执行结束
12.释放内存并且关闭句柄
源码我就不发了,只要理解了方法实现起来不是难事
至于其他注入,后面的文章可能会谈到,如果有其他兴趣的也可以站内我
|