上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 37 下一页
摘要: CheckRemoteDebuggerPresent 也是一个微软提供的反调试函数,该函数可以在本地或者远程进程中使用。函数接收两个参数进程句柄和一个指向布尔值的指针。如果指定的进程正在被调试,则函数会把指向布尔值的指针设为 TRUE,否则设为FALSE。 阅读全文
posted @ 2023-09-27 09:17 lyshark 阅读(209) 评论(0) 推荐(0) 编辑
摘要: ProcessHeap 是`Windows`进程的默认堆,每个进程都有一个默认的堆,用于在进程地址空间中分配内存空间。默认情况下`ProcessHeap`由内核进行初始化,该堆中存在一个未公开的属性,它被设置为加载器为进程分配的第一个堆的位置(进程堆标志),`ProcessHeap`标志位于`PEB`结构中偏移为`0x18`处,第一个堆头部有一个属性字段,这个属性叫做`ForceFlags`属性偏移为`0x44`,该属性为0说明程序没有被调试,非0说明被调试,另外的`Flags`属性为2说明被调试,不为2则说明没有被调试。 阅读全文
posted @ 2023-09-26 12:20 lyshark 阅读(222) 评论(0) 推荐(0) 编辑
摘要: NtGlobalFlag 是一个`Windows`内核全局标记,在`Windows`调试方案中经常用到。这个标记定义了一组系统的调试参数,包括启用或禁用调试技术的开关、造成崩溃的错误代码和处理方式等等。通过改变这个标记,可以在运行时设置和禁用不同的调试技术和错误处理方式,比如调试器只能访问当前进程、只允许用户模式调试、启用特定的错误处理方式等等。但由于`NtGlobalFlag`标记是内核全局标记,其改变会影响整个系统的行为,需要谨慎处理。利用该标记反调试,首先定位`dt -rv ntdll!_TEB`找到`TEB`结构并通过`TEB`找到`PEB`结构,然后找到`+0x068 NtGlobalFlag`,这个位置的`NtGlobalFlag`类似于`BeingDebugged`,如果是调试状态`NtGlobalFlag`的值会是`0x70`,所以可以判断这个标志是否为`0x70`来判断程序是否被调试了,首先我们来使用汇编代码解决。 阅读全文
posted @ 2023-09-26 12:19 lyshark 阅读(195) 评论(0) 推荐(0) 编辑
摘要: BeingDebugged 是`Windows`系统`PEB`结构体中的一个成员,它是一个标志位,用于标识当前进程是否正在被调试。BeingDebugged的值为0表示当前进程未被调试,值为1表示当前进程正在被调试。由于`BeingDebugged`是在`PEB`结构体中存储的,因此可以通过访问`PEB`结构体来获取`BeingDebugged`的值。恶意软件可以使用`BeingDebugged`来判断自己是否正在被调试,以此来防止被反病毒工程师或调试程序进行分析。反病毒工程师们也可以通过检查`BeingDebugged`的值来判断程序是否正被调试从而进行恶意软件的检测和分析。 阅读全文
posted @ 2023-09-26 12:14 lyshark 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 在开始使用`TEB/PEB`获取进程或线程ID之前,我想有必要解释一下这两个名词,PEB指的是进程环境块`(Process Environment Block)`,用于存储进程状态信息和进程所需的各种数据。每个进程都有一个对应的`PEB`结构体。TEB指的是线程环境块`(Thread Environment Block)`,用于存储线程状态信息和线程所需的各种数据。每个线程同样都有一个对应的`TEB`结构体。PEB中包含了进程的代码、数据段指针、进程的环境变量、进程启动参数信息以及加载的dll信息等。PEB结构体中的`FS段寄存器`通常被设置为`0x30`,指向当前进程的`PEB`结构体。其他进程可以通过访问自己的PEB结构体来获取自己的状态和信息。 阅读全文
posted @ 2023-09-25 08:59 lyshark 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 内存进程读写可以让我们访问其他进程的内存空间并读取或修改其中的数据。这种技术通常用于各种调试工具、进程监控工具和反作弊系统等场景。在`Windows`系统中,内存进程读写可以通过一些`API`函数来实现,如`OpenProcess`、`ReadProcessMemory`和`WriteProcessMemory`等。这些函数提供了一种通用的方式来访问其他进程的内存,并且可以用来读取或写入不同类型的数据,例如整数、字节集、浮点数等。 阅读全文
posted @ 2023-09-25 08:59 lyshark 阅读(1312) 评论(1) 推荐(4) 编辑
摘要: 挂起与恢复进程是指暂停或恢复进程的工作状态,以达到一定的控制和管理效果。在 Windows 操作系统中,可以使用系统提供的函数实现进程的挂起和恢复,以达到对进程的控制和调度。需要注意,过度使用进程挂起/恢复操作可能会造成系统性能的降低,导致死锁等问题,因此在使用时应该谨慎而慎重。同时,通过和其他进程之间协同工作,也可以通过更加灵活的方式,实现进程的协调、交互等相应的功能,从而实现更加高效和可靠的进程管理。要实现挂起进程,首先我们需要实现挂起线程,因为挂起进程的实现原理是通过调用`SuspendThread`函数循环将进程内的所有线程全部挂起后实现的,而要实现挂起线程则我们需要先确定指定进程内的线程信息,要实现枚举进程内的线程信息则可以通过以下几个步骤实现。 阅读全文
posted @ 2023-09-24 10:14 lyshark 阅读(587) 评论(0) 推荐(0) 编辑
摘要: 进程状态的判断包括验证进程是否存在,实现方法是通过枚举系统内的所有进程信息,并将该进程名通过`CharLowerBuff`转换为小写,当转换为小写模式后则就可以通过使用`strcmp`函数对比,如果发现继承存在则返回该进程的PID信息,否则返回-1。 阅读全文
posted @ 2023-09-24 10:12 lyshark 阅读(172) 评论(0) 推荐(0) 编辑
摘要: GetTokenInformation 用于检索进程或线程的令牌(Token)信息。Token是一个数据结构,其包含有关进程或线程的安全上下文,代表当前用户或服务的安全标识符和权限信息。GetTokenInformation函数也可以用来获取这些安全信息,通常用于在运行时检查某个进程或线程的权限或安全信息。 阅读全文
posted @ 2023-09-23 10:10 lyshark 阅读(449) 评论(0) 推荐(1) 编辑
摘要: 首先实现枚举当前系统中所有进程信息,枚举该进程的核心点在于使用`CreateToolhelp32Snapshot()`函数,该函数用于创建系统进程和线程快照,它可以捕获当前系统中进程和线程相关的信息(如PID、线程数量、线程ID等),在对这些信息进行处理后,可以获得很多有用的数据,如当前系统中所有正在执行的进程的信息列表,以及每个进程各自的详细信息(如CPU、内存占用量等)。 阅读全文
posted @ 2023-09-23 10:09 lyshark 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 创建新的进程是`Windows`程序开发的重要部分,它可以用于实现许多功能,例如进程间通信、并行处理等。其中,常用的三种创建进程的方式分别是`WinExec()`、`ShellExecute()`和`CreateProcessA()`,这三种创建进程的方式各有特点。如果需要创建简单进程或从其他程序启动新进程,可以使用`WinExec()`或`ShellExecute()`函数。如果需要对新进程进行更精细的配置,例如控制进程参数、指定安全级别、传递特定的命令和参数等,可以使用`CreateProcessA()`函数。 阅读全文
posted @ 2023-09-22 08:54 lyshark 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 在`Windows`操作系统中,每个进程的虚拟地址空间都被划分为若干内存块,每个内存块都具有一些属性,如内存大小、保护模式、类型等。这些属性可以通过`VirtualQueryEx`函数查询得到。该函数可用于查询进程虚拟地址空间中的内存信息的函数。它的作用类似于`Windows`操作系统中的`Task Manager`中的进程选项卡,可以显示出一个进程的内存使用情况、模块列表等信息。使用`VirtualQueryEx`函数,可以枚举一个进程的所有内存块。该函数需要传入要查询的进程的句柄、基地址和一个`MEMORY_BASIC_INFORMATION`结构体指针。它会返回当前内存块的基地址、大小、状态(`free/commit/reserve`)、保护模式等信息。 阅读全文
posted @ 2023-09-22 08:53 lyshark 阅读(575) 评论(1) 推荐(3) 编辑
摘要: 动态内存补丁可以理解为在程序运行时动态地修改程序的内存,在某些时候某些应用程序会带壳运行,而此类程序的机器码只有在内存中被展开时才可以被修改,而想要修改此类应用程序动态补丁将是一个不错的选择,动态补丁的原理是通过`CreateProcess`函数传递`CREATE_SUSPENDED`将程序运行起来并暂停,此时程序会在内存中被解码,当程序被解码后我们则可以通过内存读写实现对特定区域的动态补丁。 阅读全文
posted @ 2023-09-21 09:10 lyshark 阅读(224) 评论(0) 推荐(0) 编辑
摘要: Sunday 算法是一种字符串搜索算法,由`Daniel M.Sunday`于1990年开发,该算法用于在较长的字符串中查找子字符串的位置。算法通过将要搜索的模式的字符与要搜索的字符串的字符进行比较,从模式的最左侧位置开始。如果发现不匹配,则算法将模式向右`滑动`一定数量的位置。这个数字是由当前文本中当前模式位置的最右侧字符确定的。相比于暴力方法,该算法被认为更加高效。 阅读全文
posted @ 2023-09-21 09:10 lyshark 阅读(574) 评论(0) 推荐(1) 编辑
摘要: KMP算法是一种高效的字符串匹配算法,它的核心思想是利用已经匹配成功的子串前缀的信息,避免重复匹配,从而达到提高匹配效率的目的。KMP算法的核心是构建模式串的前缀数组Next,Next数组的意义是:当模式串中的某个字符与主串中的某个字符失配时,Next数组记录了模式串中应该回退到哪个位置,以便继续匹配。Next数组的计算方法是找出模式串每一个前缀中最长的相等前缀和后缀,并记录下来它们的长度,作为Next数组中的对应值。在字符串匹配时,KMP算法从主串和模式串的开头开始逐个字符比较,若发现匹配失败,则根据Next数组中的值进行回退,从失配位置的下一位重新开始比较。这样回退的次数比暴力匹配方式要少得多,因此匹配效率得到了大幅提升。 阅读全文
posted @ 2023-09-20 21:01 lyshark 阅读(572) 评论(1) 推荐(1) 编辑
摘要: CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否发生了变化,如果发生变化则拒绝执行,通过此种方法来保护内存或磁盘文件不会被非法篡改。总之,内存和磁盘中的校验技术都是用于确保数据和程序的完整性和安全性的重要技术。 阅读全文
posted @ 2023-09-19 09:40 lyshark 阅读(536) 评论(0) 推荐(0) 编辑
摘要: CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否发生了变化,如果发生变化则拒绝执行,通过此种方法来保护内存或磁盘文件不会被非法篡改。总之,内存和磁盘中的校验技术都是用于确保数据和程序的完整性和安全性的重要技术。 阅读全文
posted @ 2023-09-19 09:39 lyshark 阅读(245) 评论(1) 推荐(0) 编辑
摘要: CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏。通过运用本校验技术我们可以实现对特定内存区域以及磁盘文件进行完整性检测,并以此来判定特定程序内存是否发生了变化,如果发生变化则拒绝执行,通过此种方法来保护内存或磁盘文件不会被非法篡改。总之,内存和磁盘中的校验技术都是用于确保数据和程序的完整性和安全性的重要技术。 阅读全文
posted @ 2023-09-18 09:02 lyshark 阅读(741) 评论(0) 推荐(0) 编辑
摘要: MinHook是一个轻量级的Hooking库,可以在运行时劫持函数调用。它支持钩子API函数和普通函数,并且可以运行在32位和64位Windows操作系统上。其特点包括易于使用、高性能和低内存占用。MinHook使用纯汇编语言实现,在安装和卸载钩子时只需要短暂地锁定目标线程,因此对目标线程的影响非常小。 阅读全文
posted @ 2023-09-18 09:01 lyshark 阅读(372) 评论(0) 推荐(0) 编辑
摘要: EAT(Export Address Table)用于修改动态链接库(DLL)中导出函数的调用。与`IAT Hook`不同,EAT Hook是在DLL自身中进行钩子操作,而不是修改应用程序的导入表。它的原理是通过修改DLL的导出函数地址,将原本要导出的函数指向另一个自定义的函数。这样,在应用程序调用DLL的导出函数时,实际上会执行自定义的函数。与IAT不同是EAT存放的不是函数地址,而是导出函数地址的偏移,使用时需要加上指定Dll的模块基地址,当Hook挂钩之后,所有试图通过导出表获取函数地址的行为都会受到影响,EATHook并不会直接生效,它只能影响`Hook`之后对该函数地址的获取。 阅读全文
posted @ 2023-09-15 08:51 lyshark 阅读(240) 评论(0) 推荐(0) 编辑
摘要: IAT(Import Address Table)Hook是一种针对Windows操作系统的API Hooking 技术,用于修改应用程序对动态链接库(DLL)中导入函数的调用。IAT是一个数据结构,其中包含了应用程序在运行时使用的导入函数的地址。IAT Hook的原理是通过修改IAT中的函数指针,将原本要调用的函数指向另一个自定义的函数。这样,在应用程序执行时,当调用被钩子的函数时,实际上会执行自定义的函数。通过IAT Hook,我们可以拦截和修改应用程序的函数调用,以实现一些自定义的行为,比如记录日志、修改函数参数或返回值等。 阅读全文
posted @ 2023-09-15 08:48 lyshark 阅读(604) 评论(0) 推荐(2) 编辑
摘要: InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功能增强、开发等领域。本章将重点讲解Hook是如何实现的,并手动封装实现自己的Hook挂钩模板。 阅读全文
posted @ 2023-09-14 12:19 lyshark 阅读(455) 评论(0) 推荐(1) 编辑
摘要: InlineHook 是一种计算机安全编程技术,其原理是在计算机程序执行期间进行拦截、修改、增强现有函数功能。它使用钩子函数(也可以称为回调函数)来截获程序执行的各种事件,并在事件发生前或后进行自定义处理,从而控制或增强程序行为。Hook技术常被用于系统加速、功能增强、等领域。本章将重点讲解Hook是如何实现的,并手动封装实现自己的Hook挂钩模板。首先我们来探索一下Hook技术是如何实现的,如下图所示是一个简单的弹窗程序,当读者点击测试弹窗按钮时则会弹出一个`MessageBox`提示窗口,本次实现目标很简单,通过向目标内注入一个DLL库,实现Hook挂钩住`MessageBox`弹窗,从而实现去除弹窗的目的; 阅读全文
posted @ 2023-09-14 12:15 lyshark 阅读(557) 评论(0) 推荐(1) 编辑
摘要: SetWindowHookEx 是`Windows`系统的一个函数,可用于让一个应用程序安装全局钩子,但读者需要格外注意该方法安装的钩子会由操作系统注入到所有可执行进程内,虽然该注入方式可以用于绕过游戏保护实现注入,但由于其属于全局注入所以所有的进程都会受到影响,而如果想要解决这个问题,则需要在`DllMain()`也就是动态链接库开头位置进行判断,如果是我们所需操作的进程则执行该DLL模块内的功能,如果不是则自动跳过不执行任何操作即可实现指定进程的注入方式。 阅读全文
posted @ 2023-09-13 15:14 lyshark 阅读(282) 评论(0) 推荐(0) 编辑
摘要: Session是`Windows`系统的一个安全特性,该特性引入了针对用户体验提高的安全机制,即拆分Session 0和用户会话,这种拆分`Session 0`和`Session 1`的机制对于提高安全性非常有用,这是因为将桌面服务进程,驱动程序以及其他系统级服务取消了与用户会话的关联,从而限制了攻击者可用的攻击面。由于`DLL`注入在`Session 0`中的注入机制不同于在用户会话中的注入机制,因此需要特别的考虑和处理。如果需要执行DLL注入,必须使用`过度级别安全`机制解决`Session 0`上下文问题,并且在设计安全方案时,必须考虑`Session 0`和`Session 1`之间的区别。 阅读全文
posted @ 2023-09-13 15:14 lyshark 阅读(260) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 37 下一页

loading... | loading...
博客园 - 开发者的网上家园