首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

sRDI – Shellcode 反射 DLL 注入

对于那些仍然有能力编写汇编程序少数人,我们向您推荐。随着 Windows API 成长普及,人们 DLL 中找到了避风港。...C 代码交叉兼容性非常吸引人,但是如果您希望您 DLL 另一个进程执行怎么办?好吧,您可以尝试将文件写入内存并在顶部放置一个线程,但这在打包 PE 文件上效果不佳 。...构建引导原语后,我们实现了转换为不同语言(C、PowerShell、C# Python)过程。这允许我们将 shellcode 一个 DLL 与我们需要任何其他工具引导代码挂钩。...完成后,blob 看起来像这样: image.png 当从引导程序顶部开始执行时,一般流程如下所示: 获取内存的当前位置(引导程序) 计算设置寄存器(引导程序) 使用目标 DLL 函数哈希、...不重新加载 DLL 情况下多次执行附加功能 优点: 让您初始工具更加轻量,并根据需要添加功能。

1.7K00

详解DLL远线程注入技术

Windows,许多应用程序并不是一个完整可执行文件,它们被分割成一些相对独立动态链接库,即DLL文件,放置于系统。 Windows系统就是由许多动态链接库(DLL文件)构成。...[mlky3957rv.jpeg] Windows 系统平台上提供了一种完全不同较有效编程运行环境,你可以将独立程序模块创建为较小 DLL 文件,并可对它们单独编译测试。...在运行时,只有当 EXE 程序确实要调用这些 DLL 模块情况下,系统才会将它们装载到内存空间中。不用时候,系统将它们给从内存卸载掉。...这种方式不仅减少了 EXE 文件大小内存空间需求,而且使这些 DLL 模块可以同时被多个应用程序使用。Windows 自己就将一些主要系统功能以 DLL 模块形式实现。...DLL发明给我们带来了诸多便利优雅,但是也可能会给我们带来灾难性后果,我们世界就是黑斗争,然后斗争不断地发展。 完

99110
您找到你想要的搜索结果了吗?
是的
没有找到

webpack dll 提升构建速度

DLL,动态链接库(Dynamic Link Library 或者 Dynamic-link Library),由微软公司提出。目的是为了节约应用程序所需磁盘内存空间。...一个传统非共享库,如果两个程序调用同一个子程序,就会出现两份那段代码。让多个应用共享代码切分到一个DLL硬盘上存为一个文件,在内存中使用一个实例(instance)。...借助 DLL 思路,webpack 引入了 DllPlugin DllReferencePlugin ,允许拆分指定第三方包、并创建单独包,生成 manifest.json 二次构建跳过这部分编译...同时,会存在一些问题: 变更了包(新增、删除、版本),需要手动重新构建,生成 DLL Dev Server 模式下,资源都被加载到内存DLL 方式依然会从文件系统读取 AutoDllPlugin...当使用 Webpack Dev Server 时,bundle 被加载到内存以防止从文件系统中进行不必要读取。

98810

内核级木马与病毒攻防:windows恶意代码分析入门

分析分两种,一种叫静态分析,也就是通过直接读取病毒或恶意程序可执行文件来分析它运行原理,一种是动态分析,也就是病毒或恶意程序正在运行情况下,监视其一举一动,通过观察它在系统运行情况来分析它目的原理...; } 注意到程序里有两个字符串,它们会直接存储在编译可执行文件里,恶意软件或病毒程序,这些字符串往往对应服务器ip或某些关键信息,直接从可执行文件抽取出这些信息后就能得到破解病毒恶意代码关键线索...windows程序链接方式有静态动态两种,静态方式就是通过直接将lib文件内函数代码与可执行文件代码一起编译成可执行文件。...动态方式就是代码执行时,将DLL载到内存,然后调用其中某些函数,如果我们能读取代码调用了哪些函数就可以很好判断其目的。...大多数情况下,病毒或恶意代码创作者会“壳”,也就是通过前面的upx类似程序将代码打包压缩,这样就能防止别人通过walker这类软件抓取它加载库从而防止病毒或恶意代码被查杀。

