- 博客(15)
- 资源 (1)
- 收藏
- 关注
原创 SetWindowHook 注入
挂钩原理 Windows下的应用程序大部分都是基于消息机制的,它们都会有一个消息过程函数,根据不同的消息完成不同的功能。 Windows操作系统提供的钩子机制的作用就是用来截获和监视这些系统中的消息。Windows钩子琳琅满目,可以用来应对各种不同的消息。 按照钩子作用的范围不同,又可以分为局部钩子和全局钩子。局部钩子是针对某个线程的; 而全局钩子则是作用于整个系统中基于消息的应用。全局钩子需要使用DLL文件,在DLL中实现相应的钩子函数。 在操作系统中安装全局钩子后,只要进程接收到可以发出钩子的消息,全
2020-05-18 09:31:04
1389
原创 挂起线程注入
挂起线程注入的思想 挂起线程后,获得线程当前的上下背景文。将其中的EIP设置为我们ShellCode的地址,执行完毕后再返回原本的EIP 流程 提权 获得线程的ID 可以通过进程ID CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);te32.th32OwnerProcessID 通过线程ID获得线程句柄 在目标进程空间申请内存 通过SuspendThread挂起线程 通过GetThreadContext获得线程上下背景文 尤其是EIP 构建...
2020-05-17 20:50:28
411
原创 反射Dll注入
上一篇我们介绍了CreateRemoteThread+LoadLibrary进行注入的技巧。但是这种方法实在是太过格式化,所以几乎所有的安全软件都会监控这种方法。所以HarmanySecurity的Stephen Fewer提出了ReflectiveDLL Injection,也就是反射DLL注入。 其和CreateRemoteThread一样也是分为两部分,注入器和注入的DLL。但是注入DLL的装载由我们自主实现,由于反射式注入方式并没有通过LoadLibrary等API来完成DLL的装载,DLL并没有
2020-05-17 17:31:44
826
原创 IAT Hook
IAT Hook 本质就是将PE的导入表中的IAT中指定函数的地址进行替换,从而实现Hook。 我的IAT Hook 是配合CreateRemoteThread进行注入Hook的。关于CreateRemoteThread请参照:CreateRemoteThread // dllmain.cpp : 定义 DLL 应用程序的入口点。 #include "pch.h" #include <tlhelp32.h> #include <imagehlp.h> #pragma comm
2020-05-16 19:22:29
679
原创 CreateRemoteThread RtlCreateUserThread NtCreateThreadEx
函数原型 HANDLE CreateRemoteThread( HANDLE hProcess, // handle to process LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD SIZE_T dwStackSize, // initial stack size LPTHREAD_START_ROUTINE lpStartAddress...
2020-05-16 19:13:51
804
原创 TLS(线程局部存储)
TLS全称线程局部存储器,它用来保存变量或回调函数。 TLS里面的变量和回调函数都在程序入口点(AddressOfEntry)之前执行,也就是说程序在被调试时,还没有在入口点处断下来之前,TLS中的变量和回调函数就已经执行完了,所以TLS可以用作反调试之类的操作。 要在程序中使用TLS,必须为TLS数据单独建一个数据段,用相关数据填充此段,并通知链接器为TLS数据在PE文件头中添加数据。 __declspec (thread)int g_nNum = 0x9597; __declspec (
2020-05-16 15:46:40
809
原创 延迟导入表
延迟导入表,顾名思义就是有一些函数或模块,不需要再程序一启动就加载导入,而是等到真正用到的时候才进行导入的。 延迟导入表和导入表结构基本类似也存在IAT和INT,存在双桥结构,这里不再赘述,关于导入表请参考: 先看一下延迟导入表的结构体。 typedef struct ImgDelayDescr { DWORD grAttrs; // attributes RVA rvaDLLName; // RVA to dll n
2020-05-16 15:46:32
445
原创 重定位表
首先我们要知道PE文件在映射进内存的时候有一个默认基址保存在可选头的ImageBase中 所以每次在映射进内存的时候都会在这个地址进行映射,都是所有的dll的默认基址都是一样的,如果一个dll的默认基址已经被其他dll占据了怎么办。只能映射到别的地方。从而ImageBase中的值就没有了参考价值。 程序中有许多常量值是按照基址为ImageBase编写的, Offset HEX Assembly 10001000 55 push ebp
2020-05-16 15:46:20
480
原创 导出表
导出表大多存在于dll中,其主要目的就是导出一些可供其他exe调用的函数。 导出的函数分两种,一种按名称导出,一种按序号导出。 导出表的大体结构如下: typedef struct _IMAGE_EXPORT_DIRECTORY { DWORD Characteristics; // 1) 保留,恒为0x00000000 DWORD TimeDateStamp; // 2) 时间戳,导出表创建的时间(GMT时间) WORD MajorVersion; // 3)
2020-05-16 15:46:06
1115
原创 导入表
一个PE文件的导入表,简单说的说就是存放了其所调用的函数的地址和相关信息。 数据目录表的第1项(从0开始)就存放了导入表 导入表的结构 struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; } DUMMYUNIONNAME; DWORD TimeDateStamp; DWORD
2020-05-16 15:45:50
674
原创 SSDT inlineHook
上一篇我们介绍了最简单的SSDT,这篇来写一下inlineHook。 所谓的inlineHook就是在内存中修改所需要挂钩函数的前几个字节,让其跳转到我们的fake函数,执行完毕后再跳回去执行原函数,这样的话我们就没有修改SST表里面的内容,而是对函数本身修改。 流程摘自:看雪aniquest 1. 获取服务函数地址: (1)通过全局变量KeServiceDescriptorTable获得SSDT表的起始地址; (2)映射ntdll.dll到ring0空间,获得要Hook的函数的服务索引号; (
2020-05-16 09:39:55
360
1
原创 SSDTHook
准备学习一下Hook技术,从最简单的SSDT Hook开始。 关于SSDT是什么参考:SSDT知识 SSDT Hook的实现思路就是 将SST表中储存的函数地址换成我们的fake函数的地址,并保存原函数地址 执行我们的fake函数后再调用原函数 从而实现在调用指定函数前进行自定义的处理。 首先我们要找到要挂钩的函数的地址,并保存起来 UNICODE_STRING v1; RtlInitUnicodeString(&v1, L"ZwOpenProcess"); __ZwOpen
2020-05-16 09:04:05
300
原创 虚拟地址转换物理地址的相关问题
PAE: 如何开启/关闭PAE CMD 命令:开启:bcdedit /set pae forceenable bcdedit/set{current}nxOptIn 关闭:bcdedit /set pae forcedisable bcdedit/set{current}nxAlwaysOff查看:bcdedit 可以看见修改后的状态 一、未开启PAE Win32通过一个两层表结构来实现地址映射,因为4 GB虚拟地址空间为每个进程私有,相应地,每个进程都维护一套自己的层次...
2020-05-15 20:49:36
628
1
原创 SSDT知识
Windows API的真正实现都是在内核中,那么这些函数是如何组织,实现精准调用的呢?这就需要用到系统服务表(SDT)表。 Windows一共有两张表,每张表大小10h,每个成员占4h。 如图,其中函数地址表每成员四字节,函数参数表每成员一字节。 参数的数值是以字节为单位。 基本上我们使用的都是第一张表 如何找到系统服务表呢? 在Win7 32位中存于 [KTHREAD+0xbc] kd> dt _KTHREAD ntdll!_KTHREAD
2020-05-15 20:42:38
771
原创 Windows系统调用机制
记录一下自己学习Windows系统调用机制的过程。 当调用一个Windows API时,系统会由用户态切入到内核态,从ring3进入到ring0层。下面结合一个例子来学习一下具体过程。 这是一个Demo程序,只调用了CreateFile,我们用OllyDbg看一下,它的具体流程是怎样的。 #include "pch.h" #include <iostream> #include <algorithm> #include <Windows.h>...
2020-05-15 20:37:31
738
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人