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

CC++ 远程线程DLL注入

LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA"); //在目标进程的地址空间内分配一个内存...VirtualAllocEx(hDestProcess, NULL, strlen(szDllName) + , MEM_COMMIT, PAGE_READWRITE); //向上一步的内存中写入数据...,估计是DLL是32的,我换个DLL编译方式再试试 //我编译了64位的DLL,然后还是崩溃的,之后我发现了应该是我函数地址传的有问题 //因为32位的...//另外一个需要注意的问题就是,为什么我在我这个进程中得到的LoadLibrary在远程进程中也可以用 //答案就是,系统DLL在各个进程中的映射地址都是一样的,不过具体情况具体分析...,加载dll只能一次,第二次就不会弹了 //原因,我目测是,DLL已经被加载了,所以第二次就不加载了,也就不执行DllMain那个函数了 //除非我创建一个线程再

54420

Shellcode 技术

直接系统调用和规避“系统调用标记” 拆除挂钩ntdll.dll 欺骗线程调用堆栈 信标的内存加密 自定义反射加载器 可扩展配置文件中的 OpSec 配置 1、Shellcode加密 让我们从一个基本但重要的话题开始...一个更优雅的解决方案是设计和实现一种算法,将 shellcode 混淆(编码/加密)成英文单词(低熵)。那将用一石头杀死两鸟。 3....简而言之,他的方法调整了典型 shellcode 加载器的以下行为: 与其分配一大内存并直接将 ~250KB 植入 shellcode 写入该内存,不如分配小的连续,例如 <64KB 内存并将它们标记为...当我们在加载器进程空间的线程中运行 shellcode ,更容易混入进程中良性线程执行和内存操作的噪音。然而,不利的一面是任何崩溃的开发后模块也会导致加载程序的进程崩溃,从而导致植入程序崩溃。...10.信标内存加密 内存检测的另一个规避方法是在休眠加密植入程序的可执行内存区域。

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

iOS底层原理总结 - Category的本质

那么当调用分类的方法,步骤是否和调用对象方法一样呢? 分类中的对象方法依然是存储在类对象中的,同对象方法在同一个地方,那么调用步骤也同调用对象方法一样。.../* __dst : 移动内存的目的地 * __src : 被移动的内存首地址 * __len : 被移动的内存长度 * 将__src的内存移动__len内存到__dst中 */ void...未经过内存移动和拷贝 经过memmove方法之后,内存变化为 // array()->lists 原来方法、属性、协议列表数组 // addedCount 分类数组长度 // oldCount * sizeof...那么为什么要将分类方法的列表追加到本来的对象方法前面呢,这样做的目的是为了保证分类方法优先调用,我们知道当分类重写本类的方法,会覆盖本类的方法。...load 和 initialize load方法会在程序启动就会调用,当装载类信息的时候就会调用调用顺序看一下源代码。 ?

1.1K60

CVE-2015-1641及利用样本分析

Word在处理displacedByCustomXml属性未对customXml标签对象进行有效性验证,可以通过传入其他标签对象,由类型混淆进而达到任意内存写。...图片12 第二次计算Dst Address 可以看到[[Parameter 1]+0xC]为之前写入值。第二次写入覆盖MSVCR71.DLL虚函数表中函数调用地址: ?...图片19 劫持执行流 由上图可知第二次内存写入——覆盖MSVCR71.DLL虚函数表中函数调用地址,第四次内存写入——覆盖传递参数。...图片49 Normal.vbs 0x03.2 Normal.domx分析 该文件本质为VBE格式,可由wscript.exe正常加载。分析需通过工具解密出VBS脚本。...图片55 数字签名 其用于加载恶意DLL——jli.dll。 0x03.4 jli.dll分析 MD5:051573B9173DE6886E0575F81778EA03 查看其导出函数: ?

87840

新版本 Redline 使用 Lua 字节码逃避检测

而 lua51.dll 会被加载到 compiler.exe 中,lua51.dll 是 compiler.exe 运行需要的 DLL,攻击者将该 DLL 文件与程序文件放在一起。...从而执行 ErrorHandler.cmd 调用 compiler.exe 加载恶意 Lua 代码。...恶意代码 使用 lua51 的导出函数 luaL_loadfile 加载 LuaJIT 字节码,会使用 fread 函数读取 JIT 字节码,然后使用 memmove 函数移动到分配的内存。...调试信息 调试信息 文件中的字节码使用 memmove 函数将字节码从一个偏移量更改为另一个偏移量。使用 memmove 函数复制 JIT 字节码中 200 字节定长数据。...创建名为 Winter750 的互斥量: 调试信息 也会使用 ntdll.dll 中的 LdrLoaddll 函数在运行时加载 dll,使用 LuaJIT ffi 调用该函数。

