質問:
イミュニティデバッガーでfastloghookを使用する方法
user2464
2013-07-17 07:26:20 UTC
view on stackexchange narkive permalink

イミュニティデバッガーのpycommandセクションでfastloghookはどのように機能しますか?私はそれを理解することはできません。私が試したすべてが機能せず、このコードが混乱していることを私は知っています。私はfastloghookを真剣に理解していません。これは、bphookが非常にうまく機能したときに私を夢中にさせます。説明が必要です:/

 #!/ usr / bin / env pythonimport immlibimport structfrom immlib import FastLogHookdef main(args): "" "独自のアセンブリコードをフックして実行し、制御を返します" "" imm = immlib.Debugger()#Set nameName = "hippie" fast = imm.getKnowledge(Name)if fast:hook_list = fast.getAllLog()imm.log(str(hook_list))imm.log( "%s "item [1 [0]])#fastloghookfast = immlib.FastLogHook(imm)#をインスタンス化しますtofast.logFunction(imm.getAddress(" msvcrt.strcpy "))#にフックするプライマリアドレス#レジスタとオフセットを取得します。スタックからパラメータを逆参照するか、registerfast.logBaseDisplacement( 'ESP'、0x4)fast.logBaseDisplacement( 'ESP'、0x8)#からの既知のオフセットでデータをキャプチャします。フックがhitfast.logRegisterの場合、特定のレジスタの値を追跡します。 ( "ESP")#フック時に既知のメモリオフセットをログに記録します#fast.logDirectMemory()#hookfast.Hook()を設定します#後で結果を取得できるようにデータを保存しますimm.addKnowledge(Name、fast、force_add = 1)return "LogBPHookインストール済み "`  
1 回答:
PSS
2013-07-17 08:24:33 UTC
view on stackexchange narkive permalink

FastLogHook は、ImmunityDebuggerに付属している13種類のフックの1つです。基本的に、このタイプのフックの目的は、特定のレジスタやメモリ位置をログに記録するために、小さなアセンブリスタブを使用して実行をフック関数に転送することです。 FastLogHook は本質的にPythonオブジェクトであるため、ハードフックを比較的簡単にセットアップできます。

セットアップの定義は次のとおりです。

  debugger = immlib.Debugger()fast_hook = immlib.FasLogHook(debugger)fast_hook.logFunction(address、number_of_arguments)fast_hook.logRegister(register)fast_hook.logDirectMemory(address)fast_hook.logBaseDisplacement(register、offset) 

logFunction()は、フック関数へのジャンプで上書きする必要がある元の命令のアドレスを返します。絶対に必要です。

logRegister() logDirectMemory()、および logBaseDisplacement()は、特定のレジスタの特定の値を追跡するメソッドです。メモリ位置、またはフック時のレジスタからの特定のオフセット。

FastLogHook は実行を中断せず、結果をデバッガオブジェクトにスムーズに記録します。一方、 BpHook は、まったく異なるタイプのフックです。 BpHook が呼び出されると、実行が停止します。

ああ今、私は本当に愚かだと感じています。最初のスクリプト実行後のイミュニティデバッガーがそれ自体でスクリプトを呼び出し、結果をログウィンドウに記録したと思いました。しかし、結果を返すには、スクリプトを再度実行する必要があります。
丁度。スクリプトに関する限り。 logFunctionには、次のプロトタイプlogFunction(address、number_of_arguments)があります。あなたが持っているようにnumber_of_argumentsが何もない場合、それはおそらく関数の出口をフックしようとします。エントリポイントをフックするには、引数の数を2として指定する必要があります。また、logDirectMemory(address)には、ログに記録するアドレスが必要です。あなたもその部分を逃しています。


このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...