安全之路 —— 利用APC隊列實現跨進程註入
阿新 • • 發佈:2019-03-23
single obj 介紹 自己 for call 經典的 rap wait
簡介
在之前的文章中筆者曾經為大家介紹過使用CreateRemoteThread函數來實現遠程線程註入,毫無疑問最經典的註入方式,但也因為如此,這種方式到今天已經幾乎被所有安全軟件所防禦。所以今天筆者要介紹的是一種相對比較“另類”的方式,被稱作“APC註入”。APC(Asynchronous Procedure Call),全稱為異步過程調用,指的是函數在特定線程中被異步執行。簡單地說,在Windows操作系統中,每一個進程的每一個線程都有自己的APC隊列,可以使用QueueUserAPC函數把一個APC函數壓入APC隊列中。當處於用戶模式的APC被壓入到線程APC隊列後,線程並不會立刻執行壓入的APC函數,而是要等到線程處於可通知狀態
才會執行,也就是說,只有當一個線程內部調用WaitForSingleObject, WaitForMultiObjects, SleepEx等函數將自己處於掛起狀態時,才會執行APC隊列函數,執行順序與普通隊列相同,先進先出(FIFO),在整個執行過程中,線程並無任何異常舉動,不容易被察覺,但缺點是對於單線程程序一般不存在掛起狀態,所以APC註入對於這類程序沒有明顯效果。
代碼樣例
安全之路 —— 利用APC隊列實現跨進程註入