- 博客(63)
- 收藏
- 关注
转载 [dll注入实现IAT勾取] 计算器显示中文
勾取dll源码详解:首先在创建时候来保存原始IAT地址到全局变量,然后通过Hook_iat函数来进行iat函数的勾取BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved){ switch( fdwReason ) { case D...
2019-09-10 18:24:00 877
转载 [记事本API Hook] 调试器 勾取 WriteFile()Api
调试器的工作原理: 调试进程经过注册后,每当被调试者发生调试事件(DebugEvent)时,OS就会暂停其运行,并向调试器报告相应事件,然后调试器对相应事件进行处理,使被调试者继续运行。 具体调试流程如下:对想Hook的进程进行附加操作,使进程成为被调试者。Hook:将API起始的第一个字节修改成0xcc 也就是int3 断点。调用相应API 时,控...
2019-09-10 16:18:00 406
转载 [DLL注入的方法]进程创建期修改PE输入表法
进程创建期修改PE输入表法的原理和静态修改PE输入表完全相同,可以在R3/R0的各个阶段进行干预(必须在主线程运行之前)。1.以读写方式打开目标文件:2 //以读写方式打开目标文件3 HANDLE hFile = CreateFile(szImageFilePath,4 GENERIC_READ|GENERIC_WRITE,...
2019-09-03 15:50:00 423
转载 [DLL注入的方法]静态修改PE输入表法
1.三种DLL加载时机:进程创建加载输入表中的DLL(静态输入)通过调用LoadLibrary主动加载(动态加载)系统预设加载 通过干预输入表处理过程加载目标dll1.静态修改PE输入表法(测试程序 Notepad.exe)准备工作:自行编写一个MsgDLL,到处一个函数Msg();#include "stdafx.h"BOOL...
2019-09-02 18:22:00 843
转载 [1]编程实现加载驱动
加载驱动的标准方法 只有一种,就是利用服务管理器函数加载----SCM 加载法。WIN64驱动模板//[0]包含的头文件。可以加入系统或自己定义的头文件#include <ntddk.h>#include <windef.h>#include<stdlib.h>//[1]定义符号链接,一般来说修改为...
2019-08-14 14:28:00 249
转载 [保护模式]测试一致代码段
1.首先在被调试机器里定义一下代码// r3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <stdio.h>#include <stdlib.h>int gupdate_value = 0;int main(int argc,char * argv[])...
2019-07-28 17:16:00 143
转载 [保护模式]联系1 三环访问高2G
// 三环读高两G.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <windows.h>int _tmain(int argc, _TCHAR* argv[]){ int* gdtAddress = NULL; //定义个变量 getchar(); gdtA...
2019-07-22 14:50:00 209
转载 15.[保护模式]TSS任务门
1.任务门描述符(跨表)本身在IDT 跨表查GDT 的TSS任务门的 S=0, TYPE=0101。2.任务门的执行过程3.为什么有了任务段还要有任务门呢?CPU提供任务门,是为了方便访问任务段。在CPU发生二重错误的时候,会直接跳到 8 号中断,而 8 号中断就是任务门(这是Windows xp 系统设计的任务门),这意味着什么?一旦进入 8 号中...
2019-07-18 16:12:00 227
转载 14.[保护模式]TSS任务段
1.TSS的结构: TSS不是寄存器,它是一个内存;(包含所有寄存器的值)2.TSS的作用:如果切换一个线程那么一定需要切换寄存器;3.CPU怎么找到TSS内存块呢? 通过TaskRegister段寄存器 TaskRegister段寄存器 的值是CPU启动的时候通过GDT表中 TSS Descrptor (段描...
2019-07-18 13:37:00 472
转载 13.[保护模式]陷阱门
1.陷阱门描述符 0D111 F唯一的区别:可屏蔽中断受IF影响转载于:https://www.cnblogs.com/hanhandaren/p/11205734.html
2019-07-18 10:45:00 110
转载 12.[保护模式]中断门
Windows没有使用调用门,但是使用了中断门:<1>系统调用<2> 调试1.IDT 中断描述符表 2.IDT表的构成 3.中断门的描述符 0D110 E除了不能传参数和8-12位,其他与中断门基本无异 转载于:https://www.cnblogs.co...
2019-07-18 10:36:00 95
转载 11.[保护模式]调用门
1.调用门执行流程 指令格式:CALL CS:EIP(EIP是废弃的)执行步骤: 根据CS的值查GDT表,找到对应段描述符,这个描述符是一个调用门在调用门描述符中存储另一个代码段段的选择子选择子指向的段 ,段.BASE +偏移地址 就是真正执行的地址2.门描述符S位一定是0; 只有为0 才是系统段描述符TYPE位为1100的...
2019-07-17 22:21:00 193
转载 10.[保护模式]长调用与短调用
CALL FAR长调用最终需要执行的代码由CS段选择子找到的调用门决定的提权的时候堆栈发生了切换,保留原CS,ESP,SS返回也是RETF总结: 1.跨段调用时,一旦有权限切换,就会切换堆栈; 2.CS的权限如果没有变更,那么只换CS;’CS的权限一旦发生改变,SS的权限也要随之改变,CS与SS的等级必须一样; 3....
2019-07-17 16:33:00 201
转载 9.[保护模式]代码的跨段跳转流程
IRETD图上错了段描述符如果是数据段是不允许跳转的!4.权限检查: 如果非一致代码段,要求CPL == DPL 并且 RPL<=DPL (应用层不能直接访问的) 如果是一致代码段,要求 :CPL >=DPL;(电脑内核提供可以直接有3环访问的(共享段))5.加载段描述符 通过上面的检查...
2019-07-17 15:18:00 129
转载 8.[保护模式]段权限检查
1.CPU的分级 2.如何查看程序处于几环? CPL:当前特权级 CS和SS中存储的段选择子后两位3.DPL:描述符的特权级别: 举例说明:MOV DS,AX 第一步:先判断CS代码段是否有权限执行代码 第二步:如果有权限执行,那么把AX的值复制给DS (ds=ax),如果ds原本就等于ax,那么啥也不做 GDT RPL>...
2019-07-17 14:43:00 192
转载 7.[保护模式]段描述符DB位
B = 0 64K 65535字节B = 1 4G(指定的虚拟4GB空间)如果需要去16位的加个前缀67:1.DB位位于第22位对以下三种情况都有影响:只要是代码段都为B, 只要是数据段都为D情况一: 对CS段的影响 D =1 采用32位寻址方式 D =0 采用16位寻址方式 前缀67 改变寻址方式情况二:对SS段的影...
2019-07-17 11:52:00 171
转载 6.[保护模式]段描述符属性_S位_TYPE域
1.S位S = 1 代码段或者数据段描述符S = 0 系统段描述符注意:DPL在WINDOWS内只会出现两种情况,全是0或者1代码段那么P为已经确定为1S也为1那么DPL 为0 则是9为1 则是F2.TYPE域TYPE域小于8则为数据段大于8则是代码段数据段说明:8A 代表是否被加载如果访问过则为1 反之则为0...
2019-07-14 15:25:00 191
转载 5.[保护模式]段描述符属性_P位_G位
1.P位P = 1 段描述符有效P = 0 段描述符无效2.段描述符与段寄存器的对应关系Struct SegMent{ WORD Selector; //16位段选择子 WORD Attributes; //16位属性 对应的高4字节,从8位开始到23位结束 刚好16字节 DWORD Base; ...
2019-07-12 21:07:00 256
转载 4.Windows 用户态调试模型
转载于:https://www.cnblogs.com/hanhandaren/p/11173014.html
2019-07-11 21:53:00 155
转载 3.硬件断点、陷阱和JTAG
R/W 0 和LEN 0对应断点0线性地址;DR则是调试寄存器硬件断点:基于CPU的调试寄存器可以对代码、数据访问和IO访问设置断点断点被触发时,CPU产生的是1号异常受调试寄存器的数量限制WinDbg 的ba命令设置的便是硬件断点在多处理器系统中,硬件断点是与CPU相关的,也就是说针对一个CPU设置的硬件断点并适用于其他CPU...
2019-07-11 21:46:00 319
转载 2.[保护模式]段寄存器
1.段寄存器结构段寄存器一共96位,但是可见部分只有16位Struct SegMent{ WORD Selector; //16位段选择子 WORD Attributes; //16位属性 DWORD Base; //32位基址 DWORD Limit; //32位段限长}其中红色...
2019-07-10 14:17:00 442
转载 1.[保护模式]
1.什么是保护模式? x86 cpu 的3个模式:实模式、保护模式、和虚拟8086模式。实模式基本运行在16位保护模式基本运行在32位和64位下虚拟8086基本上是为了兼容两者的一种机制电脑开机实际上是先进入实模式而后再进入保护模式的,并非一开机则进入保护模式!2.保护模式有什么特点? 段的机制 页的机制转载于:http...
2019-07-10 11:57:00 81
转载 经典变长指令_SIB
如果查表得出这样的格式[--][--]+disp8,那么说明光靠Table 2-2确定不了,还要往后跟一个字节,SIB转载于:https://www.cnblogs.com/hanhandaren/p/11162519.html
2019-07-10 11:00:00 308
转载 经典变长指令_RegOpcode
如果3-5字段不是描述Reg 而是描述Opcode举例说明:80 65 08 FF猹表步骤:1.第一个字节为80 查 Table-2表,得到对应结构:Eb,ib2.第二个字节为ModR/M字段,拆分为65为:01 100 101Mod 与R/M字段 查Table2-2 得到对应结构:[EBP+DIS8]3.100字段 查表TableA -6得...
2019-07-10 10:24:00 433
转载 经典变长指令_ModR/M
Mod (6.7)位和R/M(0.1.2)位组合查询看下表2-2经典变长指令_ModR/M0x88 MOV Eb,Gb G:通用寄存器0x89 MOV Ev,Gv E:寄存器/内存0x8A MOV Gb,Eb B:字节0x8B MOV Gv,Ev v:Word,doubleword or quadword...
2019-07-09 22:37:00 565
转载 经典定长指令_修改EIP
1. 0x70-0x7FJccf64, Jb - Short-displacement jump on conditionJccf64, Jb -短位移跳跃条件指令后跟着一个字节: 如 70 8B //小于80向下跳,大于80向上跳;8B表示要跳转的地方距离当前位置有多远!如果跳转的地址大于限制位,那么则会自动改成一下编码:E2跳不跳转,取决...
2019-07-09 18:25:00 157
转载 经典定长指令_修改ERX
1.PUSH / POP0x50 push eax0x51 push ecx0x52 push edx0x53 push ebx0x54 push esp0x55 push ebp0x56 push esi0x57 push edi- - - - - - -...
2019-07-09 16:55:00 205
转载 定长指令与变长指令
Opcode 最多3字节,最少1字节,最重要的组成部分1.如歌区分指令定长还是变长? 1.最关键的表格 ---------Intel白皮书(“英特尔® 64 和 IA-32 架构开发人员手册”) A.2.4.1 2.Zz表示法其中 Eb ,lb或者Eb,Gb 相搭的则为变长指令,反之则为定长指令!E A ModR/M byte fo...
2019-07-09 16:16:00 2772
转载 前缀指令
冒号前则为前缀指令2.前缀指令是分组的:1.LOCK 和REPEAT前缀指令: LOCK F0 //多核同步 [锁地址总线] REPNE/REPNZ F2 //重复执行后面的指令 REP/REPZ ...
2019-07-09 13:42:00 506
转载 远程注入代码
1.复制代码的编写原则: 不能有全局变量 不能使用常量字符串 不能使用系统调用 不能嵌套调用其他函数 1 // 远程代码注入.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <windows.h> 6 //自己定义个结构体,...
2019-07-09 11:15:00 473
转载 模块隐藏
1.模块隐藏之断链 TEB它记录的相关线程的信息,每一个线程都有自己的TEB,FS:[0]即是当前线程的TEB. MOV eax,fs:[0] 2. PEB存放进程信息,每个进程都有自己的PEB信息,TEB偏移0x30即当前进程的PEB; MOV eax,fs:[0x30] mov ...
2019-07-07 22:10:00 352
转载 远程线程注入
1.远程注入流程: 在进程A中创建远程线程,将线程函数指向为LoadLibrary();具体实现步骤:在进程A中分配空间,存储“A.DLL”获取LoadLibrary函数的地址创建远程线程,执行LoadLibrary(); 1 // 远程线程注入.cpp : 定义控制台应用程序的入口点。 2 // 3 4 5 #incl...
2019-07-07 19:59:00 124
转载 远程线程
CreateRemoteThread是一个Windows API函数,它能够创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).。HANDLE WINAPI CreateRemoteThread(__in HANDLE hProcess,__in LPSECURITY_ATTRIBUTES lpThreadAttributes,__in SIZE_T dwSta...
2019-07-07 17:56:00 113
转载 内存映射文件
1 // 文件映射.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include "windows.h" 6 7 #define MAPPINGNAME "共享文件" 8 9 /*10 通过文件映射 读写文件11 *参数:lpcFile 文件路径12 *返回值:1 成功...
2019-07-07 17:00:00 71
转载 文件系统
2.卷相关API获取卷 GetLogicalDrives()获取一个所卷的盘符的字符串GetLogicalDrives()获取卷的类型 GetLogicalDrives()获取卷的详细类型 GetVolumeinformation()转载于:https://www.cnblogs.com/hanhandaren/p/11146346.ht...
2019-07-07 15:07:00 76
转载 私有内存的申请与释放
1.私有内存指的是物理页自己用,无法共享2.同样一块内存被多个进程共享时,则为共享内存Map 一、申请内存的两种方式:通过VirtualAlloc/VirtualAllocEx申请的:Private Memory //底层的实现完全一样通过CreateFileMapping映射的:Mapped Memory二、内存的申请与释放:LPVOI...
2019-07-07 12:49:00 247
转载 虚拟内存与物理内存
线性地址都有4G,但未必都能访问所有需要记录,哪些地方转载于:https://www.cnblogs.com/hanhandaren/p/11143967.html
2019-07-06 20:04:00 87
转载 子窗口控件
子窗口控件: Windows提供了几个预定义的窗口类以方便我们的使用,我们一般叫做子窗口控件,简称控件。.控件会自己处理消息,并在自己状态发生改变时通知父窗口预定义的控件有:按钮、复选框、编辑框、静态字符串标签和滚动条等按钮通过一个宏 LOWORD获取按钮wParam低16位如case VM_COMMAND:{ switch(LOWORD(...
2019-07-06 17:57:00 105
转载 第一个Win32程序
// 第一个Win32窗口.cpp : 定义应用程序的入口点。//#include "stdafx.h"#include "第一个Win32窗口.h"#include <Windows.h>#include "stdio.h"HWND hwnd;PCHAR szOutBuff;LRESULT CALLBACK WndProc(H...
2019-07-06 15:31:00 95
转载 消息队列
1.什么是消息? 当我们点击鼠标的时候,或者当我们按下键盘的时候,操作系统都要把这些动作记录下来,存储到一个结构体中,这个结构体就是消息; 消息队列就是一个大型的“链表”消息的产生: 鼠标点击产生一个消息 --》系统捕获消息--》在内核遍历所有的句柄看是谁产生的--》找到后将捕获的消息结构体给遍历到的进程里面的线程; 由于每个线程都有自己的一个消息队...
2019-07-06 14:51:00 74
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人