知人VEHチェーン(さらに、ユーザの異常な分布を探ります)

Windowsカーネルの解析インデックスディレクトリします。https://www.cnblogs.com/onetrainee/p/11675224.html

知人VEHチェーン(さらに、ユーザの異常な分布を探ります) 

  VEHチェーンは、例外処理の過程で非常に重要なメカニズムです。

  KeExceptionDispatcher関数を呼び出すR3カーネル層に再び異常リターンを入力した後、ユーザーへの我々の分析の前に対処しようとします。

  この機能の主な目的は、再びスローゼロリングであることが判明していない場合は、異常な解決策を見つけるVEHを検索することです。

 

、CコードVEHをロードすることによって達成されます。

  次のコードは、VEHプロセスは、グローバル例外ハンドラチェーンです。

  VEHは、カーネルだけでSEHグローバルプロセスの背後にある単一のプロセスを処理することができます。

1  // veh.cpp:このファイルは、「メイン」機能が含まれています。プログラムの実行が開始され、ここで終了します。
2  //
 3  
。4の#include " pch.h " 
5の#include <入出力ストリーム>
 。6の#include <はWindows.h>
 7   LONG NTAPI MyVeH(構造体 _EXCEPTION_POINTERS * exceptionInfo){
 8       // 
9は      // エラーとプロセスc0000094を検出しました。
 10       //
 11       IF(ExceptionInfo-> ExceptionRecord->例外コード= 0xC0000094 ){
 12で          MessageBoxA(NULL、NULL、NULL、NULL);
 13である 
14           // 
15           //方法:アセンブリコード分割2バイト、EIP + 2をスキップすることができる
 16           // 
17           // ExceptionInfo-> ContextRecord-> EIP + = 2;
 18れている 
。19           // 
20である          // 方法2:(ECXレジスタを変更します元のレジスタが0)
 21である          。//
 22で           ExceptionInfo-> ContextRecord-> = ECX 。1 ;
 23である          リターンEXCEPTION_CONTINUE_EXECUTIONであり;
 24  
25       }
 26が      戻りEXCEPTION_CONTINUE_SEARCHであり;
 27  }
 28  のint main()の
 29  {
 30      // 
31である     // 我々の例外VEHハンドラぶら下げヘッド
 32      //
 33     AddVectoredExceptionHandler(TRUE MyVeH);
 34である     
35      // 
36      // ゼロによるアセンブラコード生成c0000094部門
 37      //
 38は     _asm {
 39          MOV EAX、1。
40          MOV ECX、0 
41は、         IDIV ECX
 42である     }
 43である     (GETCHAR);
 44である      STD裁判所未満<< :: " Hello Worldの\ N-!" ;
 45 }

 

 

二、AddVectoredExceptionHandler(ntdll.dllの)逆アセンブリコードの解釈

  暗号化されたカーネル関数MyVeHにそれらをマウントし、なお、特にXOR、算出した現在のシステム時刻によって秘密鍵を使って暗号化。

1.フローチャート

コード分​​解の2解釈

1つの.text:7C9625F9。@ _RtlCallVectoredExceptionHandlersの関数CHUNK OF START 8 
2  の.text:7C9625F9
 3の.text:7C9625F9 loc_7C9625F9:; CODE XREF:RtlCallVectoredExceptionHandlers(X、X)+ 13 ↑J
 4の.text:7C9625F9のMOV EAX、[EBP + arg_0]
 5  の.text:7C9625FCプッシュEBX
 6  の.text:ESIプッシュ7C9625FD
 7の.text:7C9625FEのMOV [EBP + var_8]を、 EAX
 8の.text:7C962601のMOV EAX、[EBP + arg_4]
 9 .text:7C962604のMOV EBXを_RtlpCalloutEntryLockオフセット
 10  の.text:7C962609プッシュEBX
 11の.text:7C96260AのMOV [EBP + var_4]、EAX
 12の.text:7C96260Dコール_RtlEnterCriticalSection @ 4 RtlEnterCriticalSection(X)
 13  の.text:7C962612 MOV ESI、_RtlpCalloutEntryList
 14の.text:7C962618 JMP      短いloc_7C96262F
 15の.text:7C96261A。-------------------------------------------------- -------------------------
 16  の.text:7C96261A
 17.text:7C96261A loc_7C96261A:; CODE XREF:RtlCallVectoredExceptionHandlers(X、X)+ 17D1D↓J
 18の.text:7C96261AプッシュのDWORD PTR [ESI + 8 ]
 19の.text:@ 7C96261Dコール_RtlDecodePointer 4 RtlDecodePointer(X)
 20の.text:7C962622 LEAのECX、[EBP + var_8]
 21  の.text:7C962625プッシュECX
 22  の.text:7C962626コールEAX
 23  の.text:7C962628のCMP EAX、0FFFFFFFFH
 24の.text:7C96262B JZ       短いloc_7C962647
 25 .text:7C96262D MOV ESI、[ESI]
 26  の.text:7C96262F
 27の.text:7C96262F loc_7C96262F:。CODE XREF:RtlCallVectoredExceptionHandlers(X、X)+ 17D04↑J
 28  の.text:7C96262F CMP ESI、EDI
 29の.text:7C962631 JNZ      短いloc_7C96261A
 30の.text:7C962633 MOVの      バイト PTR [EBP + arg_0 + 3 ]、0 
