自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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&gt...

2020-05-15 20:37:31 738

Windows网络与通信(王艳萍)完美pdf

网络学习基础用书,有助于初学者对网络与通信的了解和掌握

2019-01-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除