一、什么是dll

​ 动态链接库(Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL)

​ 是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。

​ 这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(旧式的系统驱动程序)。

pip3 install

二、为何要有dll

​ 由于进程的地址空间是独立的(保护模式),当多个进程共享相同的库时,每个库都在硬盘和进程彼此的内存

​ 存放一份的话,对于早期的计算机来说,无疑是一种极大的浪费,于是windows系统推出了dll机制,

​ dll在硬盘上存为一个文件,在内存中使用一个实例(instance)。

详细如下:

在Windows操作系统中,运行的每一个进程都生活在自己的程序空间中(保护模式),每一个进程都认为自己拥有整个机器的控制权,

每个进程都认为自己拥有计算机的整个内存空间,这些假象都是操作系统创造的(操作系统控制CPU使得CPU启用保护模式)。

理论上而言,运行在操作系统上的每一个进程之间都是互不干扰的,即每个进程都会拥有独立的地址空间。比如说进程B修改了地址为0x4000000的数据,

那么进程C的地址为0x4000000处的数据并未随着B的修改而发生改变,并且进程C可能并不拥有地址为0x4000000的内存(操作系统可能没有为进程C映射这块内存)。

因此,如果某进程有一个缺陷覆盖了随机地址处的内存(这可能导致程序运行出现问题),那么这个缺陷并不会影响到其他进程所使用的内存。

三、什么是dll注入:

​ 我们可以利用dll机制来实训进程通信或控制其它进程的应用程序。

​ 所谓的dll注入正是是让进程A强行加载程序B给定的a.dll,并执行程序B给定的a.dll里面的代码,从而

​ 达到A进程控制B进程的目的

注意,程序B所给定的a.dll原先并不会被程序A主动加载,但是当程序B通过某种手段让程序A“加载”a.dll后,

程序A将会执行a.dll里的代码,此时,a.dll就进入了程序A的地址空间,而a.dll模块的程序逻辑由程序B的开发者设计,

因此程序B的开发者可以对程序A为所欲为。

四、什么时候需要dll注入

应用程序一般会在以下情况使用dll注入技术来完成某些功能:

1.为目标进程添加新的“实用”功能;

2.需要一些手段来辅助调试被注入dll的进程;

3.为目标进程安装钩子程序(API Hook);

五、dll注入的方法

一般情况下有如下dll注入方法:

1.修改注册表来注入dll;

2.使用CreateRemoteThread函数对运行中的进程注入dll;

3.使用SetWindowsHookEx函数对应用程序挂钩(HOOK)迫使程序加载dll;

4.替换应用程序一定会使用的dll;

5.把dll作为调试器来注入;

6.用CreateProcess对子进程注入dll

7.修改被注入进程的exe的导入地址表。

ps:

杀毒软件常用钩子来进行处理

六、使用SetWindowsHookEx函数对应用程序挂钩(HOOK)迫使程序加载dll

​ ctypes是Python的外部函数库,从Python2.5开始引入。它提供了C兼容的数据类型,

​ 并且允许调用动态链接库/共享库中的函数。它可以将这些库包装起来给Python使用。

ctypes.windll.user32下主要用到三个函数,分别是SetWindowsHookEx() 、CallNextHookEx()和UnhookWindowsHookEx()

消息钩子:Windows操作系统为用户提供了GUI(Graphic User Interface,图形用户界面),

它以事件驱动方式工作。在操作系统中借助键盘、鼠标、选择菜单、按钮、移动鼠标、改变窗口大小与位置等都是事件。

发生这样的事件时,操作系统会把事先定义好的消息发送给相应的应用程序,应用程序分析收到的信息后会执行相应的动作。

也就是说,在敲击键盘时,消息会从操作系统移动到应用程序。

所谓的消息钩子就是在此期间偷看这些信息。以键盘输入事件为例,消息的流向如下:

1.发生键盘输入时,WM_KEYDOWN消息被添加到操作系统的消息队列中;

2.操作系统判断这个消息产生于哪个应用程序,并将这个消息从消息队列中取出,添加到相应的应用程序的消息队列中;

3.应用程序从自己的消息队列中取出WM_KEYDOWN消息并调用相应的处理程序。

当我们的钩子程序启用后,操作系统在将消息发送给用用程序前会先发送给每一个注册了相应钩子类型的钩子函数。钩子函数可以对这一消息做出想要的处理(修改、拦截等等)。多个消息钩子将按照安装钩子的先后顺序被调用,这些消息钩子在一起组成了"钩链"。消息在钩链之间传递时任一钩子函数拦截了消息,接下来的钩子函数(包括应用程序)将都不再收到该消息。

