番茄系统家园 - 免费重装系统!简单装系统,人人都是装机大师!
当前位置:首页>Win7资讯 > win7 64 ssdt

win7 64 ssdt

来源:番茄系统家园浏览:时间:2021-08-15 07:50:07

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;}执行结果:

相关阅读

  • win7旗舰版产品密钥永久激活分享
  • win7激活密钥教程
  • win7 64 ssdt
  • 推荐系统

    • 雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载

      雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载64位
      系统大小:0MB系统类型:WinXP

      雨林木风在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业知名品牌,雨林木风WindowsXP其系统口碑得到许多人认可,积累了广大的用户群体,是一款稳定流畅的系统,雨林木风 winxp下载 纯净版 永久激活 winxp ghost系统 sp3 系统下载,有需要的朋友速度下载吧。

      系统等级:
      进入下载 >
    • 萝卜家园win7纯净版 ghost系统下载 x64 联想电脑专用

      萝卜家园win7纯净版 ghost系统下载 x64 联想电脑专用64位
      系统大小:0MB系统类型:Win7

      萝卜家园win7纯净版是款非常纯净的win7系统,此版本优化更新了大量的驱动,帮助用户们进行舒适的使用,更加的适合家庭办公的使用,方便用户,有需要的用户们快来下载安装吧。

      系统等级:
      进入下载 >
    • 雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载

      雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载64位
      系统大小:1.01GB系统类型:WinXP

      雨林木风xp系统 xp系统纯净版 winXP ghost xp sp3 纯净版系统下载,雨林木风WinXP系统技术积累雄厚深耕多年,采用了新的系统功能和硬件驱动,可以更好的发挥系统的性能,优化了系统、驱动对硬件的加速,加固了系统安全策略,运行环境安全可靠稳定。

      系统等级:
      进入下载 >
    • 萝卜家园win10企业版 免激活密钥 激活工具 V2023 X64位系统下载

      萝卜家园win10企业版 免激活密钥 激活工具 V2023 X64位系统下载64位
      系统大小:0MB系统类型:Win10

      萝卜家园在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的萝卜家园品牌,(win10企业版,win10 ghost,win10镜像),萝卜家园win10企业版 免激活密钥 激活工具 ghost镜像 X64位系统下载,其系统口碑得到许多人认可,积累了广大的用户群体,萝卜家园win10纯净版是一款稳定流畅的系统,一直以来都以用户为中心,是由萝卜家园win10团队推出的萝卜家园

      系统等级:
      进入下载 >
    • 萝卜家园windows10游戏版 win10游戏专业版 V2023 X64位系统下载

      萝卜家园windows10游戏版 win10游戏专业版 V2023 X64位系统下载64位
      系统大小:0MB系统类型:Win10

      萝卜家园windows10游戏版 win10游戏专业版 ghost X64位 系统下载,萝卜家园在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的萝卜家园品牌,其系统口碑得到许多人认可,积累了广大的用户群体,萝卜家园win10纯净版是一款稳定流畅的系统,一直以来都以用户为中心,是由萝卜家园win10团队推出的萝卜家园win10国内镜像版,基于国内用户的习惯,做

      系统等级:
      进入下载 >
    • windows11下载 萝卜家园win11专业版 X64位 V2023官网下载

      windows11下载 萝卜家园win11专业版 X64位 V2023官网下载64位
      系统大小:0MB系统类型:Win11

      萝卜家园在系统方面技术积累雄厚深耕多年,windows11下载 萝卜家园win11专业版 X64位 官网正式版可以更好的发挥系统的性能,优化了系统、驱动对硬件的加速,使得软件在WINDOWS11系统中运行得更加流畅,加固了系统安全策略,WINDOWS11系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。

      系统等级:
      进入下载 >