1.3K10

绝大部分测试开发人员都不知道DLL

使用静态库情况下,在编译链接可执行文件时,链接器从库复制这些函数和数据并把它们应用程序其他模块组合起来创建最终可执行文件(.Exe文件).当发布产品时,只需要发布这个可执行文件,并不需要发布被使用静态库...使用动态库情况下,在编译链接可执行文件时,只需要链接该DLL引入库文件,该DLL函数代码和数据并不复制到可执行文件,直到可执行程序运行时,才去加载所需DLL,将该DLL映射到进程地址空间外...但是如果程序需要访问十多个DLL时,如果都采用隐式链接方式加载它们的话,那么程序启动时,这些DLL都需要被加载到内存,并映射到调用进程地址空间,这样将加大程序启动时间。...而且一般来说,程序运行过程只是某个条件满足时才需要访问某个DLL某个函数,其它情况下都不需要访问这些DLL函数。但是这时所有的DLL都已经被加载到内存,资源浪费是比较严重。...这个时候就需要采用显示加载方式来访问DLL需要时才加载所需DLL。 也就是说需要时才被加载到内存,并被映射到调用进程地址控件

71120

Windows资源

进程中找到对应资源句柄,然后使用LoadResource将资源加载到内存,以后就可以使用这个资源了。...然后将这个部分内存写入到文件形成一个exe,最后执行这个exe,最终上面的程序编译运行后我们会发现在程序对应目录下会生成一个test.exe文件。...更新资源 在有的时候需要对程序资源进行更新,这种情况下一般是原始工程下 更改资源,然后重新编译,但是这个时候用户需要下载更新程序原始程序比较大情况下,为了更改一个简单资源就要重新花大量时间下载并更新程序...,可能有点杀鸡用牛刀意思,我们只需要更新程序资源情况下,Windows提供了一种方法。...LoadLibrary不仅仅可以用来加载dll,实际上它可以加载任意PE文件到内存,而GetModuleHandle是在内存查找已经存在一个模块句柄,而我们这个地方这个exe事先并没有加载到内存

94710

C++基础 静态库与动态库

静态链接库(*.lib) 如果在程序中使用静态链接库,那么链接器链接过程中会将.obj文件.lib文件组织成可执行exe文件,也就是将.lib代码链接到可执行文件,因此生成exe文件比较大...程序运行时,将全部数据加载到内存。如果程序体积较大,功能较为复杂,那么加载到内存时间就会比较长,最直接一个例子就是双击打开一个软件,要很久才能看到界面。这是静态链接库一个弊端。...动态链接库(*.dll) 动态链接库又分为两种加载方式:隐式加载显式加载 隐式加载 隐式加载,也称载入时加载,是程序载入内存时加载所需dll文件,且该dll随主进程始终占用内存。...需要时使用LoadLibrary加载,不需要时使用FreeLibrary释放。如果在LoadLibrary时该dll已经在内存,则只需将其引用计数1,如果其引用计数减为0则移出内存。...使用动态链接库程序发行时需要提供dll文件。在编译时,如果使用隐式链接则需要提供.lib文件,生成可执行文件后则不再需要该.lib。如果使用显式链接,在编译时不需提供.lib文件。

1.3K10

PE文件结构

