【xtrap】不正プロテクトの回避や解析方法【npro】
282 :
274:
nProよりも、今梃子摺っているのはガメポプロテクト。回避して升するだけなら造作ないが、GPP.DLLの動作に謎めいた点が幾つもあるので、その解析に苦労してるわ。
nProの場合、カーネル側APIを片っ端からフックしていけば、升ツール等いろいろ起動しても発見されないが、ガメポプロテクトは何故か検出する・・・
GPP.DLLのガードもかなり固い。ガメポプロテクトのカーネルフックに変更を加えようとすると必ずPCが落ちるし、何よりなぞなのが、
そのフックルーチンが何時どのようにロードされているかがさっぱり不明なこと。調べた限り、以下のカーネル関数がフック
nt!NtAllocateVirtualMemory 関数エントリにJMP命令
nt!NtQuerySystemInformation SDTフック
nt!NtReadVirtualMemory 関数エントリにJMP命令
nt!NtWriteVirtualMemory 関数エントリにJMP命令
win32k!NtUserBuildHwndList SDTフック
win32k!NtUserMessageCall SDTフック
win32k!NtUserPostMessage SDTフック
win32k!NtUserSendInput SDTフック
これらのフックルーチンはいずれもGPP.DLLがロードされているメモリ範囲外にある。GPP.DLLがロード直後にExAllocatePoolを呼び出してメモリを確保後、
自分自身をそこに再配置しているところまでは分ったが、それでもフックルーチンは再配置後のメモリ範囲の外にある。
こっちで NtLoadDriver、IoCreateFile、NtSetSystemInformation、NtDeviceIoControlFile、GPP.DLLの IRP_MJ_DEVICE_CONTROL ハンドラ等、その他ドライバの
ロードやドライバとの通信に関連すると思われるカーネル関数を全てフックして監視しているが、それでもフックがどのように設置されているのか検討がつかない。
そもそもGPP.DLLはモジュールが小さいので、全てのフックルーチンを内包するには無理があるし、ディスアセンブルしてもそれらしいもコードは見当たらない。
必ず他のモジュールをロードしているか、直接カーネル領域にフックコードを書き込んでいるかに違いないと思うのだが、それを行っている痕跡がつかめない orz
誰か詳しく解析できた香具師、ヒントをくれ・・・