最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分享Win10 1903過TP的雙機調試問題

 更新時間:2019年11月21日 14:37:21   作者:被遺棄的庸才  
本文給大家分享的是Win10 1903過TP的雙機調試問題,通過實例代碼截圖的形式給大家展示的非常詳細,需要的朋友參考下

差不多我用到的大部分代碼都是從上面cv(Ctrl+c---->Ctrl+v)下來的

1、首先解決The context is partially valid. Only x86 user-mode context is available. 

具體方式是hookKdpTrap

2、 防止安全組件加載失敗

SharedUserData->KdDebuggerEnabled = FALSE;  //防止安全組件加載失敗,SharedUserData這個是一個導出的全局變量直接寫就行

3、XP會清零KdDebuggerEnabled

這里本來是打算做一個定時器,但是還是會導致TesNginx.Sycccccccccccccc出現藍屏,所以只有手動的去修改

4、斷鏈隱藏 kdcom,防止kdcom內存被清空導致和windbg通訊不了

5、XP會檢測KdEnteredDebugger,如果是1就直接藍屏

處理方式是讓他去找其他位置(PUCHAR)KdEnteredDebugger + 0x30;  //據暗中觀察,+0x30 的位置恒為0

做完這些之后基本上就能夠下斷點了,但是其實還是有問題(由于hook了系統函數有一定的幾率會觸發(fā)109錯誤->PathGuard,一開始我也分不清楚,后來慢慢的也了解了)

之后放上一張過了圖片

最后把代碼也帶上吧,.asm文件很簡單簡單的inlinhook就行了