10910

xv6(11) 文件系统:日志

为什么日志可以解决文件系统操作中出现的崩溃呢?如果崩溃发生在提交之前,那么磁盘上的日志文件就不会被标记为已完成,恢复系统的代码就会忽视它,磁盘的状态就好像写操作从未进行一样。...lh; //日志头 }; struct log log; 这个结构体存在于内存,用来记录当前的日志信息。...调用 $bread$ 将数据磁盘读取到缓存中,然后将缓存中超级的数据复制一份到内存中定义的超级数据结构中去,最后再释放缓存的锁,因为 $bread$ 调用 $bget$ 获取了锁,使用完该缓存就该释放...所以 write_log 就主要是将日志和数据读到内存中的缓存,其实可能并没有真正的磁盘读取,这要视当前缓存是否缓存了磁盘。...所以先读取两部分的数据到内存中的缓存(不一定真的磁盘中读出来,要视磁盘数据在内存中是否有缓存),在内存中把数据复制过去,再同步到磁盘中去,最后释放掉缓存

24010

无密码登录他人QQ空间可查看加密相册

具体的实现流程后期可以优化的更完美,因为时间原因测试了基本功能的实现。只是提供一种思路,大家可以发散思维,把流程更加简化或自动化。...下面直接就从木马上线传入文件后的操作开始演示:我们需要传入的文件是一个exe一个dll,都需要传入C盘根目录且dll的名字必须命名为Dll1.dll(因为懒惰我都写死到源码中了,大家可根据源码自行修改)...(bBuffer + 0 * 4, &dwZero, 4);     memmove(bBuffer + 1 * 4, &dwCount, 4);     memmove(bBuffer + 2 * 4...fputs(msg, file))  //调用fputs函数写入文件,不管成功或失败都会返回一条信息。          ...虽然这个方法的实战作用并不大但是大家可以参考思路改进或优化方法,比如我们可以使用dll劫持直接劫持QQ程序需要加载DLL,用户一执行QQ就会自动加载窃取clientkey的dll,这样就免去了使用我编写的

6.8K10

N种内核注入DLL的思路及实现