像这样的消息钩子功能是Windows提供的最基本的功能,MS Visual Studio中提供的SPY++就是利用了这一功能来实现的,SPY++是一个十分强大的消息钩取程序,它能够查看操作系统中来往的所有消息。

消息钩子是使用SetWindowsHookEx来实现的。函数的原型如下:

HHOOK WINAPI SetWindowsHookEx(

_In_ int idHook,

_In_ HOOKPROC lpfn,

_In_ HINSTANCE hMod,

_In_ DWORD dwThreadId

);

idHook参数是消息钩子的类型,可以选择的类型在MSDN中可以查看到相应的宏定义。比如我们想对所有的键盘消息做挂钩,其取值将是WH_KEYBOARD,WH_KEYBOARD这个宏的值是2。

lpfn参数是钩子函数的起始地址,注意:不同的消息钩子类型的钩子函数原型是不一样的,因为不同类型的消息需要的参数是不同的,具体的钩子函数原型需要查看MSDN来获得。注意:钩子函数可以在结束前任意位置调用CallNextHookEx函数来执行钩链的其他钩子函数。当然,如果不调用这个函数,钩链上的后续钩子函数将不会被执行。

hMod参数是钩子函数所在的模块的模块句柄。

dwThreadId参数用来指示要对哪一个进程/线程安装消息钩子。如果这个参数为0,安装的消息钩子称为“全局钩子”,此时将对所有的进程(当前的进程以及以后要运行的所有进程)下这个消息钩子。注意:有的类型的钩子只能是全局钩子。

注意:钩子函数应当放在一个dll中,并且在你的进程中LoadLibrary这个dll。然后再调用SetWindowsHookEx函数对相应类型的消息安装钩子。

当SetWindowsHookEx函数调用成功后,当某个进程生成这一类型的消息时,操作系统会判断这个进程是否被安装了钩子,如果安装了钩子,操作系统会将相关的dll文件强行注入到这个进程中并将该dll的锁计数器递增1。然后再调用安装的钩子函数。整个注入过程非常方便,用户几乎不需要做什么。

当用户不需要再进行消息钩取时只需调用UnhookWindowsHookEx即可解除安装的消息钩子,函数的原型如下:

BOOL WINAPI UnhookWindowsHookEx(

_In_ HHOOK hhk

);

hhk参数是之前调用SetWindowsHookEx函数返回的HOOK变量/句柄。这个函数调用成功后会使被注入过dll的锁计数器递减1,当锁计数器减到0时系统会卸载被注入的dll。

这种类型的dll注入的优点是注入简单,缺点是只能对windows消息进行Hook并注入dll,而且注入dll可能不是立即被注入,因为这需要相应类型的事件发生。其次是它不能进行其他API的Hook,如果想对其它的函数进行Hook,你需要再在被注入的dll中添加用于API Hook的代码。

dll注入代码包含两部分,一部分是dll的源文件,另一部分是控制台程序的源代码。

HMODULE Hmod = LoadLibraryA("hookdll.dll");

七:准备工作

1、最新anocoda3.7

2、提速下载可以改变源

pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3、安装pywin32,安装时指定安装目录,默认为C:\Python37\Lib\site-packages\

4、安装opencv-python

pip install opencv-python

5、安装pyinstaller,依赖pyin32

pip install pyinstaller

6、ico文件准备好

