備忘録

備忘録

Detoursを利用してWin32APIの呼び出しをモニタする方法

Ⅰ. はじめに

タイトルの通り「Detoursを利用してWin32APIをモニタする方法」です。

Ⅱ. やり方

1. Detoursをビルドする

https://github.com/microsoft/Detours

2. batファイルを作成する

start.bat

start syelogd.exe /q c:\result.txt
timeout /T 1

rem notepad.exe をモニタする
withdll /d:trcapi64.dll C:\Windows\System32\notepad.exe
3. start.batを実行する

実行結果

※一部抜粋
c:\result.txt

20200725154528235 13592 50.60: trcapi64: 001 +GetCommandLineW()
20200725154528235 13592 50.60: trcapi64: 001 -GetCommandLineW() -> C:\Windows\System32\notepad.exe
20200725154528235 13592 50.60: trcapi64: 001 +CoCreateGuid(7ff6eaac2178)
20200725154528235 13592 50.60: trcapi64: 001   +DeviceIoControl(14c,390008,0,7ff800000000,424a5eed08,30,424a5eece8,0)
20200725154528235 13592 50.60: trcapi64: 001   -DeviceIoControl(,,,,,,,) -> 1
20200725154528235 13592 50.60: trcapi64: 001 -CoCreateGuid() -> 0
20200725154528235 13592 50.60: trcapi64: 001 +CoInitializeEx(0,2)
20200725154528235 13592 50.60: trcapi64: 001   +GetCurrentThreadId()
20200725154528235 13592 50.60: trcapi64: 001   -GetCurrentThreadId() -> 25c8
20200725154528235 13592 50.60: trcapi64: 001   +CreateEventW(0,1,0,<NULL>)
20200725154528235 13592 50.60: trcapi64: 001   -CreateEventW(,,,) -> 15c
20200725154528235 13592 50.60: trcapi64: 001   +CreateEventW(0,0,0,<NULL>)
20200725154528235 13592 50.60: trcapi64: 001   -CreateEventW(,,,) -> 160
20200725154528235 13592 50.60: trcapi64: 001   +CreateEventW(0,0,0,<NULL>)
20200725154528235 13592 50.60: trcapi64: 001   -CreateEventW(,,,) -> 164
20200725154528235 13592 50.60: trcapi64: 001   +GetCurrentThreadId()
20200725154528235 13592 50.60: trcapi64: 001   -GetCurrentThreadId() -> 25c8
20200725154528235 13592 50.60: trcapi64: 001   +GetCurrentThreadId()
20200725154528235 13592 50.60: trcapi64: 001   -GetCurrentThreadId() -> 25c8
20200725154528235 13592 50.60: trcapi64: 001   +RegisterClassW(424a5ef7f0)
20200725154528235 13592 50.60: trcapi64: 001   -RegisterClassW() -> c03c
20200725154528235 13592 50.60: trcapi64: 001   +CreateWindowExW(0,#C03C#,OleMainThreadWndName,7ff888000000,80000000,80000000,4280000000,80000000,fffffffffffffffd,0,7ff8e6f90000,0)
20200725154528236 13592 50.60: trcapi64: 001     +GetCurrentProcessId()