内核函数
内核函数
Windows内核部分会调用一些内核层的函数。这些函数都以固定前缀开始
Ex:管理层。“Ex”是“Executive”的开头两个字母。
Ke:核心层。“Ke”是“Kernel”的开头两个字母。
HAL:硬件抽象层。“HAL”是“Hardware Abstraction Layer”的缩写。
Ob:对象管理。“Ob”是“Object”的开头两个字母。
MM:内存管理。“MM”是“Memory Manager”的开头两个字母。
Ps:进程(线程)管理。“Ps”表示“Process”。
Se:安全管理。“Se”是“Security”的开头两个字母。
Io:I/O管理。
Fs:文件系统。“Fs”是“File System”的缩写。
Cc:文件缓存管理。“Cc”表示“Cache”。
Cm:系统配置管理。“Cm”是“Configuration Manager”的缩写。
Pp:即插即用管理。“Pp”表示“PnP”。
Rtl:运行时程序库。“Rtl”是“Runtime Library”的缩写。
Zw/Nt:对应于SSDT中的服务函数,例如与文件或者注册表相关的操作函数
Flt:Minifi ...
VEH_Demo
VEH_Demo
12345678910111213141516171819202122#include<windows.h>LONG _stdcall RegVeh(PEXCEPTION_POINTERS ExceptionInfo);//veh异常处理int main(){ PVOID handle = AddVectoredExceptionHandler(TRUE,RegVeh); _asm { xor eax,eax div eax//触发异常 } MessageBox(NULL,L"succ",L"WIN 7",MB_ICONINFORMATION); RemoveVectoredExceptionHandler(handle); return 0;}LONG _stdcall RegVeh(PEXCEPTION_POINTERS ExceptionInfo){ PCONTEXT pContext = ExceptionInfo->ContextRecord; pContext->Eip += 2 ...
InlineHook任务管理器_ZwQuerySystemInformation_隐藏进程
InlineHook任务管理器_ZwQuerySystemInformation_隐藏进程
hook步骤:
查找目标函数地址
修改目标函数第一条指令跳转到我们构造的函数
卸载掉钩子,执行正常的目标函数
过滤掉特定信息后返回
hook代码如下
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475#include<windows.h>#include<Winternl.h>BOOL hook_code();BOOL unHook_code();NTSTATUS WINAPI NewZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS SystemInformationClass,PVOID SystemInformation,ULONG SystemInformationLength ...
双机调试 WinDbg调试VMware虚拟机Windows7及更高版本(详细流程)
双机调试 WinDbg调试VMware虚拟机Windows7及更高版本(详细流程)
一、关闭win7(或更高版本)虚拟机,更改配置。
注意这里要将虚拟机关闭,挂起时无法更改配置。按照图示添加一个串行端口
接下来按照图示设置所创建的串行端口配置
二、打开虚拟机,修改配置以管理员身份运行CMD,执行以下命令:
1bcdedit /dbgsettings serial baudrate:115200 debugport:2
这里debugport:2这个数值取决于第一步时所创建的串行端口号,如本次例子中创建的“串行端口 2”。
1bcdedit /copy {current} /d yeanhoo
接下执行该条命令生成开机选项名称,如“yeanhoo”。
执行完以上命令行,反回结果如图所示,复制{}内的GUID,然后执行如下命令,注意接下来执行的命令中{}内的GUID是上条命令返回的GUID,即红框内数字。
1bcdedit /displayorder {current} {ad31eae8-f12e-1 ...
双机调试 WinDbg调试VMware虚拟机winXP(详细流程)
双机调试 WinDbg调试VMware虚拟机winXP(详细流程)
一、打开xp C盘显示隐藏文件,编辑boot.ini
二、在最后一行添加上配置信息
1multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=“Microsoft Windows XP Professional” /noexecute=optin /fastdetect /debug /debugport=com1 /baidrate=115200
三、关闭虚拟机、修改虚拟机设置、如果硬件中存在打印机,移除该打印机
四、添加串行端口
五、编辑串口配置信息
六、在WinDbg快捷方式上右键–>属性 在目标栏追加参数
1-b -k com:pipe,port=\\.\pipe\com,resets=0
七、启动虚拟机,选调试模式
八、打开WinDbg ,自动停留在INT 3中断处
Windbg配置环境变量、符号下载、加载符号
Windbg配置环境变量、符号下载、加载符号
一、环境变量中添加Windbg的安装目录:我的电脑–>右键属性–>高级系统设置–>高级–>环境变量–>系统变量–>Path;在path里添加上Windbg.exe所在路径,如D:\WinDDK\7600.16385.1\Debuggers
二、环境变量添加符号下载地址:我的电脑–>右键属性–>高级系统设置–>高级–>环境变量–>系统变量–>新建;新建一个系统变量命名为_NT_SYMBOL_PATH。值为srv*d:\symbolsxp*http://msdl.microsoft.com/download/symbols
三、环境变量添加代理地址+本地全局模式:我的电脑–>右键属性–>高级系统设置–>高级–>环境变量–>系统变量–>新建;新建一个系统变量命名为_NT_SYMBOL_PROXY。值为自己代理服务器的地址:端口;然后再将本地代理打开或调至全局模式,服务器地址:端口保持与环境变量中的一致。
完成上述步骤之后,就可以下 ...
汇编语言条件跳转指令详解
汇编语言条件跳转指令详解
指令
解释
jz
如果ZF=1,跳转至指定位置
jnz
如果ZF=0,跳转至制定位置
je
与jz类似,但通常在一条cmp指令后使用。如果源操作数与目的操作数相等,则跳转
jne
与jnz类似,但通常在一条cmp指令后使用。如果源操作数与目的操作数不相等,则跳转
jg
cmp指令做有符号比较之后,如果目的操作数大于原操作数,跳转
jge
cmp指令做有符号比较之后,如果目的操作数大于或等于原操作数,跳转
ja
与jg类似,但使用无符号比较
jae
与jge类似,但使用无符号比较
jl
cmp指令做有符号比较之后,如果目的操作数小于原操作数,则跳转
jle
cmp指令做有符号比较之后,如果目的操作数小于或等于原操作数,则跳转
jb
与jl类似,但使用无符号比较
jbe
与jle类似,但使用无符号比较
jo
如果前一条指令置位了溢出标志位(OF=1),则跳转
js
如果符号标志位被置位(SF=1),则跳转
jecxz
如果ECX=0,则跳转
汇编语言编写shellcode实现弹窗计算器
汇编语言编写shellcode实现弹窗计算器使用汇编语言编写shellcode,调用WinExec实现弹出计算器,汇编代码如下:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687.386.model flat,stdcall; 代码区域.codemain: push ebp mov ebp,esp sub esp,20h; 开辟栈空间; 获取Kernel32基址 assume fs:nothing mov eax,[fs:30h]; peb结构所在地址 mov eax,[eax+0Ch]; Ldr mov eax,[eax+1Ch]; 指向ntdll mov eax,[eax]; 指向kernelbase mov eax,[eax]; 指向kernel32 mov eax,[eax+08h]; BaseAdd ...
拍进程快照,代码实现遍历windows进程
拍进程快照,代码实现遍历windows进程
步骤:
1.CreateToolhelp32Snapshot拍摄快照2.Process32First,Process32Next枚举进程信息
代码:
12345678910111213141516171819202122232425262728293031#include <stdio.h>#include <windows.h>#include <Tlhelp32.h>BOOL EnumProcess();void main(){ EnumProcess(); getchar();}BOOL EnumProcess(){ PROCESSENTRY32 pe32 = {0}; pe32.dwSize = sizeof(PROCESSENTRY32); HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//拍进程快照 if (INVALID_HANDLE_VAL ...
代码实现exe程序释放资源内容到文件
代码实现exe程序释放资源内容到文件代码实现,将资源内容独立释放出来,恶意程序常用(隐藏恶意代码)步骤:
1.添加资源,导入资源内容2.查找资源,加载资源,锁定资源3.保存到文件
在项目解决方案中看到名为资源文件的空文件夹,右键添加–>资源
单击自定义,然后在弹出的资源类型框中随便自己想要命名的类型(例如MYRES)
然后双击所创建的类型名或点击导入
导入自定义资源内容
编写代码释放资源到文件。这里需要注意,如果不清楚FreeResource函数第二个参数(资源ID),可以在资源头文件里查看,或者可以使用StudyPE等工具查看资源ID。如图6F就是资源ID
代码部分
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758#include<stdio.h>#include<windows.h>BOOL FreeResource(UINT,PCHAR,PCHAR);v ...