今天突然想到了一個好玩的免殺思路,原理就是想辦法切斷磁盤特征與內存特征,關於沙盒免殺我尋思着,這樣可以將不同的的DLL映射到內存,在內存中他們的特征也是被切斷的,在注入器上做判斷如果是沙盒則不加載,不是則分別注入三個甚至是更多的DLL,將我們的ShellCode切片力度更細,分配到幾百個甚至上千個DLL上面,做成一個鏈,應該可以,沒嘗試過,抽空可以試試。
如果我們把粒度變得細致,捕捉特征也會變得異常的麻煩,如果被殺也僅僅只是某一個DLL被殺,我們只需要遠程更新一下被殺的DLL即可繼續使用,方便的很,一鍋端的概率應該極低。
編譯這些DLL時,要是能采用不同的編譯器編譯則會更好一些,例如VC6編譯2個,VC7編譯一個,VC8編譯3個。
1.編寫一個腳本,准備好更多的編譯器,然后在腳本中取隨機數,並隨即使用不同版本的編譯器進行編譯。
2.編寫一個腳本,只需要將頭部第一個dll名字固定,其他的DLL文件名稱全部隨機取值,或者是以系統dll隨機命名。
3.我們在這幾百個DLL中內嵌一些系統DLL的頭部信息,或者加入不同的花指令,寫的繞一點,足夠讓分析者通宵了。
上面只是一個思路,完全可以實現,只不過所有的DLL都是在一個進程中的。
我在想,如果能將不同進程之間的DLL進行互通應該效果會更好!
順着這個思路想了一下,能不能自己寫一個進程,然后讓自己寫的這個程序作為一個橋梁使用,架起一座橋,使不同進程之間的DLL可以互相調用,這樣一來,我們的反彈ShellCode就會變得更有趣,跳來跳去很贊,例如UserA.exe中存在一處ShellCode片段,UserB.exe中存在另一處,UserC.exe中也存在,最后都是通過我們的橋連接起來,讓所有的分散的DLL鏈接起來。
單看獨立進程中的獨立DLL沒有任何含義,只有將其鏈接起來才是一個完整的程序。
這個只是我的一個思路,沒有實現,如果有能力就去實現一下,我認為可以實現