Ⅰ. はじめに
タイトルの通り「Detoursを利用してWin32APIをモニタする方法」です。
Ⅱ. やり方
1. 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()