2016-03-21 27 views
0

aşağıdaki görevi ele almak C++ kullanın: Ben tarafından kullanılan tüm API fonksiyonları, listesini almak istiyorumnasıl belli süreç tarafından kullanılan tüm API'leri bir listesini alabilirsiniz (Windows 7)

belirli süreç. Sistem süreçleri dahil 32 veya 64 herhangi bir Windows 7 işlemi olabilir. Şimdiye kadar gördüğüm tek çözüm, tüm olası API'leri engellemek için bir çekirdek sürücüsü oluşturmak, onları bir süre dinlemek ve belirli bir işlem olup olmadığını kontrol etmektir. Bu sürecin API'lerinin tam listesini garanti etmez, ama en azından bana bir kısmını vereceğim.

Bu yöntem tehlikeli görünüyor ve etkili değil.

Bu görevle başa çıkmak için daha basit bir yol var mı? Sürecin API'lerinin tam listesini almak için bir yol varsa, sadece bir süre arandığında değil?

Teşekkür ederiz.

cevap

3

Hayır, en azından anlamlı veya genel anlamda mümkün değil.

Kullanıcı tarafından bir dize biçiminde etkileşimli girdiyi alan bir program yazabilirim, daha sonra bu işlevin bir işlevinin adresini bulmak için GetProcAddress kullanır ve bu işlevi çağırır.

İşlev adlarını okumak için etkileşimli girdiyi kullanmanın oldukça sıra dışı olduğunu, ancak bazı harici dosyalardan okumanın oldukça yaygın olduğunu unutmayın.

Ayrıca, bir çekirdek sürücünün de bakmak için doğru yer olmadığını unutmayın. Bunu yapmak istiyorsanız, program tarafından kullanılan DLL'lerin düzeyini kesiştirmek istiyorsunuz.

Bir olasılık, programın statik olarak bağlandığı her DLL için "gölge" DLL dosyası oluşturmaktır. Ardından, LoadLibrary/ numaralı telefonu çağırırsa, bu çağrıları içinde çağıran işlevleri belirlemek için bu çağrıları dinamik olarak engelleyebilirsiniz.

Bu, mutlak bir sonuç almayacaktır, çünkü (yukarıda belirtildiği gibi) çalışma zamanında verileri başka birimde kullanmadığı bir yürütme işlevini bulmak için alabilir.

Varolan bir aracın bunu yapmasını istiyorsanız (yaklaşık olarak), depends.exe'u düşünün. Oldukça uzun bir zaman oldu ve oldukça iyi çalışıyor.