X64
qq_857305819
这个作者很懒,什么都没留下…
展开
-
x64函数参数超过4个的栈分析
写一个测试函数,关闭优化,编译为release版本int test(int a,int b,int c,int d,int e,int f){ return a + b + c + d + e + f;}.text:00000001400010B0 ; void t1(void).text:00000001400010B0 ?t1@@YAXXZ proc near ; CODE XREF: main+1C↓p.text:00000001400010B0原创 2021-10-25 16:28:13 · 433 阅读 · 0 评论 -
x64 内核 InlineHook
需要使用LDE反汇编引擎#include<ntddk.h>#include"LDE.h"#define kmalloc(_s) ExAllocatePoolWithTag(NonPagedPool, _s, 'SYSW')#define kfree(_p) ExFreePool(_p)KIRQL WPOFFx64(){ KIRQL irql = KeRaiseIrqlToDpcLevel(); UINT64 cr0 = __readcr0(); cr0 &= 0xff原创 2021-06-27 21:40:52 · 865 阅读 · 0 评论 -
apisetschema.dll 导入表中的dll映射关系解析
#include"stdafx.h"#include <windows.h>#include <stdio.h>#include <vector>#define uint16_t USHORT#define uint32_t DWORDtypedef struct _UNICODE_STRING{ uint16_t Length; uint16_t MaximumLength; _Field_size_bytes_part_(MaximumLengt原创 2021-06-13 20:11:10 · 317 阅读 · 0 评论 -
MDL解析
// 1. 包含提供内核结构相关的头文件#include <ntddk.h>PMDL mdl;// 驱动卸载的回调函数,会在卸载的时候被调用VOID DriverUnload(PDRIVER_OBJECT DriverObject){ //释放MDL IoFreeMdl(mdl); UNREFERENCED_PARAMETER(DriverObject);}// 2. 提供驱动程序的入口函数NTSTATUS DriverEntry( PDRIVER_OBJECT Dr原创 2021-04-07 18:49:14 · 377 阅读 · 0 评论 -
64位系统的KPCR结构
查看CPU有多少核1: kd> dd KeNumberProcessorsfffff807`33979384 00000004 01000000 000a3008 884b0640fffff807`33979394 ffffbd84 0002625a 00002120 884632c0fffff807`339793a4 ffffbd84 00000000 00000000 884ea220fffff807`339793b4 ffffbd84 884b1ae0 ffffbd84 000原创 2021-02-15 01:10:16 · 463 阅读 · 0 评论 -
使用PsTerminateThreadByPointer强制结束进程
该函数会在内部检查是否是系统线程,如果是系统线程不会结束它.#include<ntifs.h>#include <ntddk.h>//根据进程结构获得进程名指针 需要自己申明一下。ULONG64 g_kernelModuleBase = 0;typedef struct _LDR_DATA_TABLE_ENTRY{ LIST_ENTRY InLoadOrderLinks; LIST_ENTRY InMemoryOrderLinks; LIST_ENTRY I原创 2021-01-30 23:20:29 · 478 阅读 · 0 评论 -
64位下暴力搜索硬编码
ULONG64 g_kernelModuleBase=0;typedef struct _LDR_DATA_TABLE_ENTRY{ LIST_ENTRY InLoadOrderLinks; LIST_ENTRY InMemoryOrderLinks; LIST_ENTRY InInitializationOrderLinks; PVOID DllBase; PVOID EntryPoint; ULONG SizeOfImage; UNICODE_STRING FullDllName;原创 2021-01-30 23:20:43 · 273 阅读 · 0 评论 -
64位内联汇编
右键点击项目->生成依赖项->自定义 把masm勾选上在源文件里面添加一个demo.asm,导出一个函数 Rebootpublic Reboot.code Reboot: mov al,0feh out 64h,al retend在需要使用此函数的文件中加上extern VOID Reboot();#include<ntddk.h>extern VOID Reboot();VOID DriverUnload(IN PDRIVER_OBJECT pD原创 2020-08-28 21:39:54 · 1576 阅读 · 0 评论 -
IA-32e模式
64位下的CS段描述符L:如果是64位模式,该标志位164位下强制平坦模式,段描述符不再描述段的基址和LIMIT。WINDBG下使用dg+偏移来解析段描述符TSS段描述符TSS在64位下是128位的保存的是0环的栈指针 RSP0IDT表也扩展为128位WINDBG中查看IDT dqidtr查看具体的中断号 !idt 0...原创 2020-09-29 17:12:25 · 569 阅读 · 0 评论 -
虚拟机WIN10 无法连接的问题
刚装好后连接成功了,但是第二次运行却发现无法连接。 搞了半天 发现在启动时关闭驱动强制签名就能连接了。原创 2020-09-29 15:59:01 · 198 阅读 · 0 评论 -
系统正常运行模式CE读取内核内存
打开CE设置。 都勾选上附加到一个程序上然后点击查看内存在以下区域点击右键-》转到地址输入需要查看的内核地址就可以了。原创 2020-09-29 13:57:20 · 1392 阅读 · 1 评论 -
X64-对齐和栈帧分析
为了程序稳定性,自己在分配栈空间时尽量对齐0x10例如: sub esp,0x30可以看出即使我在test里面调用了一个没有参数的函数test1。栈也提升了0x20下面是函数的堆栈图原创 2020-09-29 11:51:24 · 943 阅读 · 0 评论 -
X64调用约定
fastcall在64位下只有一种调用约定,类似于fastcall,要写其他的也不会出错,这主要是为了兼容以前定义的32的头文件。前4个参数使用 rcx rdx r8 r9传递写一个没有参数没有返回值的函数反汇编如下,可以看出不再像32位一样push ebp mov ebp,esp.而是只保存了rdi就推出了。1个参数一个参数的情况下采用ecx传参参数大于32位采用rcx传参函数里面把参数复制到了rsp+84个参数的情况参数采用ecx,edx,r8d,r9d参数大于32位采原创 2020-09-29 10:49:55 · 2217 阅读 · 0 评论 -
x64寄存器
64位地址x64中,地址采用64位长度来表示,其中高16位是符号位.取值要么是0000,要么是FFFF.其它情况无效剩下的48位来表示地址.通用寄存器bpl->bp->ebp->rbp (从8位到64位)r8b->r8w->r8d->r8 (从8位到64位)调用约定...原创 2020-09-22 17:35:24 · 2083 阅读 · 0 评论