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;}执行结果:
推薦系統(tǒng)
雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載
系統(tǒng)大小:0MB系統(tǒng)類型:WinXP雨林木風(fēng)在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)知名品牌,雨林木風(fēng)WindowsXP其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,是一款穩(wěn)定流暢的系統(tǒng),雨林木風(fēng) winxp下載 純凈版 永久激活 winxp ghost系統(tǒng) sp3 系統(tǒng)下載,有需要的朋友速度下載吧。
系統(tǒng)等級:進(jìn)入下載 >蘿卜家園win7純凈版 ghost系統(tǒng)下載 x64 聯(lián)想電腦專用
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win7蘿卜家園win7純凈版是款非常純凈的win7系統(tǒng),此版本優(yōu)化更新了大量的驅(qū)動(dòng),幫助用戶們進(jìn)行舒適的使用,更加的適合家庭辦公的使用,方便用戶,有需要的用戶們快來下載安裝吧。
系統(tǒng)等級:進(jìn)入下載 >雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載
系統(tǒng)大?。?/em>1.01GB系統(tǒng)類型:WinXP雨林木風(fēng)xp系統(tǒng) xp系統(tǒng)純凈版 winXP ghost xp sp3 純凈版系統(tǒng)下載,雨林木風(fēng)WinXP系統(tǒng)技術(shù)積累雄厚深耕多年,采用了新的系統(tǒng)功能和硬件驅(qū)動(dòng),可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動(dòng)對硬件的加速,加固了系統(tǒng)安全策略,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級:進(jìn)入下載 >蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,(win10企業(yè)版,win10 ghost,win10鏡像),蘿卜家園win10企業(yè)版 免激活密鑰 激活工具 ghost鏡像 X64位系統(tǒng)下載,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園
系統(tǒng)等級:進(jìn)入下載 >蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 V2023 X64位系統(tǒng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win10蘿卜家園windows10游戲版 win10游戲?qū)I(yè)版 ghost X64位 系統(tǒng)下載,蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,打造了國內(nèi)重裝系統(tǒng)行業(yè)的蘿卜家園品牌,其系統(tǒng)口碑得到許多人認(rèn)可,積累了廣大的用戶群體,蘿卜家園win10純凈版是一款穩(wěn)定流暢的系統(tǒng),一直以來都以用戶為中心,是由蘿卜家園win10團(tuán)隊(duì)推出的蘿卜家園win10國內(nèi)鏡像版,基于國內(nèi)用戶的習(xí)慣,做
系統(tǒng)等級:進(jìn)入下載 >windows11下載 蘿卜家園win11專業(yè)版 X64位 V2023官網(wǎng)下載
系統(tǒng)大?。?/em>0MB系統(tǒng)類型:Win11蘿卜家園在系統(tǒng)方面技術(shù)積累雄厚深耕多年,windows11下載 蘿卜家園win11專業(yè)版 X64位 官網(wǎng)正式版可以更好的發(fā)揮系統(tǒng)的性能,優(yōu)化了系統(tǒng)、驅(qū)動(dòng)對硬件的加速,使得軟件在WINDOWS11系統(tǒng)中運(yùn)行得更加流暢,加固了系統(tǒng)安全策略,WINDOWS11系統(tǒng)在家用辦公上跑分表現(xiàn)都是非常優(yōu)秀,完美的兼容各種硬件和軟件,運(yùn)行環(huán)境安全可靠穩(wěn)定。
系統(tǒng)等級:進(jìn)入下載 >
相關(guān)文章
- 有什么電腦自動(dòng)關(guān)機(jī)軟件好用 電腦自動(dòng)關(guān)機(jī)軟件下載推薦
- 微信抽獎(jiǎng)小程序怎么弄,教你微信轉(zhuǎn)盤抽獎(jiǎng)小程序制作方法
- 收集意見建議小程序怎么弄,教你制作匿名收集意見的小程序
- 掃碼助力活動(dòng)怎么弄,微信公眾號助力活動(dòng)的制作步驟
- 海報(bào)裂變活動(dòng)怎么弄,微信公眾號生成海報(bào)裂變活動(dòng)的方法
- 公眾號推廣二維碼怎么弄,微信公眾號推廣二維碼生成方法
- 公眾號裂變活動(dòng)制作,微信公眾號怎么做裂變活動(dòng)
- 登記信息二維碼制作,如何實(shí)現(xiàn)掃碼登記填報(bào)信息
- 登記表怎么弄,教你微信登記表格怎么做
- 參數(shù)二維碼怎么弄,微信公眾號帶參數(shù)二維碼怎么生成
- 報(bào)名二維碼怎么弄,微信公眾號報(bào)名二維碼制作步驟
- 設(shè)置電腦定時(shí)關(guān)機(jī)命令如何更改 電腦定時(shí)關(guān)機(jī)命令設(shè)置方法詳解
- win7怎么自動(dòng)關(guān)機(jī) win7自動(dòng)關(guān)機(jī)時(shí)間設(shè)置方法
- 設(shè)置定時(shí)關(guān)機(jī)命令在哪 電腦設(shè)置定時(shí)關(guān)機(jī)命令
熱門系統(tǒng)
推薦軟件
推薦應(yīng)用
推薦游戲
熱門文章
常用系統(tǒng)
- 1【國慶特獻(xiàn)】深度技術(shù)Windows10純凈版 Win10 GHOST鏡像64位系統(tǒng)下載
- 2windows11旗艦版下載 深度技術(shù)64位完美版 免激活工具下載 GHOST鏡像
- 3電腦公司windows7免費(fèi)版官網(wǎng)下載 ghost x64位 v2022.05 iso鏡像
- 4番茄花園win7家庭版 x64位最新版下載 ghost鏡像 惠普電腦專用下載
- 5青蘋果系統(tǒng)windows11旗艦版 win11 ghost 64位 V2021.10
- 6Windows7穩(wěn)定版下載 系統(tǒng)之家永久免費(fèi) ghost系統(tǒng) ISO鏡像下載
- 7深度系統(tǒng)Win11企業(yè)版正式版裝機(jī)用戶專用 ghost系統(tǒng) ISO鏡像 X64位
- 8風(fēng)林火山win10穩(wěn)定版 x64位最新版下載 Ghost鏡像 免激活工具
- 9雨林木風(fēng)精簡版下載 Windows7純凈版64位 ISO鏡像官網(wǎng)下載 v2023