.dll[/url] CreateThread [url=file://KnownDLLs/]\\KnownDLLs[/url]是系统加载对象管理器加载最新磁盘DLL内存的,当其他进程想调用某个...DLL,就不用重复磁盘加载了,而会从这里映射一份到自己的进程空间中去。...修改CreateThread函数的开头5字节跳转到这个间隙,当系统任何一个线程创建,会走到CreateThread函数,然后执行空隙中的ShellCode,其负责调用LoadLibrary加载我们的DLL...,过滤出是加载Kernel32.dll的情况,参数中取得其基址,Inline Hook其EAT中的CreateThread函数,跳转到在这个进程虚拟地址空间中申请的Buffer,在其中完成DLL加载过程...(5) 内核感染常用模块,让感染模块帮我们Load DLL 这个方法就有点绕远了,开始了最本质最原始的感染,可增加新节,可插空隙,总之,让别人的模块Load进内存顺路的帮我们加载DLLDLL

2.3K21

MIT 6.S081 教材第八章内容 -- 文件系统 -- 01

日志记录层允许更高层在一次事务(transaction)中将更新包装到多个,并确保在遇到崩溃自动更新这些(即,所有都已更新或无更新)。...完成这些写入后,系统调用将擦除磁盘上的日志。 如果系统崩溃并重新启动,则在运行任何进程之前,文件系统代码将按如下方式崩溃中恢复。...为什么xv6的日志解决了文件系统操作期间的崩溃问题?如果崩溃发生在操作提交之前,那么磁盘上的登录将不会被标记为已完成,恢复代码将忽略它,并且磁盘的状态将如同操作尚未启动一样。...Xv6的write系统调用将大的写入分解为适合日志的多个较小的写入,unlink不会导致此问题,因为实际上Xv6文件系统使用一个位图块。...注:日志需要写入磁盘,以便重启后读取,但日志头和日志数据会在block cache中有一个副本 ---- end_op(kernel/log.c:146)首先减少未完成系统调用的计数。

26630

MIT 6.S081 教材第八章内容 -- 文件系统 -- 02

只有当有C指针引用某个inode,内核才会在内存中存储该inode。...当它找到一个,它通过将新type写入磁盘来声明它,然后末尾通过调用iget(kernel/fs.c:210)inode缓存返回一个条目。...iput()不会在文件的链接计数降至零立即截断文件,因为某些进程可能仍在内存中保留对inode的引用: 进程可能仍在读取和写入该文件,因为它已成功打开该文件。...因此,可以inode中列出的加载文件的前12 kB(NDIRECT x BSIZE)字节,而只有在查阅间接后才能加载一个256 kB(NINDIRECT x BSIZE)字节。...当文件用完,filealloc为什么不panic?为什么这更常见,因此值得处理? 假设在sys_link调用iunlock(ip)和dirlink之间,与ip对应的文件被另一个进程解除链接。

31440

【CC++】为什么不都用memmove代替memcpy

在知乎看见一个比较好的问题,整理下分享给大家。 memmove相比memcpy增加了内存重叠的判断,更加安全,效率只是差了那么一丢丢, 为什么经常看见memcpy, 很少看见memmove 呢 ?...(加粗是我加的) 当然他这是库函数的角度来说,他觉得从一开始就干脆搞成memcpy就是memmove,然后就没这么多毛病了。 另外有人质疑说到底性能差多少。...题主全用 memmove 代替 memcpy 的想法,不仅不可笑,而且如果放到现在来设计标准库,只提供一个函数才是正确的设计。...此时让程序崩溃掉反而是好事,因为崩溃能够更明显的提醒你这里有个bug memmove 误用 memcpy 不一定会崩掉,可能只会让复制结果不正确。...关于效率,也就是 memmove 开头加一个分支,不重叠走 memcpy 一样的代码。调用一次函数比那个分支贵多了,真在极端情况下要省一两个 cycle,也应该先考虑内联。

70130

微软对外披露两个0day漏洞详情

就会调用访问操作; 4.访问操作导致vftable进程崩溃; 5.已崩溃的vftable进程将代码执行转移至返回导向编程(ROP)链; 6.ROP链将代码执行转移到shellcode; 7.通过反射DLL...加载来进行EoP模块加载; 8.PE模块启动已加载完成的Win32k EoP漏洞利用程序; 9.一旦EoP漏洞利用成功,就会在Startup文件夹中释放一个名为.vbs的文件,作为下载其他payloads...JavaScript中的shellcode 反射DLL加载进程 Shellcode(以下提到的伪代码)通过反射DLL加载PE模块,这是高级攻击活动里试图在内存中躲避检测时的常用技巧。...把控制权传递给已加载DLL模块中的入口点 Win32k **提权漏洞利用** Win32k提权(EoP)漏洞利用是加载的PE模块中运行,利用新的Windows漏洞CVE-2018-8120对Windows...FWORD指令来调入虚假的GDT入口指令; 6.成功调用虚假GDT入口指令; 7.这些指令运行内核模式内存空间的用户模式中分配的shellcode; 8.修改shellcode进程中EPROCESS.Token

59820

用Go语言写一个Windows的外挂(上)

.dll 和 kernel32.dll 里,我们只需要能加载这几个DLL 就可以调用强大的 WinAPI 了 image.png 大家可以使用 PE Explorer 查看一个DLL有哪些输出函数 var...大家可以看到,在这里我们使用的是SendMessageW,而不是SendMessageA,因为go语言底层调用DLL接口,传入的是utf16,看看下面的代码就明白了 func SetWindowText...我们需要使用API VirtualAllocEx 向银企直联进程申请一内存空间,用于我们的外挂进程和银企直联进行数据沟通,当我们发送 LVM_GETITEMTEXT 消息之前,我们需要把参数信息写到这个内存里...,然后再使用SendMessage,ListView的数据会写到这个内存,最后我们通过 ReadProcessMemory 来读取获取到列表的数据 这里就是为什么32位不能读64位程序的内容的原因了,...image.png 箭头代表数据流向,所有的API调用都是在外挂这边完成的 整个流程大概就是这样的,我们需要借助远程进程的内存来做数据交互,但最后切记一定要使用VirtualFreeEx 释放掉不用的内存

5.7K20

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

DLL加载到进程A的内存里,修改 RWX-S 权限的section的代码进行patch 3....发生调用执行相关的操作加载远程的恶意代码: 然后将这段代码patch到DllMain的位置: ShellCodeEnd 是我定义的一个空的函数,他紧跟在myDllMain后面,主要是为了帮助我们定位出函数...patch hook procedure 函数防止程序崩溃 经过上述patch的DLL是可以满足执行恶意代码的功能,但是会引起被注入程序的异常或者崩溃,因为我们是调用 SetWindowsHookEx...设置的消息钩子,我们传入的 hook procedure 也并非一个钩子处理函数,它并不会调用 CallNextHookEx ,就导致被注入的进程无法响应相关的消息,甚至运行异常代码而崩溃,这样会导致获取的...当钩子被卸载之后,KbdEditDllPremium.dll 也会内存中卸载,此时主程序其实可以直接删掉 KbdEditDllPremium.dll进行彻底的毁尸灭迹。

86220

edr对抗技术1-api unhook output

将 ntdll.dll 的新副本磁盘映射到进程内存 查找被 hook 的 ntdll.dll的 .text 部分的虚拟地址 获取ntdll.dll基址 模块基址 + 模块的 .text 段 VirtualAddress...PE 文件映射绕过 hook 如果被打开文件是PE格式,那么这个文件会按照内存展开,那么我们猜想是不是这个被第二次载入内存的ntdll是不是就是一个干净的ntdll,能不能帮助我们绕过一些inline...所以我们里的思路是: 新挂起进程的内存是干净的,没有被 hook 的 所有的系统 dll 在被加载内存空间都是一样的启动一个进程,挂起它,读取他的干净的ntdll,然后自己使用。...这将为我们提供指向PEB(过程环境)的指针 PEB结构中,我们可以找到Loader数据或Ldr的地址 然后,我们使用Ldr遍历加载的模块,以获得所需的ntdll基础 通过Loader数据提取加载的模块...wininet模块准备联网 总结 杀软会在程序运行后加载一些基础dll的时候,让程序加载他自己的dll

16710

“暗云”BootKit木马详细技术分析

系统引导启动时会通过int 15中断查询内存信息,此时挂钩15号中断的木马便得以第二次获得CPU控制权,获得控制权后木马挂钩BILoadImageEx函数,调用原始15号中断并将控制权交回给系统继续引导...当引导完毕进入windows内核,挂钩ntoskrnl入口点的木马代码第四次获得CPU控制权,此时木马已真正进入windows内核中,获得控制权后,分配一内存空间,将木马内核的主功能代码拷贝到分配的空间中...插入到svchost代码实现一个简单的功能:判断操作系统类型,云端下载相应的Addata.dat模块到本地,解密执行,云端模块的URL硬编码在Shellcode中。 ? 图3....云端模块1解密后的数据结构 该模块的前4字节为标志“CODE”,仅作为数据合法性校验,校验成功后直接执行其后的Shellcode,而Shellcode的功能则是负责将Addata.dll内存加载,最终其入口点处开始执行之...应用层Shellcode被插入指定进程后开始执行,其功能是在内存中动态加载jmdm.dll文件并跳到其入口点执行。

2K60

Windows注入与拦截(1) — DLL注入的基本原理「建议收藏」

当我们用指针来引用内存的时候,指针的值表示的是进程自己的地址空间的一个虚拟的内存地址。进程不能通过指针来引用其他进程地址空间的内存。...我们知道DLL被首次载入到进程中,会收到DLL_PROCESS_ATTACH的通知,即调用DllMain函数,并且参数fdwReason的值被设为DLL_PROCESS_ATTACH。...下面是一个最简单的dll的源码,在被注入成功后(即收到DLL_PROCESS_ATTACH通知)弹出消息提示框: BOOL APIENTRY DllMain(HMODULE hModule, DWORD...(dll都是通过LoadLibrary(Ex)函数来加载的),所以我们一般会在DLL_PROCESS_ATTACH通知处理过程中创建一个子线程,将业务逻辑放置到该子线程中执行,代码如下: #include...; } 另外,当DLL目标进程卸载DLL会收到DLL_PROCESS_DETACH通知,我们需要在该通知的处理过程中做好最后的善后工作,防止资源泄漏、程序崩溃等问题出现。

1.4K20
领券