0

私は C# プログラマーで、リバース エンジニアリング作業を行っていますが、問題が発生しています。

私がやろうとしているのは、ライブラリ関数をリモート プロセスにフックし、データをログに記録することです。

不明なライブラリ (libcef.dll) のカスタム タイプおよび関数定義でAPI Monitorを使用しましたが、定義されている関数をインターセプトできます。

これらの関数をフックする独自のアプリケーションを作成したいと考えています。マネージ EasyHook ライブラリを使用して C# で多くのマーシャリングを行うよりも簡単に思えるので、C++ で EasyHook を使用することにしました。

EasyHook では、フックする関数を正しい関数呼び出し規則、識別子、およびパラメーターで定義する必要があります。

ただし、私が持っている C++ の知識は限られているため、API Monitor 用に (XML ファイルで) 持っている型定義を C++ コードに変換することができます。これを、フックする関数を定義するときに使用できます (これは cef_parse_url です)。

問題は、以下の API モニター型定義 (XML) を C++ コードに変換するにはどうすればよいかということです。

<ApiMonitor>

<Include Filename="Headers\common.h.xml" />

<Module Name="libcef.dll" CallingConvention="CDECL" OnlineHelp="Google">

    <Variable Name="cef_string_t" Type="Struct">
        <Field Type="wchar_t*"    Name="str" />
        <Field Type="size_t"   Name="length" />
        <Field Type="void*"    Name="dtor" />
    </Variable>
    <Variable Name="const cef_string_t" Type="Alias" Base="cef_string_t" />
    <Variable Name="cef_string_t*" Type="Pointer" Base="cef_string_t" />
    <Variable Name="const cef_string_t*" Type="Pointer" Base="const cef_string_t" />

    <Variable Name="cef_urlparts_t" Type="Struct">
        <Field Type="cef_string_t"  Name="spec" />
        <Field Type="cef_string_t"  Name="scheme" />
        <Field Type="cef_string_t"  Name="username" />
        <Field Type="cef_string_t"  Name="password" />
        <Field Type="cef_string_t"  Name="host" />
        <Field Type="cef_string_t"  Name="port" />
        <Field Type="cef_string_t"  Name="origin" />
        <Field Type="cef_string_t"  Name="path" />
        <Field Type="cef_string_t"  Name="query" />
    </Variable>
    <Variable Name="const cef_urlparts_t" Type="Alias" Base="cef_urlparts_t" />
    <Variable Name="cef_urlparts_t*" Type="Pointer" Base="cef_urlparts_t" />
    <Variable Name="const cef_urlparts_t*" Type="Pointer" Base="const cef_urlparts_t" />

    <!-- Parse funcs -->
  
    <Api Name="cef_parse_url">
        <Param Type="const cef_string_t*"   Name="url" />
        <Param Type="cef_urlparts_t*"      Name="parts" />
        <Return Type="int" />
    </Api>

</Module>

誰かが私を助けることができれば、それは私にとって世界を意味します. C++ の中級者であれば、簡単に私を助けることができると思います。

前もって感謝します!

4

1 に答える 1