#include <Ntifs.h>
#include <ntimage.h>
extern void debg();
//關閉寫保護
KIRQL WPOFFx64(){
 KIRQL irql = KeRaiseIrqlToDpcLevel();
 UINT64 cr0 = __readcr0();
 cr0 &= 0xfffffffffffeffff;
 __writecr0(cr0);
 _disable();
 return irql;
}
//開啟寫保護
void WPONx64(KIRQL irql){
 UINT64 cr0 = __readcr0();
 cr0 |= 0x10000;
 _enable();
 __writecr0(cr0);
 KeLowerIrql(irql);
}
//這里嘗試過tp的雙機調試,環(huán)境為win10 1903
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//1、首先解決The context is partially valid. Only x86 user-mode context is available. 
/*
nt!KdpTrap:
fffff807`64bfffc8 48895c2408   mov   qword ptr [rsp+8],rbx
fffff807`64bfffcd 4889542410   mov   qword ptr [rsp+10h],rdx
fffff807`64bfffd2 57       push  rdi
fffff807`64bfffd3 4883ec40    sub   rsp,40h
fffff807`64bfffd7 33d2      xor   edx,edx
*/
ULONG64 orgkdt = 0xfffff80166201fc8;
//ULONG64 orgkdt= 0xfffff80764bfffc8;//直接寫硬編碼,這里需要進行修改<-------------------------------------------------------------------------------------------------------------------------------------------------------
NTKERNELAPI UCHAR * PsGetProcessImageFileName(__in PEPROCESS Process);
extern NTSTATUS hdbktrap(IN PKTRAP_FRAME TrapFrame,IN PKEXCEPTION_FRAME ExceptionFrame,IN PEXCEPTION_RECORD ExceptionRecord,IN PCONTEXT ContextRecord,IN KPROCESSOR_MODE PreviousMode,IN BOOLEAN SecondChanceException);
//這里做一個跳轉
VOID ModifyKdpTrap(PVOID myaddress,PVOID targetaddress) {
 KIRQL irql;
 ULONGLONG myfun;
 UCHAR jmp_code[] = "\x48\xB8\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xE0\x00\x00";//mov rax xxx,jmp rax
 myfun = (ULONGLONG)myaddress;//替換成自己的函數地址
 RtlCopyMemory(jmp_code + 2, &myfun, 8);
 //debg();
 irql = WPOFFx64();
 RtlCopyMemory(targetaddress, jmp_code, 12);
 WPONx64(irql);
}
//這里完成hook
NTSTATUS HookKdpTrap(
 IN PKTRAP_FRAME TrapFrame,
 IN PKEXCEPTION_FRAME ExceptionFrame,
 IN PEXCEPTION_RECORD ExceptionRecord,
 IN PCONTEXT ContextRecord,
 IN KPROCESSOR_MODE PreviousMode,
 IN BOOLEAN SecondChanceException){
 
 PEPROCESS hp = PsGetCurrentProcess();
 if (!_stricmp((char *)PsGetProcessImageFileName(hp), "TASLogin.exe")){
 return STATUS_SUCCESS;
 }
 return hdbktrap(TrapFrame, ExceptionFrame, ExceptionRecord, ContextRecord, PreviousMode, SecondChanceException);
}
//這里做一個還原
void UnHookKdpTrap() {
 KIRQL irql;
 UCHAR orignal_code[] = "\x48\x89\x5c\x24\x08\x48\x89\x54\x24\x10\x57\x48\x83\xec\x40";//mov rax xxx,jmp rax
 irql = WPOFFx64();
 RtlCopyMemory(orgkdt, orignal_code, 15);
 WPONx64(irql);
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//2、 防止安全組件加載失敗
VOID DisableKdDebuggerEnabled() {
 SharedUserData->KdDebuggerEnabled = FALSE; //防止安全組件加載失敗
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//3、TP會清零KdDebuggerEnabled,這里做一個每隔一秒的定時器
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//4、斷鏈隱藏 kdcom,防止kdcom內存被清空導致和windbg通訊不了
/*
0: kd> dt _eprocess
nt!_EPROCESS
  +0x000 Pcb       : _KPROCESS
  +0x2e0 ProcessLock   : _EX_PUSH_LOCK
  +0x2e8 UniqueProcessId : Ptr64 Void
  +0x2f0 ActiveProcessLinks : _LIST_ENTRY
*/
PDRIVER_OBJECT pDriverObject = NULL;
typedef struct _KLDR_DATA_TABLE_ENTRY {
 LIST_ENTRY InLoadOrderLinks;
 PVOID ExceptionTable;
 ULONG ExceptionTableSize;
 PVOID GpValue;
 ULONG UnKnow;
 PVOID DllBase;
 PVOID EntryPoint;
 ULONG SizeOfImage;
 UNICODE_STRING FullDllName;
 UNICODE_STRING BaseDllName;
 ULONG Flags;
 USHORT LoadCount;
 USHORT __Unused5;
 PVOID SectionPointer;
 ULONG CheckSum;
 PVOID LoadedImports;
 PVOID PatchInformation;
} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;
VOID HideDriver(){
 PKLDR_DATA_TABLE_ENTRY entry = (PKLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection;
 PKLDR_DATA_TABLE_ENTRY firstentry;
 UNICODE_STRING uniDriverName;
 firstentry = entry;
 // 初始化要隱藏驅動的驅動名
 RtlInitUnicodeString(&uniDriverName, L"kdcom.dll");
 while ((PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink != firstentry){
 if (entry->FullDllName.Buffer != 0){
  if (RtlCompareUnicodeString(&uniDriverName, &(entry->BaseDllName), FALSE) == 0){
  //DbgPrint("隱藏驅動 %ws 成功!\n", entry->BaseDllName.Buffer);
  // 修改 Flink 和 Blink 指針, 以跳過我們要隱藏的驅動
  *((ULONG*)entry->InLoadOrderLinks.Blink) = (ULONG)entry->InLoadOrderLinks.Flink;
  entry->InLoadOrderLinks.Flink->Blink = entry->InLoadOrderLinks.Blink;
  /*
   使被隱藏驅動LIST_ENTRY結構體的Flink, Blink域指向自己
   因為此節(jié)點本來在鏈表中, 那么它鄰接的節(jié)點驅動被卸載時,
   系統會把此節(jié)點的Flink, Blink域指向它相鄰節(jié)點的下一個節(jié)點.
   但是, 它此時已經脫離鏈表了, 如果現在它原本相鄰的節(jié)點驅動被
   卸載了, 那么此節(jié)點的Flink, Blink域將有可能指向無用的地址, 而
   造成隨機性的BSoD.
  */
  entry->InLoadOrderLinks.Flink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
  entry->InLoadOrderLinks.Blink = (LIST_ENTRY*)&(entry->InLoadOrderLinks.Flink);
  break;
  }
 }
 // 鏈表往前走
 entry = (PKLDR_DATA_TABLE_ENTRY)entry->InLoadOrderLinks.Flink;
 }
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
//5、處理TP藍屏
/*
fffff807`642d2210 48895c2420   mov   qword ptr [rsp+20h],rbx
fffff807`642d2215 4488442418   mov   byte ptr [rsp+18h],r8b
fffff807`642d221a 56       push  rsi
fffff807`642d221b 57       push  rdi
fffff807`642d221c 4154      push  r12
fffff807`642d221e 4155      push  r13
fffff807`642d2220 4157      push  r15
fffff807`642d2222 4883ec20    sub   rsp,20h
*/
#define KdEnteredDebugger 0xfffff80165d061e0
//#define KdEnteredDebugger 0xfffff80764704100//直接寫硬編碼,這里需要進行修改<-----------------------------------------------------------------------------------------------------------------------------------------------
extern PMDL hookIoAllocateMdl(__drv_aliasesMem PVOID VirtualAddress, ULONG Length, BOOLEAN SecondaryBuffer, BOOLEAN ChargeQuota, PIRP Irp);
ULONG64 IoAllocateM=0;
//這里做一個跳轉
VOID ModifyIoAllocateMdl(PVOID myaddress, PVOID targetaddress) {
 KIRQL irql;
 ULONGLONG myfun;
 UCHAR jmp_code[] = "\x48\xB8\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xE0\x00\x00";//mov rax xxx,jmp rax
 myfun = (ULONGLONG)myaddress;//替換成自己的函數地址
 RtlCopyMemory(jmp_code + 2, &myfun, 8);
 //debg();
 irql = WPOFFx64();
 RtlCopyMemory(targetaddress, jmp_code, 12);
 WPONx64(irql);
}
PMDL newIoAllocateMdl(__drv_aliasesMem PVOID VirtualAddress, ULONG Length, BOOLEAN SecondaryBuffer, BOOLEAN ChargeQuota, PIRP Irp){
 //debg();
 if(VirtualAddress == KdEnteredDebugger){
 //DbgPrint("[KdEnteredDebugger] address: %p\n", KdEnteredDebugger);
 VirtualAddress = (PUCHAR)KdEnteredDebugger + 0x30; //據暗中觀察,+0x30 的位置恒為0
 }
 return hookIoAllocateMdl(VirtualAddress, Length, SecondaryBuffer, ChargeQuota, Irp);
}
//這里做一個還原
void UnHookIoAllocateMdl() {
 KIRQL irql;
 UCHAR orignal_code[] = "\x48\x89\x5c\x24\x20\x44\x88\x44\x24\x18\x56\x57\x41\x54\x41\x55";
 irql = WPOFFx64();
 RtlCopyMemory(IoAllocateMdl, orignal_code, 15);
 WPONx64(irql);
}
//----------------------------------------------------------------------------------------------------------------------------------------------------------------
VOID DriverUnload(PDRIVER_OBJECT DriverObject) {
 //還原之前的KdpTraphook
 UnHookKdpTrap();
 //還原之前的IoAllocateMdl
 UnHookIoAllocateMdl();
 //取消定時器
 
 DbgPrint("See You !\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegPath) {
 pDriverObject = DriverObject;
 DriverObject->DriverUnload = DriverUnload;
 //這里把這個函數進行了hook
 ModifyKdpTrap(HookKdpTrap, orgkdt);
 //防止安全組件加載失敗
 DisableKdDebuggerEnabled();
 //摘掉kdcom的eprocess
 HideDriver();
 //干掉TP藍屏
 IoAllocateM = (ULONG64)IoAllocateMdl;//得到函數的地址
 ModifyIoAllocateMdl(newIoAllocateMdl, IoAllocateMdl);
 //設置定時器
 return STATUS_SUCCESS;
}

總結

以上所述是小編給大家分享的Win10 1903過TP的雙機調試問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

相關文章

  • MATLAB?plot函數功能及用法詳解

    MATLAB?plot函數功能及用法詳解

    plot 函數語法使用plot繪制二維線圖,這篇文章主要介紹了MATLAB?plot函數詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • 基于chatgpt開發(fā)QQ機器人原理分析

    基于chatgpt開發(fā)QQ機器人原理分析

    ChatGPT是當前自然語言處理領域的重要進展之一,可應用于多種場景,如智能客服、聊天機器人、語音助手等。本文通過調用OpenAI GPT-3模型提供的Completion API來實現一個更加智能的QQ機器人,文中原理代碼介紹的非常詳細,感興趣的同學可以參考下
    2023-05-05
  • DeepSeek模型本地部署的詳細教程

    DeepSeek模型本地部署的詳細教程

    DeepSeek作為一款開源且性能強大的大語言模型,提供了靈活的本地部署方案,讓用戶能夠在本地環(huán)境中高效運行模型,同時保護數據隱私,在本地成功部署DeepSeek模型,并通過Ollama或Open?Web?UI與模型進行交互
    2025-02-02
  • Hadoop 分布式存儲系統 HDFS的實例詳解

    Hadoop 分布式存儲系統 HDFS的實例詳解

    HDFS是Hadoop Distribute File System 的簡稱,也就是Hadoop的一個分布式文件系統。這篇文章主要介紹了Hadoop 分布式存儲系統 HDFS,需要的朋友可以參考下
    2019-06-06
  • Git用戶簽名的修改取消及優(yōu)先級拓展教程

    Git用戶簽名的修改取消及優(yōu)先級拓展教程

    這篇文章主要為大家介紹了Git用戶簽名的修改取消及優(yōu)先級拓展教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04
  • VSCode遠程XHR failed無法連接的問題及解決方案

    VSCode遠程XHR failed無法連接的問題及解決方案

    VSCode進行遠程連接時會檢查服務端的Server運行情況,如未運行則需要下載安裝,在下載過程中可能需要訪問外網,如果外網不通則連接過程失敗,解決方法是手動下載離線安裝包,手動解壓至指定的路徑即可,對VSCode遠程無法連接問題感興趣的朋友一起看看吧
    2024-03-03
  • SSL常用專業(yè)縮略語匯總

    SSL常用專業(yè)縮略語匯總

    這篇文章主要介紹了SSL常用專業(yè)縮略語匯總,需要的朋友可以參考下
    2017-09-09
  • 最新IntelliJ IDEA 2020.2永久激活碼(親測有效)

    最新IntelliJ IDEA 2020.2永久激活碼(親測有效)

    今天一大波朋友反饋idea2020激活碼失效的問題,小編快馬加鞭給大家找到解決方案,本文以IDEA 2020.2.4激活碼破解教程為例給大家詳細介紹,需要idea2020激活碼的朋友快來參考下本文吧
    2020-11-11
  • 字符集和字符編碼(Charset & Encoding)

    字符集和字符編碼(Charset & Encoding)

    相信大家一定碰到過,打開某個網頁,卻顯示一堆像亂碼,如"б&#1031;ЯАзЪСЯ"、"&#65533;????????"?還記得HTTP中的Accept-Charset、Accept-Encoding、Accept-Language、Content-Encoding、Content-Language等消息頭字段?這些就是接下來我們要探討的
    2012-04-04
  • GitHub 熱門:別再用 print 輸出來調試代碼了

    GitHub 熱門:別再用 print 輸出來調試代碼了

    本文給大家分享GitHub 熱門:別再用 print 輸出來調試代碼了的詳細解說,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04

最新評論

淳化县| 渭源县| 修水县| 苏州市| 大英县| 长海县| 九寨沟县| 安仁县| 商南县| 大安市| 南平市| 镇坪县| 宝兴县| 桓仁| 肇东市| 高州市| 噶尔县| 樟树市| 陵川县| 中宁县| 内黄县| 福泉市| 浠水县| 扶沟县| 丽水市| 台北市| 汝州市| 南康市| 仁怀市| 五华县| 治县。| 永定县| 峡江县| 玉屏| 岳普湖县| 如皋市| 房产| 齐齐哈尔市| 中山市| 密云县| 甘孜|