APC(Asynchronous Procedure Call)异步过程调用是一种Windows操作系统的核心机制,它允许在进程上下文中执行用户定义的函数,而无需创建线程或等待OS执行完成。该机制适用于一些频繁的、短暂的或非常细微的操作,例如改变线程优先级或通知线程处理任务。在APC机制中,当某些事件发生时(例如文件IO,网络IO或定时器触发),这些事件将被操作系统添加到一个APC队列中,该队列绑定到执行线程。在下一次发生ALERTABLE的事件时(例如调用SleepEx或SignalObjectAndWait时),OS将弹出APC函数并在执行线程上下文中调用该函数,并在执行完毕后恢复线程执行。
对于红队安全研究团队来说,一次成功的渗透测试必须是不被目标系统发现的,随着现代终端检测和响应(EDR)产品日趋成熟,红队也必须随之每日俱进。在这篇文章中,我们将跟大家介绍FireEye Mandiant红队研究人员如何通过构造特殊Payload来绕过现代EDR产品,并获取到目标系统的完整命令控制访问权。
DLL注入技术可以被正常软件用来添加/扩展其他程序,调试或逆向工程的功能性;该技术也常被恶意软件以多种方式利用。这意味着从安全角度来说,了解DLL注入的工作原理是十分必要的。
之前一期我们学习了 IAT 的基本结构,相信大家对 C++ 有了一个基本的认识,这一期放点干货,我把 ring3 层恶意代码常用的编程技术给大家整理了一下,所有代码都经过我亲手调试并打上了非常详细的注释供大家学习,如下图:
在渗透过程中有时候为了权限维持或者其他等一些操作,比如以前的搜狗输入法可以替换dll文件当用户切换输入法就会去加载我们替换的dll文件,dll文件可以自己编写一些net user或者其他的一些方法,也可以通过msf等来生成dll文件进行替换。
摘要:Windows APC的全称为(asynchronous procedure call)翻译为中文即“异步过程调用”。《Windows APC机制(一)》、《谈谈对APC的一点理解》、《线程的Alertable与User APC》主要阅读了这三篇文章,对APC有了个大概了解:
Hades是一款整合了多种规避技术的Go Shellcode加载器,当前版本的Hades只是一个概念验证程序,旨在帮助广大研究人员尝试绕过流行AV/EDR的安全防御机制,并以此来验证安全防护产品的能力。
前两篇漫谈中讲到,除ntdll.dll外,在启动一个新进程运行时,PE格式DLL映像的装入和动态连接是由ntdll.dll中的函数LdrInitializeThunk()作为APC函数执行而完成的。这就牵涉到了Windows的APC机制,APC是“异步过程调用(Asyncroneus Procedure Call)”的缩写。从大体上说,Windows的APC机制相当于Linux的Signal机制,实质上是一种对于应用软件(线程)的“软件中断”机制。但是读者将会看到,APC机制至少在形式上与软件中断机制还是有相当的区别,而称之为“异步过程调用”确实更为贴切。
线程是不能被“杀掉”、“挂起”、“恢复”的,线程在执行的时候自己占据着CPU,别人怎么可能控制它呢?
这将创建一个具有 RWX(读、写、执行)权限可以放下shellcode的区域,API 返回内存区域的地址。
GoPurple是一款功能强大的Shellcode运行工具,该工具基于Golang开发。GoPurple由多种不同的技术结合实现,其中包括了大量Shellcode注入技术。GoPurple可以帮助广大研究人员更好地评估终端安全解决方案的检测能力。
安全与危险是共存的。如果我们了解危险的来源以及产生的过程,对于安全防护拥有很现实的意义。 本文主要介绍dll注入的方式,意在描述危险的来源,以及危险的执行的过程,以便于我们解决危险。
各种API远程线程注入的方法,分别是 远程线程注入,普通消息钩子注入,全局消息钩子注入,APC应用层异步注入,ZwCreateThreadEx强力注入,纯汇编实现的线程注入等。
SysWhispers能够生成Header文件和ASM文件,并通过发送直接系统调用来绕过反病毒以及终端防护响应工具。该工具支持Windows XP至Windows 10的所有系统核心调用,生成的样本文件可以直接从“example-output/”目录获取。
本文记录的我学习实现白+黑免杀的过程,以及遇到了shellcode编写32位无法注入64的问题,最后组合了各种静态规避手段,成功静态层面逃逸大部分的杀软。成品和源码可以在最下方的先知的附件中可以拿到,仅供学习参考。
Jektor是一款功能强大的Windows用户模式Shellcode执行测试工具,该工具可以帮助广大研究人员了解和测试恶意软件所使用的各种不同技术。
F # 是一种函数编程语言,可方便编写正确且可维护的代码。F # 编程主要涉及如何定义自动推断和通用化的类型和函数。这样,你的关注点将保留在问题域上并操作其数据,而不是编程的详细信息。
在Windows操作系统中,运行的每一个进程都生活在自己的程序空间中(保护模式),每一个进程都认为自己拥有整个机器的控制权,每个进程都认为自己拥有计算机的整个内存空间,这些假象都是操作系统创造的(操作系统控制CPU使得CPU启用保护模式)。理论上而言,运行在操作系统上的每一个进程之间都是互不干扰的,即每个进程都会拥有独立的地址空间。比如说进程B修改了地址为0x4000000的数据,那么进程C的地址为0x4000000处的数据并未随着B的修改而发生改变,并且进程C可能并不拥有地址为0x4000000的内存(操作系统可能没有为进程C映射这块内存)。因此,如果某进程有一个缺陷覆盖了随机地址处的内存(这可能导致程序运行出现问题),那么这个缺陷并不会影响到其他进程所使用的内存。
由于传播、利用本公众号亿人安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号亿人安全及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
测试和调试的 关键就是将程序分解成独立的部件,可以在不受其他部件影响的情况下实现、测试和调试。
shellcode由于可以随意地进行变化和还原,杀软的查杀难度较大。因此将木马shellcode化,再进行shellcode免杀是目前最流行的免杀方式之一。
http://book.douban.com/annotation/28879242/
Process Hollowing技术简介 Process Hollowing是现代恶意软件常用的一种进程创建技术。一般来说,使用Process Hollowing技术所创建出来的进程在使用任务管理器之类的工具进行查看时,它们看起来是正常的,但是这种进程中包含的所码实际上就是恶意代码。 这种技术可以对运行中的进程进行动态修改,并且整个过程既不用挂起进程,也不需要调用额外的Windows API,即无需调用WriteProcessMemory, QueueUserApc, CreateRemoteThre
根据MSDN,DLL 是一个库,其中包含可以由多个程序同时使用的代码和数据。 DLL 通常用于将程序模块化为单独的组件,如果模块存在,则每个模块都由主程序加载。这些模块通常扩展主程序的功能。
GetProcAddress函数检索指定的动态链接库(DLL)中的输出库函数地址。 函数原型: FARPROC GetProcAddress( HMODULE hModule, // DLL模块句柄 LPCSTR lpProcName // 函数名 ); 参数: hModule [in] 包含此函数的DLL模块的句柄。LoadLibrary或者GetModuleHandle函数可以返回此句柄。 lpProcName [in] 包含函数名的以NULL结尾的字符串,或者指定函数的序数值。如果此参数是一个序数值,它必须在一个字的底字节,高字节必须为0。 返回值: 如果函数调用成功,返回值是DLL中的输出函数地址。 如果函数调用失败,返回值是NULL。得到进一步的错误信息,调用函数GetLastError。 注释: GetProcAddress函数被用来检索在DLL中的输出函数地址。 lpProcName指针指向的函数名,拼写和大小写必须和DLL源代码中的模块定义文件(.DEF)中输出段(EXPORTS)中指定的相同。Win32 API函数的输出名可能不同于你在代码中调用的这些函数名,这个不同被宏隐含在相关的SDK头文件中。如果想得到更多信息,请参考Win32函数原型(Win32 Function Prototypes)。 lpProcName参数能够识别DLL中的函数,通过指定一个与函数相联系的序数值(在.DEF中的EXPORTS段)。GetProcAddress函数验证那个指定的序数值是否在输出的序数1和最高序数值之间(在.DEF中)。函数用这个序数值作为索引从函数表中读函数地址,假如.DEF 文件不连续地定义函数的序数值,如从1到N(N是输出的函数序数值),错误将会发生,GetProcAddress将会返回一个错误的、非空的地址,虽然指定的序数没有对应的函数。 为了防止函数不存在,函数应该通过名字指定而不是序数值。 要求: Windows NT/2000: 要求Windows NT 3.1 或以后版本。 Windows 95/98: 要求Windows 95 或以后版本。 头文件: 在Winbase.h中声明,include Windows.h。 库文件: Use Kernel32.lib。 参看: 动态链接库纵览(Dynamic-Link Libraries Overview), 动态链接库函数(Dynamic-Link Library Functions),FreeLibrary, GetModuleHandle, LoadLibrary 示例代码: 调用KERNEL32.DLL中的RegisterServiceProcess(仅在Windows98中适用) HMODULE hModule=GetModuleHandle("kernel32.dll"); if (hModule) { typedef DWORD (CALLBACK *LPFNREGISTER)(DWORD,DWORD); LPFNREGISTER lpfnRegister; lpfnRegister=(LPFNREGISTER)GetProcAddress(hModule,"RegisterServiceProcess"); if (lpfnRegister) { (*lpfnRegister)(NULL,1L); } }
最近被微步的一篇文章吸引了,里面讲到银狐通过自解压白 exe + 黑 dll 执行截取主线程添加自启动,发现 dll 与普通的免杀有很大的不同,决定自己尝试一下,虽然我之前没有做过白加黑免杀,感觉应该不会太难,但是当我真正尝试的时候才发现很多问题,如:
AdvantechWebAccess(前称BroadWinWebAccess)是研华(Advantech)公司的一套基于浏览器架构的HMI/SCADA软件。该软件支持动态图形显示和实时数据控制,并提供远程控制和管理自动化设备的功能,在工业领域有者广泛的应用。
钩子回调根据SetWindowsHookEx参数1来设定的.比如如果我们设置WH_CBT 那么我们设置的回调函数就是CBT回调. 具体查询MSDN
早在 2020 年 5 月,微软就修复了一个 Windows Print Spooler 权限提升漏洞。该漏洞的编号为 CVE-2020–1048,微软承认 SafeBreach Labs 的 Peleg Hadar 和 Tomer Bar 报告了该安全问题。在补丁发布的同一天,Yarden Shafir和Alex Ionescu发表了关于该漏洞的技术文章。本质上,用户可以通过创建指向磁盘上文件的打印机端口来写入任意文件。在修补漏洞 (CVE-2020–1048) 后,Print Spooler 现在将在添加端口之前检查用户是否有权创建或写入文件。补丁和博文发布一周后,Paolo Stagno(又名 VoidSec)私下向微软披露了 CVE-2020–1048 的绕过方法。该绕过在三个月后的 2020 年 8 月得到修补,微软承认有八个独立实体报告了该漏洞,该漏洞被确定为 CVE-2020-1337。该漏洞的绕过使用目录连接(符号链接)来规避安全检查。假设用户创建了目录C:\MyFolder\并配置了一个打印机端口以指向该文件C:\MyFolder\Port。该操作将被授予,因为确实允许用户创建C:\MyFolder\Port. 现在,如果用户随后变成C:\MyFolder\指向C:\Windows\System32\创建端口之后的目录连接会发生什么?好吧,Spooler 会简单地写入文件C:\Windows\System32\Port。
前一篇()已经说过 CE 是什么,也应用 CE 研究了如何保存微信语音,这篇继续使用 CE 和 OD 来研究一下微信的消息发送接口。
Data Access Component (DAC) Notes ================================= Date: 2007 调试托管代码需要对托管对象及其构造有深入的
InlineHook是一种指令级的函数hook方式,通过直接修改运行时内存的方式替换指令,完全手工的完成hook及跳回操作,理论上可以实现任意位置的hook。平时使用Frida进行Native hook实际上也是用的InlineHook的原理。
映射DLL其实很简单 在内核中使用4个函数即可映射. 而这方面网上资料也很多.这里推荐几个 也不再重复叙述了. 转载链接: 内核映射文件 简而言之只需要熟悉四个API即可. 而核心API其实就三个 分别为如下:
很久以前我写过三篇关于如何编写Windows shellcode(x86 - 32位)的详细博客文章。文章初学者友好,包含很多细节。第一部分解释什么是shellcode,哪些是它的局限性,第二部分解释了PEB(进程环境块),PE(可移植可执行文件)文件格式和ASM(汇编程序)的基础知识,第三部分说明了Windows shellcode如何实际实现。这篇博客文
linux的shellcode就不用说了,直接通过一个int 0x80系统调用,指定想调用的函数的系统调用号(syscall),传入调用函数的参数,即可,懂的都懂。
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。
DLL侧面加载或DLL代理加载允许攻击者滥用合法的和经过签名的可执行文件,以在受感染的系统上执行代码。自2017年以来,这种技术一直很流行。
1、HOOK SERVICE TABLE:HOOK SSDT 这种方法对于拦截 NATIVE API 来说用的比较多。
原文链接:http://blog.csdn.net/humanking7/article/details/78586478
项目中可能会经常用到第三方库,主要是出于程序效率考虑和节约开发时间避免重复造轮子。无论第三方库开源与否,编程语言是否与当前项目一致,我们最终的目的是在当前编程环境中调用库中的方法并得到结果或者借助库中的模块实现某种功能。这个过程会牵涉到很多东西,本篇文章将简要的介绍一下该过程的一些问题。
摘要 在目前流行的Windows操作系统中,设备驱动程序是操纵硬件的最底层软件接口。为了共享在设备驱动程序设计过程中的经验,给出设备驱动程序通知应用程序的5种方法,详细说明每种方法的原理和实现过程,并给出实现的部分核心代码。希望能够给设备驱动程序的设计者提供一些帮助。
从reddit/hackernews/lobsters/meetingcpp知乎等等摘抄一些c++动态
在前面的章节中相信读者已经学会了使用Metasploit工具生成自己的ShellCode代码片段了,本章将继续深入探索关于ShellCode的相关知识体系,ShellCode 通常是指一个原始的可执行代码的有效载荷,攻击者通常会使用这段代码来获得被攻陷系统上的交互Shell的访问权限,而现在用于描述一段自包含的独立的可执行代码片段。ShellCode代码的编写有多种方式,通常会优先使用汇编语言实现,这得益于汇编语言的可控性。
NUKE 13是一款功能强大的电影特效合成软件。Nuke拥有超过200个创意节点,提供您处理数字合成各种挑战所需的一切。这包括行业标准的键控器,旋光仪,矢量绘图工具,颜色校正等等。为你的视频编辑提供帮助!
领取专属 10元无门槛券
手把手带您无忧上云