python dll注入 网络_dll注入相关推荐

  1. DDOS和sql注入网络攻防实验

    模拟网络攻防实验 好久没研究渗透攻击了,巩固一下 sql注入攻击 概述 通过对SQL注入的演示,让大家了解SQL注入漏洞的方式,并学习应对此种漏洞的防御方法. 环境拓扑图 Ip地址 操作机IP地址:1 ...

  2. 网络数据注入工具HexInject

    网络数据注入工具HexInject 对于Kali Linux提供的工具HexInject来说,数据注入才是其最重要的功能.它可以直接向网络注入渗透人员构造的数据包,也可以篡改网络传输的数据.为了避免修 ...

  3. dll重定位内存注入

    dll重定位内存注入 PE数据重定位已经是很古老的技术了 但是很多网友想了解相关,但是还是没办法自己实现. 然而有了以下内容: 重定位字面理解就是把一个东西的位置改变了. 关于DLL或者sys等可执行 ...

  4. python ioc di_PHP的依赖注入(DI) 和 控制反转(IoC)

    要想理解 PHP 依赖注入 和 控制反转 两个概念,就必须搞清楚如下的两个问题:DI -- Dependency Injection 依赖注入 IoC -- Inversion of Control ...

  5. MySQL注入读写文件、HTTP头中的SQL注入和cookie注入

    MySQL注入读写文件 MySQL数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据之外,还可以进行对文件进行读写(前提是权限足够) 读取前提: 1.用户权限足够高,尽量具有root权限 2. ...

  6. SQL注入-盲注-时间注入-报错注入-布尔盲注-DNSlog注入-宽字节注入-WAF绕过-SqlMap使用

    Sqli-labs的安装 1.安装WAMP http://www.wampserver.com/ WAMP是php + mysql + Apache环境集成工具 2.下载Sqli-labs https ...

  7. 注入双括号报错注入_SQL手动注入:sqlilabs(less110)

    种一棵树最好的时间是10年前,其次是现在. 忘了是谁 前言 说实话,由于前段时间学 python ,对于 OWASP TOP10 漏洞的学习都有所落下,虽然现在也在慢慢复习当中,但是今晚谈及的 SQL ...

  8. SQLi LABS Less 27 联合注入+报错注入+布尔盲注+时间盲注

    第27关是单引号字符型注入: 过滤了注释(/* -- #),关键字(select union),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 其他 SQLi LABS 靶场 ...

  9. SQLi LABS Less-26 联合注入+报错注入+布尔盲注+时间盲注

    第26关是单引号字符型注入: 后台过滤了关键字( and  or ),注释(/*  #  --  /),空格: 这篇文章提供联合注入.报错注入.布尔盲注.时间盲注四种解题方式. 目录 一.功能分析 二 ...

  10. SQLi LABS Less 25 联合注入+报错注入+布尔盲注

    第二十五关单引号字符型注入: 过滤了关键字(and.or),可以使用双写绕过: 这篇文章提供了联合注入.报错注入.布尔盲注三种解题方法. SQLi LABS 其余关卡可参考我的专栏:SQLi-LABS ...

最新文章

  1. 网友教会GPT-3骂人、DeepMind再造机器人
  2. 苹果新功能惹众怒,4000 多家组织和个人签署公开信,敦促苹果放弃“儿童安全”功能...
  3. Mybatis之批量更新操作
  4. python excel 操作
  5. 27_多线程_第27天(线程安全、线程同步、等待唤醒机制、单例设计模式)_讲义...
  6. php Imagick()扩展,实现将原图截取成不同规格尺寸的图片
  7. python处理windows弹窗_Python窗口IDE的基本处理,pythonwindowide
  8. 关于js获取radio和select的属性并控制
  9. 【LeetCode笔记】299. 猜数字游戏 (Java、偏数学)
  10. csdn2020年度博客之星 - 直播间(恭喜圆满结束)
  11. python怎么安装pin库_Python库之numpy库的安装教程
  12. Bootstrap CSS 编码规范之Class 命名规范
  13. (14)机器学习_f1,auc值
  14. 通过ajax实现简单的数据交互(模板引擎)
  15. Redis Command
  16. python概述ppt_江红-第1章-Python概述ppt
  17. 【LaTeX】IEEE会议模板中使用BibTex插入文献(解决报错:Something‘s wrong--perhaps a missing \item. \end{thebibliography}
  18. android 照相机裁剪,Android拍照、照片选择以及图片裁剪完全解析
  19. 【Kickstart】2019 Round A - Parcels
  20. 有趣又漂亮的可视化图表制作

热门文章

  1. SSR (misa + primer3 ) 设计SSR引物
  2. mysql与oracle语法区别
  3. 无法找到 Adobe PDF资源文件。“Acrobat PDFMaker“您必须具有”管理员”权限方可安装这些文件...错误怎么解决
  4. ARM指令集发展概述
  5. FlowNet到FlowNet2.0:基于卷积神经网络的光流预测算法
  6. linux 查看tomcat日志 关键字
  7. 三 转码需求(智源GM813X多国语言OSD开发)
  8. PHP 密码生成器 计算生成时间
  9. Linux下载安装NodeJS
  10. 王晶:华为云OCR文字识别服务技术实践、底层框架及应用场景 | AI ProCon 2019