31  の.text。 7C962637
 32の.text:7C962637 loc_7C962637:。CODE XREF:RtlCallVectoredExceptionHandlers(X、X)+ 17D37↓jを
 33 .text:7C962637プッシュEBX
 34の.text:@ 7C962638コール_RtlLeaveCriticalSection 4 RtlLeaveCriticalSection(X)
 35の.text:7C96263D MOVら、バイト PTR [EBP + arg_0 + 3 ]
 36  の.text:7C962640ポップESI
 37  の.text:7C962641ポップEBX
 38  の.text:7C962642 JMP loc_7C94A92F
 39の.text:7C962647。-------------------------------------------------- -------------------------
 40  の.text:7C962647
 41.text:7C962647 loc_7C962647:; CODEのXREF:RtlCallVectoredExceptionHandlers(X、X)+ 17D17↑J
 42の.text:7C962647 MOVの      バイト PTR [EBP + arg_0 + 3 ]、1つの
43の.text:7C96264B JMP      短いloc_7C962637
 44の.text:7C96264B。@ _RtlCallVectoredExceptionHandlersの関数CHUNK OF END 8つの
45の.text:7C96264D。-------------------------------------------------- -------------------------
 46の.text:7C96264D。@ _RtlAddVectoredExceptionHandlerの関数CHUNK OF START 8つの
47  の.text:7C96264D
 48.text:7C96264D loc_7C96264D:; CODEのXREF:RtlAddVectoredExceptionHandler(X、X)+ 3C↑jの
 49  の.text:7C96264D楽章EAX、_RtlpCalloutEntryListBlink。挂在VEH链尾部
 50の.text:7C962652 MOV [ESI + _VECTORED_EXCEPTION_NODE.ListEntry.Flink]、_RtlpCalloutEntryListオフセット
 51の.text:7C962658 MOV [ESI + _VECTORED_EXCEPTION_NODE.ListEntry.Blink]、EAX
 52  の.text:7C96265B MOV [EAX]、ESI
 53  .text:ESI 7C96265D MOV _RtlpCalloutEntryListBlink、
 54  の.text:7C962663 JMP loc_7C956C53
 55.text:7C962663。@ _RtlAddVectoredExceptionHandlerの関数CHUNK OF END 8つの
56の.text:7C962668。-------------------------------------------------- -------------------------
 57の.text:7C962668。@ _RtlRemoveVectoredExceptionHandlerの関数CHUNK OF START 4 
58  7C962668:.textセクション
 59の.text:7C962668 loc_7C962668:; CODE XREF:RtlRemoveVectoredExceptionHandler(X)+ 29 ↑J
 60  の.text:7C962668のMOV EAX、[EAX]
 61の.text:7C96266A JMP loc_7C956C85

 

III。ユーザ異常分布

  私たちはKiUserException分析するために、ユーザーの分布を分析する前に、派遣 ER(ntdll.dllの)機能を、そして今、私たちは、この機能を分析します。

1.フローチャート

 

2.で構成されていない、もう少しコードを逆アセンブル。

 

第四に、安全なVEHメカニズム上の(分析IsValidHander機能)

  継続するには?

 

 

 

 

おすすめ

転載: www.cnblogs.com/onetrainee/p/11801059.html