win7 64 ssdt
然后是资料里面带的两个SSDT基址的函数:
方法1(这个方法蓝屏了,我直接用的方法2)
(){[13]="\x8B\xF8\xC1\xEF\x07\x83\xE7\x20\x25\xFF\x0F\x00\x00";=();=();;ULONGLONGi,tbl_address,b;for(i=0;iCodeScanEnd-CodeScanStart;i++){if(!memcmp((char*)(ULONGLONG)CodeScanStart+i,(char*)KiSystemServiceStart_pattern,13)){for(b=0;b50;b++){tbl_address=((ULONGLONG)CodeScanStart+i+b);if(*(USHORT*)((ULONGLONG)tbl_address)==(USHORT)0x8d4c)return((LONGLONG)tbl_address+7)+*(LONG*)(tbl_address+3);}}}return0;}方法2
ULONGLONGMyGetKeServiceDescriptorTable64(){PUCHARStartSearchAddress=(PUCHAR)__readmsr(0xC0000082);PUCHAREndSearchAddress=StartSearchAddress+0x500;PUCHARi=NULL;UCHARb1=0,b2=0,b3=0;ULONGtemplong=0;ULONGLONGaddr=0;for(i=StartSearchAddress;iEndSearchAddress;i++){if(MmIsAddressValid(i)MmIsAddressValid(i+1)MmIsAddressValid(i+2)){b1=*i;b2=*(i+1);b3=*(i+2);if(b1==0x4cb2==0x8db3==0x15)//4c8d15{memcpy(templong,i+3,4);addr=(ULONGLONG)templong+(ULONGLONG)i+7;returnaddr;}}}return0;}
接下来就是讲述SSDT函数地址了。在获得地址之前,需要知道SSDT函数的INDEX。获得这个INDEX的方法很简单,直接在RING3读取NTDLL的内容即可。使用WINDBG的方法如下:随便创建一个进程,然后使用WINDBG附加:
可以看到两次反汇编的结果几乎完全相同,唯一不同的地方是第二句。XXh就是此函数的index。知道INDEX之后,就可以计算地址了(资料上也是给了两个方法,建议使用方法2)。
方法1
VOIDInitxxxx(){UCHARstrShellCode[36]="\x48\x8B\xC1\x4C\x8D\x12\x8B\xF8\xC1\xEF\x07\x83\xE7\x20\x4E\x8B\x14\x17\x4D\x63\x1C\x82\x49\x8B\xC3\x49\xC1\xFB\x04\x4D\x03\xD3\x49\x8B\xC2\xC3";/*movrax,rcx;rcx=indexlear10,[rdx];rdx=ssdtmovedi,eaxshredi,7andedi,20hmovr10,qwordptr[r10+rdi]movsxdr11,dwordptr[r10+rax*4]movrax,r11sarr11,4addr10,r11movrax,r10ret*/scfn=ExAllocatePool(NonPagedPool,36);memcpy(scfn,strShellCode,36);}ULONGLONGGetSSDTFunctionAddress64(ULONGLONGNtApiIndex){ULONGLONGret=0;ULONGLONGssdt=MyGetKeServiceDescriptorTable64();if(scfn==NULL)Initxxxx();ret=scfn(NtApiIndex,ssdt);returnret;}
方法2
typedefstruct_SYSTEM_SERVICE_TABLE{PVOIDServiceTableBase;PVOIDServiceCounterTableBase;ULONGLONGNumberOfServices;PVOIDParamTableBase;}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;ULONGLONGGetSSDTFunctionAddress64_2(ULONGLONGIndex){LONGdwTemp=0;ULONGLONGqwTemp=0,stb=0,ret=0;PSYSTEM_SERVICE_TABLEssdt=(PSYSTEM_SERVICE_TABLE)MyGetKeServiceDescriptorTable64();stb=(ULONGLONG)(ssdt-ServiceTableBase);qwTemp=stb+4*Index;dwTemp=*(PLONG)qwTemp;dwTemp=dwTempret=stb+(LONG64)dwTemp;returnret;}
最后,总结一下WIN32和WIN64在SSDT方面的不同(我直接截图过来)。大家可以把SSDT(其实SHADOWSSDT同理)想像成一排保险柜,每个柜子都有编号(从0开始),柜子的长度为四字节,每个柜子里都放了一个LONG数据。但不同的是,WIN32的“柜子”里放的数据是某个函数的绝对地址,而WIN64的“柜子”里放的数据是某个函数的偏移地址。这个偏移地址要经过一定的计算才能变成绝对地址。
测试代码:
#includentddk.h#includewindef.h#include"MyDriver.h"#pragmaintrinsic(__readmsr)typedefUINT64(__fastcall*SCFN)(UINT64,UINT64);SCFNscfn;ULONGLONGMyGetKeServiceDescriptorTable64(){PUCHARStartSearchAddress=(PUCHAR)__readmsr(0xC0000082);PUCHAREndSearchAddress=StartSearchAddress+0x500;PUCHARi=NULL;UCHARb1=0,b2=0,b3=0;ULONGtemplong=0;ULONGLONGaddr=0;for(i=StartSearchAddress;iEndSearchAddress;i++){if(MmIsAddressValid(i)MmIsAddressValid(i+1)MmIsAddressValid(i+2)){b1=*i;b2=*(i+1);b3=*(i+2);if(b1==0x4cb2==0x8db3==0x15)//4c8d15{memcpy(templong,i+3,4);addr=(ULONGLONG)templong+(ULONGLONG)i+7;returnaddr;}}}return0;}VOIDInitxxxx(){UCHARstrShellCode[36]="\x48\x8B\xC1\x4C\x8D\x12\x8B\xF8\xC1\xEF\x07\x83\xE7\x20\x4E\x8B\x14\x17\x4D\x63\x1C\x82\x49\x8B\xC3\x49\xC1\xFB\x04\x4D\x03\xD3\x49\x8B\xC2\xC3";/*movrax,rcx;rcx=indexlear10,[rdx];rdx=ssdtmovedi,eaxshredi,7andedi,20hmovr10,qwordptr[r10+rdi]movsxdr11,dwordptr[r10+rax*4]movrax,r11sarr11,4addr1win7 64 ssdt0,r11movrax,r10ret*/scfn=ExAllocatePool(NonPagedPool,36);memcpy(scfn,strShellCode,36);}ULONGLONGGetSSDTFunctionAddress64(ULONGLONGNtApiIndex){ULONGLONGret=0;ULONGLONGssdt=MyGetKeServiceDescriptorTable64();if(scfn==NULL)Initxxxx();ret=scfn(NtApiIndex,ssdt);returnret;}typedefstruct_SYSTEM_SERVICE_TABLE{PVOIDServiceTableBase;PVOIDServiceCounterTableBase;ULONGLONGNumberOfServices;PVOIDParamTableBase;}SYSTEM_SERVICE_TABLE,*PSYSTEM_SERVICE_TABLE;ULONGLONGGetSSDTFunctionAddress64_2(ULONGLONGIndex){LONGdwTemp=0;ULONGLONGqwTemp=0,stb=0,ret=0;PSYSTEM_SERVICE_TABLEssdt=(PSYSTEM_SERVICE_TABLE)MyGetKeServiceDescriptorTable64();stb=(ULONGLONG)(ssdt-ServiceTableBase);qwTemp=stb+4*Index;dwTemp=*(PLONG)qwTemp;dwTemp=dwTempret=stb+(LONG64)dwTemp;returnret;}VOIDDriverUnload(PDRIVER_OBJECTpDriverObj){UNICODE_STRINGstrLink;RtlInitUnicodeString(strLink,LINK_NAME);IoDeleteSymbolicLink(strLink);IoDeleteDevice(pDriverObj-DeviceObject);}NTSTATUSDispatchCreate(PDEVICE_OBJECTpDevObj,PIRPpIrp){pIrp-IoStatus.Status=STATUS_SUCCESS;pIrp-IoStatus.Information=0;IoCompleteRequest(pIrp,IO_NO_INCREMENT);returnSTATUS_SUCCESS;}NTSTATUSDispatchClose(PDEVICE_OBJECTpDevObj,PIRPpIrp){pIrp-IoStatus.Status=STATUS_SUCCESS;pIrp-IoStatus.Information=0;IoCompleteRequest(pIrp,IO_NO_INCREMENT);returnSTATUS_SUCCESS;}NTSTATUSDispatchIoctl(PDEVICE_OBJECTpDevObj,PIRPpIrp){NTSTATUSstatus=STATUS_INVALID_DEVICE_REQUEST;PIO_STACK_LOCATIONpIrpStack;ULONGuIoControlCode;PVOIDpIoBuffer;ULONGuInSize;ULONGuOutSize;pIrpStack=IoGetCurrentIrpStackLocation(pIrp);uIoControlCode=pIrpStack-Parameters.DeviceIoControl.IoControlCode;pIoBuffer=pIrp-AssociatedIrp.SystemBuffer;uInSize=pIrpStack-Parameters.DeviceIoControl.InputBufferLength;uOutSize=pIrpStack-Parameters.DeviceIoControl.OutputBufferLength;switch(uIoControlCode){;}if(status==STATUS_SUCCESS)pIrp-IoStatus.Information=uOutSize;elsepIrp-IoStatus.Information=0;pIrp-IoStatus.Status=status;IoCompleteRequest(pIrp,IO_NO_INCREMENT);returnstatus;}NTSTATUSDriverEntry(PDRIVER_OBJECTpDriverObj,PUNICODE_STRINGpRegistryString){NTSTATUSstatus=STATUS_SUCCESS;UNICODE_STRINGustrLinkName;UNICODE_STRINGustrDevName;PDEVICE_OBJECTpDevObj;pDriverObj-MajorFunction[IRP_MJ_CREATE]=DispatchCreate;pDriverObj-MajorFunction[IRP_MJ_CLOSE]=DispatchClose;pDriverObj-MajorFunction[IRP_MJ_DEVICE_CONTROL]=DispatchIoctl;pDriverObj-DriverUnload=DriverUnload;RtlInitUnicodeString(ustrDevName,DEVICE_NAME);status=IoCreateDevice(pDriverObj,0,ustrDevName,FILE_DEVICE_UNKNOWN,0,FALSE,pDevObj);if(!NT_SUCCESS(status))returnstatus;if(IoIsWdmVersionAvailable(1,0x10))RtlInitUnicodeString(ustrLinkName,LINK_GLOBAL_NAME);elseRtlInitUnicodeString(ustrLinkName,LINK_NAME);status=IoCreateSymbolicLink(ustrLinkName,ustrDevName);if(!NT_SUCCESS(status)){IoDeleteDevice(pDevObj);returnstatus;}//testDbgPrint("[method1]SSDT:%llx
",MyGetKeServiceDescriptorTable64());DbgPrint("[method1]NtOpenProcess:%llx
",GetSSDTFunctionAddress64(0x23));//WIN7X64HARDCODEDbgPrint("[method1]NtTerminateProcess:%llx
",GetSSDTFunctionAddress64(0x29));//WIN7X64HARDCODEDbgPrint("[method2]NtOpenProcess:%llx
",GetSSDTFunctionAddress64_2(0x23));//WIN7X64HARDCODEDbgPrint("[method2]NtTerminateProcess:%llx
",GetSSDTFunctionAddress64_2(0x29));//WIN7X64HARDCODE//testreturnSTATUS_SUCCESS;}执行结果:
推荐系统
雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载
系统大小:0MB系统类型:WinXP雨林木风在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业知名品牌,雨林木风WindowsXP其系统口碑得到许多人认可,积累了广大的用户群体,是一款稳定流畅的系统,雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载,有需要的朋友速度下载吧。
系统等级:进入下载 >萝卜家园win7纯净版 ghost系统下载 x64 联想电脑专用
系统大小:0MB系统类型:Win7萝卜家园win7纯净版是款非常纯净的win7系统,此版本优化更新了大量的驱动,帮助用户们进行舒适的使用,更加的适合家庭办公的使用,方便用户,有需要的用户们快来下载安装吧。
系统等级:进入下载 >雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载
系统大小:1.01GB系统类型:WinXP雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载,雨林木风WinXP系统技术积累雄厚深耕多年,采用了新的系统功能和硬件驱动,可以更好的发挥系统的性能,优化了系统、驱动对硬件的加速,加固了系统安全策略,运行环境安全可靠稳定。
系统等级:进入下载 >萝卜家园win10企业版 免激活密钥 激活工具 V2023 X64位系统下载
系统大小:0MB系统类型:Win10萝卜家园在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的萝卜家园品牌,(win10企业版,win10 ghost,win10镜像),萝卜家园win10企业版 免激活密钥 激活工具 ghost镜像 X64位系统下载,其系统口碑得到许多人认可,积累了广大的用户群体,萝卜家园win10纯净版是一款稳定流畅的系统,一直以来都以用户为中心,是由萝卜家园win10团队推出的萝卜家园
系统等级:进入下载 >萝卜家园windows10游戏版 win10游戏专业版 V2023 X64位系统下载
系统大小:0MB系统类型:Win10萝卜家园windows10游戏版 win10游戏专业版 ghost X64位 系统下载,萝卜家园在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的萝卜家园品牌,其系统口碑得到许多人认可,积累了广大的用户群体,萝卜家园win10纯净版是一款稳定流畅的系统,一直以来都以用户为中心,是由萝卜家园win10团队推出的萝卜家园win10国内镜像版,基于国内用户的习惯,做
系统等级:进入下载 >windows11下载 萝卜家园win11专业版 X64位 V2023官网下载
系统大小:0MB系统类型:Win11萝卜家园在系统方面技术积累雄厚深耕多年,windows11下载 萝卜家园win11专业版 X64位 官网正式版可以更好的发挥系统的性能,优化了系统、驱动对硬件的加速,使得软件在WINDOWS11系统中运行得更加流畅,加固了系统安全策略,WINDOWS11系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。
系统等级:进入下载 >
相关文章
- 有什么电脑自动关机软件好用 电脑自动关机软件下载推荐
- 微信抽奖小程序怎么弄,教你微信转盘抽奖小程序制作方法
- 收集意见建议小程序怎么弄,教你制作匿名收集意见的小程序
- 扫码助力活动怎么弄,微信公众号助力活动的制作步骤
- 海报裂变活动怎么弄,微信公众号生成海报裂变活动的方法
- 公众号推广二维码怎么弄,微信公众号推广二维码生成方法
- 公众号裂变活动制作,微信公众号怎么做裂变活动
- 登记信息二维码制作,如何实现扫码登记填报信息
- 登记表怎么弄,教你微信登记表格怎么做
- 参数二维码怎么弄,微信公众号带参数二维码怎么生成
- 报名二维码怎么弄,微信公众号报名二维码制作步骤
- 设置电脑定时关机命令如何更改 电脑定时关机命令设置方法详解
- win7怎么自动关机 win7自动关机时间设置方法
- 设置定时关机命令在哪 电脑设置定时关机命令
热门系统
推荐软件
推荐应用
推荐游戏
热门文章
常用系统
- 1【国庆特献】深度技术Windows10纯净版 Win10 GHOST镜像64位系统下载
- 2windows11旗舰版下载 深度技术64位完美版 免激活工具下载 GHOST镜像
- 3电脑公司windows7免费版官网下载 ghost x64位 v2022.05 iso镜像
- 4番茄花园win7家庭版 x64位最新版下载 ghost镜像 惠普电脑专用下载
- 5青苹果系统windows11旗舰版 win11 ghost 64位 V2021.10
- 6Windows7稳定版下载 系统之家永久免费 ghost系统 ISO镜像下载
- 7深度系统Win11企业版正式版装机用户专用 ghost系统 ISO镜像 X64位
- 8风林火山win10稳定版 x64位最新版下载 Ghost镜像 免激活工具
- 9雨林木风精简版下载 Windows7纯净版64位 ISO镜像官网下载 v2023