码迷,mamicode.com
首页 > 其他好文 > 详细

火绒注入

时间:2017-02-11 16:51:59      阅读:923      评论:0      收藏:0      [点我收藏+]

标签:sys   sed   判断   href   load   res   kernel32   targe   emc   

http://www.mengwuji.net/thread-6765-1-1.html

 

进程加载模块顺序 :

ModLoad: 00f60000 00f80000 C:\Users\YIFI\Desktop\AVL\Debug\AVL.exe // 自己本身
ModLoad: 77700000 77879000 C:\WINDOWS\SYSTEM32\ntdll.dll     
ModLoad: 769b0000 76aa0000 C:\WINDOWS\SYSTEM32\KERNEL32.DLL
ModLoad: 76cc0000 76e36000 C:\WINDOWS\SYSTEM32\KERNELBASE.dll
ModLoad: 746a0000 746bc000 C:\WINDOWS\SYSTEM32\VCRUNTIME140D.dll
ModLoad: 5fdb0000 5ff26000 C:\WINDOWS\SYSTEM32\ucrtbased.dll

 

采用加载模块回调实现

主要步骤:

判断加载Dll名字  在加载完ntdll之后  因为需要的函数需要在ntdll里面搜索

在Ntdll里面获取ZwProtectVirtualMemory  LdrLoadDll  ZwTestAlert地址 (win10取ntdll!LdrGetProcedureAddressForCaller)

在ntdll附近分配注入shellcode需要的内存7.调用ntoskrnl!ZwReadVirtualMemory获取ntdll!ZwTestAlert处头5字节的数据保存起来

填写数据到申请的内存上

调用ntoskrnl!ZwWriteVirtualMemory往刚才分配的内存区域里复制配置好的shellcode及shellcode需要的数据。

调用ntoskrnl!ZwProtectVirtualMemory+ZwWriteVirtualMemory+ZwProtectVirtualMemory把{0xE9, ??, ??, ??, ??}(其实是jmp到shellcode处)复制到ntdll!ZwTestAlert处,覆盖5个字节

一波断点之后,拿到了shellcode的位置,跟进去就可以看出大致思路(应该是手写的汇编,这里就不放代码了)
1.调用ntdll!NtProtectVirtualMemory修改ntdll!ZwTestAlert(这个地址是刚才第7步就预置好的,不是动态获取的)的保护页成PAGE_EXECUTE_READWRITE
2.memcpy恢复ntdll!ZwTestAlert头部的5字节(这5个字节也是第7步预置好的)
3.调用NtProtectVirtualMemory恢复ntdll!ZwTestAlert保护页
4.调用ntdll!LdrLoadDll完成工作
5.跳回ntdll!ZwTestAlert处

 代码链接

火绒注入

标签:sys   sed   判断   href   load   res   kernel32   targe   emc   

原文地址:http://www.cnblogs.com/yifi/p/6389251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!