一、DLL注入

DLL注入主要有三种方法:

  • 远程线程(CreateRemoteThread()API)
  • 注册表(AppInit_DLLs值)
  • 消息勾取(SetWindowsHookEx()API)

下面从注入思路和代码示例两方面分别介绍这三种方法。

1. 远程线程

注入思路:

在目标进程中创建一个远程线程,这个线程将指定的DLL加载到目标进程中,DLL被加载后会自动执行DLLMain()函数,我们可以将想要执行的代码放在DLLMain()函数中。具体过程如下:

  1. 打开目标进程
  2. 在目标进程申请内存,并写入要注入的DLL路径
  3. 从Kernal32.dll获取LoadLibrary地址
  4. 在目标进程中创建远程线程,用于执行LoadLibrary(DLL_PATH)

代码示例:

以下为注入器部分的代码,DLL部分可自行编写(可以参考《逆向工程核心原理》P203源码)

VOID InjectDll(DWORD TargetProcId, char *DllName){//1. 打开目标进程HANDLE hTargetProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, TargetProcId);if (hTargetProc == NULL){    return;}//2. 将DLL文件路径写入目标进程//在目标进程中申请DllLength大小的内存空间    int DllLength = strlen(DllName) + sizeof(char);    //‘\0’PVOID pDllAddress = VirtualAllocEx(hTargetProc, NULL, DllLength,MEM_COMMIT,PAGE_READWRITE);if (pDllAddress == NULL){CloseHandle(hTargetProc);return;}//将DLL文件路径写入目标进程中申请的内存WriteProcessMemory(hTargetProc, pDllAddress, DllName, DllLength, NULL);//3. 获得LoadLibraryA的函数地址(kernel32.dll在每个进程中具有相同的基址,因此LoadLibraryA在当前进程和目标进程的VA相同)char *pFunName = "LoadLibraryA"; FARPROC pFunAddress = GetProcAddress(GetModuleHandle("kernel32.dll"), pFunName);//4. 创建远程线程HANDLE hRemoteThread = CreateRemoteThread(hTargetProc, NULL, NULL,(LPTHREAD_START_ROUTINE)pFunAddress, pDllAddress, 0, 0);WaitForSingleObject(hRemoteThread, INFINITE);CloseHandle(hRemoteThread);CloseHandle(hTargetProc);
}

持续更新中......

欢迎大家一起交流讨论~

windows注入的方法相关推荐

  1. python写一个类方法_重写python脚本,在脚本的每个类中注入一个方法 - python

    假设我有一个python模块foo.py,其中包含: class Foo(object): def __init__(self): pass 接下来,我想解析此脚本,并在每个类中注入一个方法,然后将其 ...

  2. w ndows7太卡了,uefi安装win7卡在正在启动windows界面解决方法(新方法)

    win10己经成为全球第一桌面系统,但始终有大量的用户还在停留win7时代,因为大部分觉得win7系统对游戏以及软件兼容性好,最近有很多网友问我uefi安装win7卡在正在启动windows怎么办?出 ...

  3. windows性能计数器搜集方法

    windows性能计数器搜集方法 PerfMon-Windows性能监视器是个好东西,可以辅助我们分析发生问题时间段服务器资源占用情况,但是部署性能计数器确实一个相当麻烦的事情,往往这种枯燥的事别人还 ...

  4. 在c#中调用windows脚本的方法

    在c#中调用windows脚本的方法 方法1:直接调用   CODE:   System.Diagnostics.Process proc = new System.Diagnostics.Proce ...

  5. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 同时注入普通方法、静态方法、构造方法 )

    文章目录 一.同时注入普通方法.静态方法.构造方法 二.完整代码示例 一.同时注入普通方法.静态方法.构造方法 如果要同时为 Groovy 类注入大量方法 , 使用 Category 分类 或 Met ...

  6. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 进行方法注入普通方法 )

    文章目录 一.使用 MetaClass 进行方法注入 二.完整代码示例 一.使用 MetaClass 进行方法注入 定义 Student 类 , class Student {def name; } ...

  7. Spring官网阅读(二)(依赖注入及方法注入)

    上篇文章我们学习了官网中的1.2,1.3两小节,主要是涉及了容器,以及Spring实例化对象的一些知识.这篇文章我们继续学习Spring官网,主要是针对1.4小节,主要涉及到Spring的依赖注入.虽 ...

  8. Spring(2)bean注入--Set方法注入

    Spring(2)bean注入–Set方法注入 Set 方法注入 新建一个空的 maven项目. 导入依赖 <properties><project.build.sourceEnco ...

  9. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)

    这篇文章介绍的内容是关于PHP+Mysql防止SQL注入的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 我的官方群点击此处. 方法一: mysql_real_escape_str ...

最新文章

  1. python动态显示数据_python中plot实现即时数据动态显示方法
  2. mysql集群搭建_mysql高可用集群搭建
  3. Web socket广播
  4. 示例解读 Python 2 和 Python 3 之间的主要差异
  5. Linux 核心模块,LINUX核心及核心模块的简单介绍
  6. 一个程序如何连接到外网_如何从头开始开发一个微信小程序
  7. 调试中除了在URL上加时间戳外,如何避免js、css被返回304状态?
  8. IMP导入数据 报错 IMP-00058 ORA-01691 IMP-00028
  9. perl删除Windows下的图片缓存缩略图(Thumbs.db)
  10. 苹果计算机取消用户名和密码进入不,苹果手机刷机过后进不了桌面要id账号和密码但是忘记了怎么处理?...
  11. 【JS】秒杀倒计时制作
  12. 手机坏了微信聊天记录怎么恢复?不用怕,用这招
  13. IE安全系列:IE浏览器的技术变迁(上)
  14. 都在发做圣诞树,我来点不一样的,用python给对象戴一顶圣诞帽
  15. 2022年中国农业现代化发展现状
  16. matlab中定义类、面向对象编程
  17. 外贸网站如何全球加速?用全球加速CDN比较好
  18. 洪蜀宁-区块链原始大佬的文章-金丘区块链院长
  19. jquery 获取tr中的td,td中的input
  20. Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》(1)

热门文章

  1. CVPR 2019 论文大盘点-超分辨率篇
  2. 什么是随机种子(random seed)?
  3. shell exec命令
  4. 洛谷 P2657 [SCOI2009] windy数 数位DP
  5. 更新版:整理下苏生不惑开发过的那些工具和脚本
  6. 18年程序员生涯,读了200多本编程书,挑出一些精华分享给大家
  7. 葡萄牙生产一台计算机,外贸教程-国际贸易教程作业题如果美国生产一台计算机需要60小时的劳动,生产 爱问知识人...
  8. 新版TCGA表达矩阵1行代码提取2.0版
  9. 逻辑AND()运算符,带C语言示例
  10. 英雄联盟电竞bway公开S12宣传片 IG夺冠镜头置结尾 这是有寓意