尘。 发表于 2017-8-23 22:50:41

【浅谈注入】1.线程EIP注入

本帖最后由 尘。 于 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.释放内存并且关闭句柄
源码我就不发了,只要理解了方法实现起来不是难事

至于其他注入,后面的文章可能会谈到,如果有其他兴趣的也可以站内我


尘。 发表于 2017-8-23 22:53:33

吐槽一下,编辑的时候排版是整齐的,一发布出来排版全是乱的,蛋疼

yyjpcx 发表于 2017-9-28 22:49:30

最好可以提供一份源码   百度网盘
学习性更高

揰掵佲 发表于 2017-10-2 22:14:57

不错,不错

水果蛋蛋 发表于 2017-11-26 21:28:12

看看了,支持下

拿起书本 发表于 2018-2-12 10:18:49

学习中,谢谢楼主

fanlaoshi1688 发表于 2018-6-8 15:58:18

学学个人原创] 【浅谈注入】1.线程EIP注入

fanlaoshi1688 发表于 2018-6-8 16:00:45

打开线程和进程,获得线程和进程句柄

fanlaoshi1688 发表于 2018-6-8 16:19:04

至于其他注入,后面的文章可能会谈到,如果有其他兴趣的也可以站内我

yunli 发表于 2018-8-2 06:15:46

支持你,看好你,试试看?
页: [1] 2
查看完整版本: 【浅谈注入】1.线程EIP注入