撰寫本系列文章目的在於提升資訊安全之實務能力,
並透過實作體悟到資訊安全領域的重要性,
本系列所有文章之內容皆有一定技術水平,
不得從事非法行為、惡意攻擊等非法活動,
「一切不合法規之行為皆受法律所約束」,
為了避免造成公司、廠商或玩家之間困擾,
所有實作不會拿已上市產品、Online Game 等等來作範例學習,
且部分具有深度、價值之內容,將會提升一定閱讀門檻(不對該技術做分析、解說),
請勿透過本系列文章所學,從事任何非法活動,請不要以身試法!!!
昨天講了第一種隱藏 Process 的方法,
也就是【Day 09】- 今天來創造 Ghost Process(基於斷鏈隱藏 Process 的手法)
這個方法是修改 EProcess 中的 ActiveProcessLinks 來達成隱藏效果,
那麼今日就來講講如何找出透過上述方法隱藏的 Process!
首先開始前要先說一下,
小弟我目前還屬於菜鳥階段,正不斷努力學習中,
若有發現錯誤或不妥之處還請不吝賜教。
歡迎大家多多留言,互相交流交流。
那就開始今天的主題吧~~
大家都知道一個 Process 都有一組「身分證」,
身分證 = EProcess Address
只要拿到 EProcess Address 就能獲得 Process 資訊!
一般在寫 CODE 的時候都是 CALL API 列舉 Process,
拿到 PID 後再 CALL PsLookupProcessByProcessId,
這樣就能順利拿到 EProcess Address。
所以不知道大家有沒有想到方法來找出隱藏的 Process?
1..
2... ... ..
3.... .... .... !
時間到 XD
公布解答:
簡單找出斷鏈隱藏後的 Process 方法如下:
第一種 CALL PsLookupProcessByProcessId 的方法就能拿到 EProcess Address,
要什麼資訊都有~~~
第二種 CALL OpenProcess 能直接在 User mode 實現,
但如果 Process 有保護那就 ...會失敗!
我們來看一下效果:
隱藏前:
隱藏後:
隱藏後在 R0 下,暴力列舉 PID,然後 CALL PsLookupProcessByProcessId:
隱藏後在 R3 下,暴力列舉 PID,然後 CALL OpenProcess:
所以~
要如何加強隱藏技術呢?
既然現在知道以上兩個 API 可以透過 PID 找到 Process 了,
那現在就來看看以上兩個 API 的實作方式,
從中找到方法,再來好好處理這個方法 :D
以下講講懶人逆向法 XDDD(應該不算是逆向 哈哈)
在很久很久以前~不知是哪個年代~
有間電腦科技公司針對某個系統課程,
提供了學習 Windows Kernel 底層運作的機會,
那間電腦科技公司叫做:Microsoft
然後不知道為什麼,
網路上就開始流傳了一份文件,它叫做:WRK v1.2(Windows Research Kernel)
這份 Source code 是可以修改、編譯一個屬於自己的 wrkx86.exe,
是真的可以拿來跑在 Windows Server 2003 、XP 上的 Source code ,
涵蓋內容包含以下:
所以 Source code 在哪裡??
大家自己找吧 >.< 直接放這裡我會怕 XD
找到 PsLookupProcessByProcessId 與 NtOpenProcess 會發現:
所以很明顯惹吧~
明天 Day 11 要來解決、學習的項目就是:PspCidTable
補充1:
如果是 zwquerysysteminformation 能不能找出斷鏈後藏起來的 Process 呢?
答案是:No!
為什麼呢?交給各位找答案了 我就不在這講了 哈哈
補充2:
這份 Source code 這麼久了還適用喔?
答:改了很多東西呢,不過有些東西架構基礎上還是有點像~
好了,這篇就講到這結束了,
大家若有發現哪裡寫得不好或錯誤的地方,都留個言討論一下吧 XD
那我們下期見 o( ̄▽ ̄)ブ