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機能)
継続するには?