ULONG_PTR
ここに理由があります。 DWORD
がx64とx86と互換性がある場合は、成功のために重要です。それを使用してください:x64の代わりにDWORD64
typecastingです。 GetProcAddressはNtSystemDebugControl
のオフセットを返しますntdll
ntdll.dll!NtSystemDebugControl
に関連付けられたアドレスは、typedefで定義されている関数ポインタをポイントします。あなたにここから
は、次のようなポインタを開始することができます。基本的にはこれが何をしたか
NtSystemDebugControl My_NtSystemDebugControl;
if (My_NtSystemDebugControl != NULL) {
My_NtSystemDebugControl(...);
}
は、コンパイル時にそれをリンクすることなく、実行時にAPIを解決しています。アプリケーションがCFF Explorerで表示されている場合、IAT (Import-Address-Table)
にはGetProcAddress
とLoadLibrary
が含まれます。しかし、NtSystemDebugControl
は、実行時に解決されるため、存在しません。
多くのアンチウイルスでヒューリスティックな解析が妨げられ、コンパイル時に大量の無駄なライブラリをリンクしていないため、バイナリサイズが小さくなります。ライブラリ全体ではなく、必要な機能だけを定義することで柔軟性を実現しています。
また、あなたはGetModuleHandle("ntdll")
を使用しようとすると、それははるかに少ない押し付けがましいだとしてLoadLibrary("ntdll")
に入る前に!= NULL
に結果を比較する必要があります!