Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python dll注入 网络_dll注入

python dll注入 网络_dll注入

作者头像
全栈程序员站长
发布于 2022-08-27 03:20:17
发布于 2022-08-27 03:20:17
2.2K0
举报

大家好,又见面了,我是你们的朋友全栈君。

一、什么是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文件准备好

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145235.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Eric S. Raymond:如何成为一名黑客如何成为一名黑客How To Become A Hacker
http://www.0x08.org/docs/hacker-howto.html#hacker-howto
一个会写诗的程序员
2018/08/20
3.3K0
Eric S. Raymond:如何成为一名黑客如何成为一名黑客How To Become A Hacker
新手程序员必备10大技能
如果你已经有一段时间的编程经验,或者正准备学习编程,那么可能会考虑的是:怎样才能成为一名优秀的程序员?计算机专业的毕业生如何为软件开发和编程职业生涯做准备?职场对于初级开发人员有哪些期望?这是临近毕业或初入职场的新手程序员们密切关注的问题。
陈哥聊测试
2021/07/14
1.8K0
新手程序员必备10大技能
【linux学习指南】初始linux
Linux是一种自由和开放源代码的类UNIX操作系统,该操作系统的内核由林纳斯托瓦兹在1991年首次发布,之后,在加上用户空间的应用程序之后,就成为了Linux操作系统。严格来讲,Linux只是操作系统内核本身,但通常采用“Linux内核”来表达该意思。而Linux则常用来指基于Linux内核的完整操作系统,它包括GUI组件和许多其他实用工具。
学习起来吧
2024/05/04
1370
【linux学习指南】初始linux
Linux为什么值得学习?
您可能会考虑是否值得学习 Linux,因为它在桌面上远没有 macOS 或 Windows 那么受欢迎。有很多值得学习 Linux 的原因,下面是其中的一些。
星哥玩云
2022/08/09
1.5K0
Linux为什么值得学习?
几种编程语言的优缺点
我的旋风式简介会讲C、C++、Lisp、Java、Perl 、Ruby (我就是喜欢) 和 Python,把 Python 加进来是因为 —— 好吧,你看了就知道了。
量化投资与机器学习微信公众号
2018/01/29
3.5K12
几种编程语言的优缺点
成为黑客的基础是什么?
在计算机安全领域,黑客是专注于计算机和网络系统安全机制的人。有一个社区和共享的专家程序员和Web指南的文化,跟踪其第一个十年的分时小型计算机的历史和最早的ARPAET实验。这个文化的成员是第一个“黑客”。打破电脑和打破手机系统已经成为黑客在流行文化中的象征,但黑客文化比大多数人知道的更为复杂和道德。学习基本的黑客技术,如何像黑客一样思考,以及如何获得尊重,从而闯入复杂的黑客世界。
网e渗透安全部
2019/08/09
6560
成为黑客的基础是什么?
黑客需要具备几种计算机语言呢??
黑客都身兼多种计算机语言的。他们至少应该精通Python、Java、C/C++、Perl和LISP共五种计算机语言。这五种计算机语言分别代表着编程的不同思路和方法呦。
网e渗透安全部
2019/08/09
1.9K0
黑客需要具备几种计算机语言呢??
黑客入门级编程
相当多入门书籍开篇就大谈**实作,这无疑是在根基不稳的时候建造摩天大厦。与其坐等这种不牢固的大厦倾倒,不如花一些时间固本培原,认识了解一下黑客的根扎在哪里。
网e渗透安全部
2019/09/25
1.5K0
黑客入门级编程
技术可以小白,但心态不行!聊聊在黑客的世界里,我们如何正确提问!
刚开始,群里聊的话题都比较水,群内有些行为也需要纠正,但这两天慢慢的有人在推荐与自荐开源项目了。
GitHubDaily
2019/06/18
6400
大教堂与集市(最新译本)
Linux有一套令人感到吃惊的软件工程理论,为了验证这些理论,我专门在fetchmail项目中加以应用,效果之好让我感到惊讶。本文将讨论这些理论,并对比两种完全不同的开发模式:绝大多数商业公司所采用的“大教堂”模式和Linux世界采用的“集市”模式。两种模式的根本不同在于他们对软件排错有着完全对立的认识。我从Linux的经验出发,证实了这样一个命题:“只要眼睛多,bug容易捉”,这和那些由利己个体组成的自纠错系统有着异曲同工之妙。文末,我探讨了在这种观念的影响下,软件可能拥有的未来。
麒思妙想
2021/04/09
2.2K0
大教堂与集市(最新译本)
如何系统学习Linux
linux太难用了!(一通鼠标点击,进入/etc) 学习linux,你忘记windows的思维方式了吗? 怎么安装软件阿?那一堆文件是干什么的阿? 学习linux,你还在浮躁吗? 进入linux,随便按了几下.赶紧重启进入win 学习linux,你用心了吗? ....... 首先,我想引用一下别人说过的一句话:除非在过去的十年你一直生活在山洞里,否则你一定听说过linux. 是 的,现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少,这就造成了现在的
猿人谷
2018/01/17
3.9K0
为什么我要在2018年学习Python?
根据维基百科的解释,"Python是一种广泛使用的高级编程语言,由吉多·范罗苏姆创造,第一版发布于 1991 年。Python 的设计哲学强调了代码的可读性和简洁的语法。"随着大数据,人工智能的兴起,越来越多的人也开始研究起这门语言。
IT阅读排行榜
2018/08/16
5130
谈谈Linux的学习方法与学习中应该注意的一些事
就如同刚才说的,很多同学以前可能连Linux是什么都不知道,对UNIX更是一无所知。 所以我们从最基础的讲起,对于Linux及UNIX的历史我们不做多谈,直接进入入门的学习。
用户7705674
2021/10/06
5030
程序员入门篇
推荐理由:语法简单,有大量已经成熟的库。运行既有结果,特别是JavaScript,作为前端语言,还有页面效果。这种即时反馈更有动力让新人坚持学习。
石云升
2022/08/25
2640
编译原理基础
GNU编译器套装(英语:GNU Compiler Collection,缩写为GCC),指一套编程语言编译器,以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,也是GNU工具链的主要组成部分之一。GCC(特别是其中的C语言编译器)也常被认为是跨平台编译器的事实标准。
嵌入式视觉
2022/09/05
9230
Github开源免费编程书籍
语言无关 MySQL 21分钟MySQL入门教程 MySQL索引背后的数据结构及算法原理 NoSQL Disque 使用教程 Neo4j .rb 中文資源 Neo4j 简体中文手册 v1.8 Redis 命令参考 Redis 设计与实现 The Little MongoDB Book The Little Redis Book 带有详细注释的 Redis 2.6 代码 带有详细注释的 Redis 3.0 代码 PostgreSQL PostgreSQL 8.2.3 中文文档 Postgre
时见疏星
2018/06/01
7.8K0
帮你提升 Python 的 27 种编程语言
27 种语言 过程型编程语言: C, Rust, Cython 面向对象数据建模语言: Java, C#, Eiffel C 的面向对象衍生语言: C++, D 面向数组的数据处理: MATLAB/Octave, Julia 统计数数据分析: R 计算型管道建模: Haskell, Scala, Clojure, F# 事件驱动编程: JavaScript, Go, Erlang, Elixir 渐变类型: TypeScript 动态元编程: Hy, Ruby 实用问题解决: Lua, PHP, Perl
CDA数据分析师
2018/02/05
1K0
程序员技术练级攻略
月光博客6月12日发表了《写给新手程序员的一封信》,翻译自《An open letter to those who want to start programming》,我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章。因为他也是喜欢编程和技术的家伙,于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下。于是他给我发来了一些他的心得和经历,我在把他的心得做了不多的增改,并根据我的经历增加了“进阶”一节。这是一篇由新手和我这个老家伙根据我们的经历完成的文
小小科
2018/05/02
9770
GNU/Linux与开源文化的那些人和事
image.png 一、计算机的发明 世上本无路,走的人多了,就有了路。世上本无计算机,琢磨的人多了……没有计算机,一切无从谈起。 三个人对计算机的发明功不可没,居功至伟。阿兰·图灵(Alan Mathison Turing)、阿塔那索夫(John Vincent Atanasoff)、和冯·诺依曼(John von Neumann)。 图灵从理论上证明了计算机的可行性;阿塔那索夫实践了图灵的理论;冯·诺依曼奠定了现代计算机的体系结构。 图灵说这玩意儿应该可以做,已经被证明了;阿塔那索夫二话不说动手就做了一
BestSDK
2018/02/26
1.3K0
GNU/Linux与开源文化的那些人和事
前事不忘,后事之师,唠唠开源的前世今生
过去三十年,开源软件以开放、共享、协同的新型生产方式,成为全球信息技术发展的强大推动力。是什么造就了开源?一个小小的个人项目何以改变计算机工业乃至人类社会的?从历史的视角,我们可以得到哪些启发?
Zilliz RDS
2022/02/21
4760
前事不忘,后事之师,唠唠开源的前世今生
相关推荐
Eric S. Raymond:如何成为一名黑客如何成为一名黑客How To Become A Hacker
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档