Detours ile Windows API Hook

Gurhan Polat
2 min readAug 9, 2019

--

Merhaba arkadaslar,

Basliktan da anlasilacagi gibi Microsoft tarafindan sirf bu is icin yazilan Detours kutuphanesi kullanarak windows api hook nasil yapiliyor onu inceleyecegiz.

Bu incelemeyi yaparken, hedef olarak explorer.exe’yi belirledim. explorer.exe’ye Detours kutuphanesi kullanarak olusturacagimiz ve Hook islemini yapan dll’imizi inject edip, explorer.exe’nin kullandigi CreateFileW, DeleteFileW, CreateProcessW api cagrilarina hook atarak, icerisinde “APIHook” gecen dosyalar uzerinde explorer.exe’nin islem yapamamasini saglayacagiz.

https://github.com/microsoft/Detours adresinden kutuphaneyi zip olarak kendi bilgisayarimiza yukluyoruz. (Clone or download -> Download ZIP)

Bu noktada islemci turune gore lib elde edebilmek icin dogru “Native Tools Command Prompt” u acmak onemli. Ben x64 kullandigim icin (ve hedef makinem de kendi makinem oldugu icin) “x64 Native Tools Command Prompt” u aciyorum.

Daha sonrasinda acilan komut ekranindan, cd komutu ile indirip cikartmis oldugumuz klasore gecip, derleme islemini baslatmak icin nmake komutunu veriyoruz.

Velhasil, sonunda “C:\Users\gurhanpolat\Desktop\Detours-master\lib.X64” klasoru altinda detours.lib dosyasini elde ediyoruz.

Sonrasinda Visual Studio yardimi ile yeni bir solution acip icine, APIHook (Dynamic Library (.dll)) ve APIHookInjectDLL (Application (.exe)) projelerini ekliyoruz.

APIHookInjectDLL.exe’nin amaci, calistigi zaman explorer.exe yi bulup APIHook.dll’i ona inject etmek.

APIHookInjectDLL.main.cpp

APIHook.dll’in amaci ise, LoadLibrary ile load edildiginde (bu bizim durumumuzda injection gerceklestiginde) inject oldugu process’in Virtual Address Space’inde CreateFileW, DeleteFileW, CreateProcessW API cagrilarini, kendi uzerindeki MY_CreateFileW, MY_DeleteFileW, MY_CreateProcessW fonksiyonlarina yonlendirmek.

APIHook.dll.cpp

APIHook.dll.cpp icinde, MY_ ile baslayan ve gercekleri yerine gecen fonksiyonlarda, amacimiz, icinde APIHook gecen dosya isimleri ile islem yapilmasini onlemek. Bu amacla hepsi asagidaki kod yapisina benzer..

Asagiya iki adet gif birakiyorum,

1-) APIHook.dll explorer.exe’ye inject edilmeden once

2-) APIHook.dll explorer.exe’ye inject edildikten sonra

Proje ve kaynak kod dosyalari icin bkz: https://github.com/adaskar/APIHook

API Hook kutuphaneleri karsilastirmalari icin bkz: https://github.com/frida/frida/wiki/Comparison-of-function-hooking-libraries

API Hooking hakkinda inceleme icin bkz: https://www.codeproject.com/Articles/2082/API-hooking-revealed

--

--