还有许多DLL扩展,如OCX控件控制面板程序(.CPL文件)等都是DLL,它们有一样实体。 64位Windows只是对PE格式做了一些简单修饰,格式叫PE32+。...一般EXE文件可以是0,但一些内核模式驱动程序系统DLL必须有一个检验。当链接器/RELEASE开关被使用时,校验被置于文件。...(3)VirtualAddress:区段装载到内存RVA。 (4)SizeOfRawData:区段磁盘文件中所占大小。 (5)PointerToRawData:区段磁盘文件偏移。...重定位表 当链接器生成一个PE文件时,它假设这个文 件执行时会被装载到默认基地址处,并且把 codedata相关地址都写入PE文件。如果 装入时按默认值作为基地址装入,则不需要重 定位。...但如果可执行文件被装载到虚拟内存另 一个地址,链接器所登记那个地址就是错误 ,这时就需要用重定位表来调整。PE文件 ,它往往单独分为一块,用“.reloc”表示。

9410

C++动态链接库

DLL 还有助于共享数据资源。多个应用程序可同时访问内存单个DLL 副本内容。DLL 是一个包含可由多个程序同时使用代码和数据库。...定义 通过使用 DLL程序可以实现模块化,由相对独立组件组成。例如,一个计帐程序可以按模块来销售。可以在运行时将各个模块加载到程序(如果安装了相应模块)。...您可以使用入口点函数根据 DLL 需要来初始化数据结构或者销毁数据结构。此外,如果应用程序是多线程,则可以入口点函数中使用线程本地存储 (TLS) 来分配各个线程专用内存。...DLL 函数,您必须使用以下关键字来声明要导入各个函数:   __declspec(dllimport)   通常情况下,您最好使用一个包含 define 语句 ifdef 语句头文件,以便分隔导出语句导入语句...模块定义文件,您可以声明 DLL LIBRARY 语句 EXPORTS 语句。

2.4K50

《CLR via C#》笔记:第4部分 核心机制(3)

允许可扩展性意味着第三方代码可在你进程运行。 Windows中将第三方DLL载到进程中意味着冒险。DLL代码很容易破坏应用程序数据结构代码。...AppDomain 允许第三方、不受信任代码现有的进程运行,而CLR保证数据结构、代码安全上下文不被滥用或破坏。 程序员经常将寄宿AppDomain与程序加载反射一起使用。...CLRCreateInstance 函数 MSCorEE.dll 文件实现,该文件一般C:\Windows\System32目录。...第二十三章 程序集加载反射 本章讨论了在编译时对一个类型一无所知情况下,如何在运行时发现类型信息、创建类型实例以及访问类型成员。可利用本章讲述内容创建动态可扩展应用程序。...(P515 1) 程序集加载 JIT编译器将方法代码编译成本机代码时,会查看L代码引用了哪些类型。

75110

滥用具备RWX-S权限且有签名dll进行无感知shellcode注入

(圈子内可以下载到源代码) 基础知识回顾 PE文件每个section都具备自己权限,表明他被映射到虚拟内存之后操作权限,也就是 SECTION_CHARACTERISTICS 这个字段,占四个字节...将DLL载到进程A内存里,修改 RWX-S 权限section代码进行patch 3....这种情况下DLL加载是系统新开一个线程完成,如果 DllMain 回调函数不返回,系统就会kill掉这个线程,以至于我们自己恶意代码无法持续执行,那解决办法就是要在 DllMain 中新开一个线程...主程序 加载相关 RWX-S模块,解析PE结构,获取相关地址: 设置消息钩子,进行dll注入。...当钩子被卸载之后,KbdEditDllPremium.dll 也会从内存卸载,此时主程序其实可以直接删掉 KbdEditDllPremium.dll进行彻底毁尸灭迹。

77720

免杀|白初步探究

答:白黑就是通过DLL劫持应用程序导出目录通过创建一个DLL并通过LoadLibrary函数(或者找一个已有的DLL注入恶意代码)来加载DLL文件。...白黑"有三种不同加载方式: 白执行黑DLL 白执行DLL加载shellcode 白加载shellcode 我们知道当程序编译时,可执行文件头文件(PE)会将导入表添入其中。...2.检查文件夹权限,查看是否有写入权限,如果有可以考虑直接修改,反之则考虑通过LoadLibrary函数创建一个DLL 提示:我们知道Windows系统会按照预先确定顺序查找相关位置。...DLL 劫持, C/C++ 编写有效负载 DLL 时,可能会劫持DllMain控制流。...ASMI免杀处理 为了做好Powershell免杀,我们针对内存规避有着以下手段: 专注于内存操作,不将文件写入磁盘 通过利用各种Windows API将有效负载注入进程 然后存储器单独线程执行有效载荷

2.6K10

Donut - 将 .NET 程序集作为 Shellcode 注入

通过 CLR 加载程序集后,原始引用将从内存删除以阻止内存扫描器。程序集被加载到一个应用程序域中,以允许一次性 AppDomains 运行程序集。...它可以做一件事是手动将 .NET 程序集加载到任意应用程序域中。它可以从磁盘或内存执行此操作。我们利用其从内存加载能力来加载您有效负载,而无需接触磁盘。...无论哪种方式,它都会加载到 AppDomain 程序集加载之后但在它运行之前,解密副本将被释放,然后使用 VirtualFree 从内存释放以阻止内存扫描器。...最后, 如果 CLR 已经加载到宿主进程,那么 donut shellcode 仍然可以工作。.NET 程序集将被加载到托管进程内应用程序域中。....一次性应用程序域 当 donut 加载一个程序集时,它会将它加载到一个 AppDomain

1.7K00

攻击本地主机漏洞(

当应用程序加载时,它将使用一种常见方法来查找要加载到程序所有必需DLLDLL不是使用完全限定路径调用(即DLL应该位于操作系统上位置)。...因此,如果DLL不存在,或者以不安全方式实现(例如权限较弱目录路径),并且攻击者获得了对DLL搜索路径上某个目录控制,则可能通过强制应用程序加载执行恶意DLL来提升权限。...本节,我们将讨论与CompTIA 渗透式测试+考试相关用于权限提升缓冲区溢出两种常见Windows服务漏洞利用。...缓冲区溢出 应用程序将静态(堆栈)或动态(堆)存储变量分配内存,两者都存储计算机随机存取内存(RAM)堆栈上分配变量可以快速访问并直接存储到内存。...本例,BSIZE变量用于定义“buf0”“buf1”长度编译执行程序时,您将看到初始值、溢出前溢出后缓冲区内容打印到终端。

1.4K20

重学计算机组成原理(九)- 动态链接

这个思路就引入一种链接方法,叫作动态链接(Dynamic Link) 相应,我们之前说合并代码段方法,就是静态链接(Static Link) 动态链接过程,我们想要“链接”,不是存储硬盘上目标文件代码...,而是加载到内存共享库(Shared Libraries) 这个加载到内存共享库会被很多个程序指令调用到。...无论是实现一个向量加法,还是实现一个打印函数,这些代码逻辑输入数据在内存里面的位置并不重要。...程序链接时候,我们就把函数调用后要跳转访问地址确定下来了,这意味着,如果这个函数加载到一个不同内存地址,跳转就会失败。...因为 整个共享库是放在一段连续虚拟内存地址,无论装载到哪一段地址,不同指令之间相对地址都是不变

45900

重学计算机组成原理(九)- 动态链接

这个思路就引入一种链接方法,叫作动态链接(Dynamic Link) 相应,我们之前说合并代码段方法,就是静态链接(Static Link) 动态链接过程,我们想要“链接”,不是存储硬盘上目标文件代码...,而是加载到内存共享库(Shared Libraries) 这个加载到内存共享库会被很多个程序指令调用到。...无论是实现一个向量加法,还是实现一个打印函数,这些代码逻辑输入数据在内存里面的位置并不重要。...程序链接时候,我们就把函数调用后要跳转访问地址确定下来了,这意味着,如果这个函数加载到一个不同内存地址,跳转就会失败。...因为 整个共享库是放在一段连续虚拟内存地址,无论装载到哪一段地址,不同指令之间相对地址都是不变

20520

静态库与动态库那些事

2.动态库链接阶段没有被复制到程序,而是程序运行时由系统动态加载到内存程序调用。...使用静态编译lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库灵活 性,发布新版本时要发布应用程序才行。...(3)动态链接情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出 函数名称位置,DLL包含实际函数和数据,应用程序使用LIB文件链接到DLL文件。...应用程序可执行文件,存放不是被调用函数代码,而是 DLL相应函数代码地址,从而节省了内存资源。DLLLIB文件必须随应用程序一起发行,否则应用程序会产生错误。...(3).dll文件,真正可执行文件,开发成功后应用程序发布时,只需要有.exe文件.dll文件,并不需要.lib文件.h头文件。

1.5K00

计算机底层知识之运行环境&可执行文件

❞ 开机后,BIOS会确认「硬件是否正常运行」,没有问题的话就会启动「引导程序」。引导程序功能是把硬盘等记录OS加载到内存运行。 ---- 源代码完成后,就可以编译生成「可执行文件」了。...Windows,API目标文件,并不是存储通常库文件,而是存储名为「DLL」(Dynamic Link Library)文件特殊库文件。「DLL文件是程序运行时动态结合文件」。...那么,EXE文件,变量函数内存地址值,是如何来表示呢? 那就是EXE文件给变量函数分配了「虚拟内存地址」。程序运行时,「虚拟内存地址会转换成实际内存地址」。...「堆」是用来存储程序运行时任意数据及对象内存领域 加载到内存程序由4部分构成 堆相似之处在于,他们内存空间都是程序运行时得到分配。...使用DLL文件好处 DLL文件函数可以被「多个程序共用」。因此,「借助该功能可以节约内存磁盘」。此外,在对函数内容进行修正时,还不需要重新链接使用这个函数程序

73420

.NET 程序集加载上下文

默认加载上下文 全局程序集缓存中发现类型会加载到默认加载上下文中 位于应用程序探测路径程序集会加载到默认加载上下文中,这包括了 ApplicationBase PrivateBinPath...无上下文 使用反射发出生成瞬态程序集只能选择没有下文情况下进行加载。没有上下文情况下进行加载是将具有同一标识多个程序集加载到一个应用程序域中唯一方式。这将省去探测成本。...从字节数组加载程序集都是没有上下文情况下加载,除非程序标识(应用策略后建立)与全局程序集缓存程序集标识匹配;在此情况下,将会从全局程序集缓存加载程序集。...没有上下文情况下加载具有同一标识多个程序集会导致出现类型标识问题,这些问题与将具有同一标识多个程序集加载到多个上下文中所导致问题类似。 请参阅避免将一个程序集加载到多个上下文中。...解决方法 实际上 .NET 推荐唯一解决方法是创建应用程序域来解决非探测路径下 dll 依赖问题,创建应用程序时候设置此应用程序探测路径。

24630

CC++ 关于生成静态库(lib)动态库(dll)文件如何使用(基于windows基础篇)

然后编译即可! 生成之后,将该lib文件放置于我们项目的目录头文件初,#prama comment(lib,"cof.lib");即可!...而动态库使用,则刚好避免了静态库这一个庞大而强占大量内存缺点,它封装了每一个函数,作为一个接口,当我们需要哪个时候,就可以读取哪个函数代码到内存,占用内存相对小很多。...关于动态库生成方式lib差不离,将属性改为 将Application (.exe) 改为 dll即可 不过定义函数时需要在前面加载:  declspec(dllexport) 代码如下: 1 #...是因为我们覆盖了我们执行文件那块儿内存,所以能够去run,我们给他加载函数。 以上就是对于静态库动态库生成调用方法。    ...对于静态库动态库优缺点使用用途:      dlllib可以比作这样公司:  dll就像一个外包公司,可以被任意程序使用,而lib就像一个大公司下一个研发部分,只能加载到文件才能被使用

6.2K51
领券