iT邦幫忙

2021 iThome 鐵人賽

DAY 8
1
Security

打通任督二脈奇幻之旅 - 用 30 天探索 Windows 底層運作原理系列 第 8

【Day 08】- 見鬼了(っ °Д °;)っ我明明沒有啟動這支程式…

Agenda

  • 資安宣言
  • 測試環境與工具
  • 學習目標
  • 技術原理與程式碼
  • 下期預告

資安宣言


撰寫本系列文章目的在於提升資訊安全之實務能力,
並透過實作體悟到資訊安全領域的重要性,
本系列所有文章之內容皆有一定技術水平,
不得從事非法行為、惡意攻擊等非法活動,
「一切不合法規之行為皆受法律所約束」,
為了避免造成公司、廠商或玩家之間困擾,
所有實作不會拿已上市產品、Online Game 等等來作範例學習,
且部分具有深度、價值之內容,將會提升一定閱讀門檻(不對該技術做分析、解說),
請勿透過本系列文章所學,從事任何非法活動,請不要以身試法!!!


測試環境與工具

學習目標

  • 1.了解 EProcess 中 Process 的相關資訊
  • 2.修改 PEB 達到偽裝成別的 Process 的效果

技術原理與程式碼

首先開始前要先說一下,
小弟我目前還屬於菜鳥階段,正不斷努力學習中,
若有發現錯誤或不妥之處還請不吝賜教。
歡迎大家多多留言,互相交流交流。

今天實作的內容僅僅是表面上的偽裝,
能做到的效果只能騙過一般人使用者,
在隱藏的技術層面上,我個人認為並沒有任何價值 XD

這開始之前,先來講一段小故事,
本人親身經歷,此生無法忘記這件趣事!
(沒時間、沒興趣的可以直接略過ㄛ)

在很久很久很久很久以前,有個普通老百姓(就是我),
在某一次的研究、破解別人寫好的外掛程式時,
發現了一樣厲害的技術,我稱它為「防封詐騙術」。

大家都知道遊戲都有「反外掛系統」,
某一次有個外掛程式聲稱:
「使用本輔助 100% 不會被鎖帳號,
原因是本輔助使用了目前最高級的隱藏技術,
能讓反外掛系統無法正常運作,能安心遊玩一整天。」

哇賽!
當下一直懷疑是真的還是假的,
於是提起勇氣打開了會被防毒軟體封殺的外掛程式,
接著打開了當時很火紅的 FPS Online Game,
竟然發現遊戲的反外掛系統還真的「沒有啟動」,
我在工作管理員真的找不到,這個變態的外掛功能均正常運作。

當時我樂極了!
因為當時很多外掛輔助通通失效,
會被反外掛系統偵測到非法活動,
我覺得就算天塌了我也在要學會這項技術,
然後把這項技術應用在我自己寫好的輔助中,
我就開始不斷測試、不斷思考,
到底這個 EXE 到底藏有什麼秘密?
/images/emoticon/emoticon37.gif

我記得過了很多天我還是沒有測出來、想出來,
當時還不太會逆向、看組語,
所以都是用「邏輯」在逆向的 XD,
就是「先執行什麼,在執行什麼,在做一些什麼奇怪的事,
應該會如何如何」的方式在做逆向,
簡單說就是在搞破壞,看看會發生什麼事,
從發生的事來推斷執行邏輯。

有一次被我 Try 到了,
先正常執行遊戲,再執行外掛程式,
我發現反外掛系統原本是正常開著的狀態,
但是執行外掛程式後反外掛系統卻消失了,
隨後我立刻注意到:
反外掛系統的 Process 的 PID 竟然還存在
但是 Process Name 卻是「svchost.exe」,
我滿頭問號????
立刻抓了一個舊版外掛程式(會被偵測的),
點了滑鼠左鍵兩下開啟這個外掛程式 EXE,
遊戲立刻關閉,跳出偵測到了外掛的訊息。

原來如此!
之所以沒看見「反外掛系統」是因為被「竄改」了!
這支外掛輔助將「反外掛系統」偽裝成了別的 Process 名稱、路徑,
藉此騙過使用外掛的使用者,使使用者相信「反外掛系統」確實沒有啟動,
藉此大賺一筆,大撈一筆防封費用。

另外之所以外掛沒有被偵測是因為使用了「其他技術」繞過反外掛系統,
還有就是當時確實有技術能讓反外掛系統「不啟動」,
注意!是真的不會啟動「反外掛程式」且能正常遊戲,
這項技術我已經確實掌握了,
之後如果有時間我也許會來寫一篇 XDD??
但可惜的是,這項技術對目前遊戲都不怎麼能用,
只有以前比較古老、沒在更新的遊戲能用。

好啦,故事結束 XD,那就開始今天的主題吧~

首先,我們知道 Process 的資訊儲存在 EProcess 中,
所以,現在來打開 WinDbg 看一下 explorer 的資訊:

  1. 使用 Administrator 權限打開 WinDbg
  2. 選 Kernel Debug
    • (可能需要打開測試模式,自己看跳出來的說明囉!)
  3. 選 Local 按下確定
    • (可能需要打開測試模式,自己看跳出來的說明囉!)
  4. 輸入 !process 0 0 explorer.exe
    • 找到 explorer.exe
    lkd> !process 0 0 explorer.exe
    PROCESS ffffe307167fb5c0
        SessionId: 1  Cid: 1054    Peb: 00e3b000  ParentCid: 1040
        DirBase: 10943d000  ObjectTable: ffffcf0188454580  HandleCount: 1819.
        Image: explorer.exe
    
  5. 輸入 .process /p ffffe307167fb5c0
    • 轉到 explorer 的 EProcess Address
    lkd> .process /p ffffe307167fb5c0
    Implicit process is now ffffe307`167fb5c0
    
  6. 輸入 dt _eprocess ffffe307167fb5c0
    • 查看 explorer.exe 的 EProcess
    lkd> dt _eprocess ffffe307167fb5c0
    nt!_EPROCESS
       +0x000 Pcb              : _KPROCESS
       +0x2d8 ProcessLock      : _EX_PUSH_LOCK
       +0x2e0 UniqueProcessId  : 0x00000000`00001054 Void
       +0x2e8 ActiveProcessLinks : _LIST_ENTRY [ 0x?? - 0x?? ]
    
        --- --- --- ---
        --- --- --- ---
        --- --- --- ---
    
    -->+0x3f8 Peb              : 0x00000000`00e3b000 _PEB
    
        --- --- --- ---
        --- --- --- ---
        --- --- --- ---
    
       +0x82c MitigationFlags2Values : <unnamed-tag>
       +0x830 PartitionObject  : 0xffffe307`15e555f0 Void
    
  7. 輸入 dt 0x00000000`00e3b000 _PEB!peb
    • 查看 explorer.exe 的 PEB
    lkd> dt  _PEB 0x00000000`00e3b000
    nt!_PEB
       +0x000 InheritedAddressSpace : 0 ''
       +0x001 ReadImageFileExecOptions : 0 ''
       +0x002 BeingDebugged    : 0 ''
    
       +0x018 Ldr              : 0x00007ffb`dc9ff3a0 _PEB_LDR_DATA
    -->+0x020 ProcessParameters : 0x00000000`03011b50 _RTL_USER_PROCESS_PARAMETERS
    
       +0x7a8 CloudFileFlags   : 0
    
  8. 輸入 dt 0x00000000`03011b50 _RTL_USER_PROCESS_PARAMETERS
    • 我們這次要改的東西就在 ProcessParameters 裡面
    lkd> dt 0x00000000`03011b50 _RTL_USER_PROCESS_PARAMETERS
    nt!_RTL_USER_PROCESS_PARAMETERS
       +0x000 MaximumLength    : 0x6f8
       +0x004 Length           : 0x6f8
       +0x008 Flags            : 0x6001
       +0x00c DebugFlags       : 0
       +0x010 ConsoleHandle    : (null) 
       +0x018 ConsoleFlags     : 0
       +0x020 StandardInput    : (null) 
       +0x028 StandardOutput   : (null) 
       +0x030 StandardError    : (null) 
       +0x038 CurrentDirectory : _CURDIR
       +0x050 DllPath          : _UNICODE_STRING ""
       +0x060 ImagePathName    : _UNICODE_STRING "C:\Windows\Explorer.EXE"
       +0x070 CommandLine      : _UNICODE_STRING "C:\Windows\Explorer.EXE"
       +0x080 Environment      : 0x00000000`08adb870 Void
       +0x088 StartingX        : 0
       +0x08c StartingY        : 0
       +0x090 CountX           : 0
       +0x094 CountY           : 0
       +0x098 CountCharsX      : 0x65002e
       +0x09c CountCharsY      : 0x650078
       +0x0a0 FillAttribute    : 0x6c0000
       +0x0a4 WindowFlags      : 0x5001
       +0x0a8 ShowWindowFlags  : 1
       +0x0b0 WindowTitle      : _UNICODE_STRING "Microsoft.Windows.Explorer"
       +0x0c0 DesktopInfo      : _UNICODE_STRING "Winsta0\Default"
       +0x0d0 ShellInfo        : _UNICODE_STRING "C:\Windows\Explorer.EXE"
       +0x0e0 RuntimeData      : _UNICODE_STRING ""
       +0x0f0 CurrentDirectores : [32] _RTL_DRIVE_LETTER_CURDIR
       +0x3f0 EnvironmentSize  : 0xb90
       +0x3f8 EnvironmentVersion : 0xc
       +0x400 PackageDependencyData : (null) 
       +0x408 ProcessGroupId   : 0x21c
       +0x40c LoaderThreads    : 0
    
  9. 點進去 ImagePathName 可以發現 Process 路徑存儲在 Buffer 中
    [+0x000] Length           : 0x2e [Type: unsigned short]
    [+0x002] MaximumLength    : 0x30 [Type: unsigned short]
    [+0x008] Buffer           : 0x3012168 : "C:\Windows\Explorer.EXE"
    

嘿嘿嘿,相信大家都知道應該要改哪些地方了對吧?
既然知道目標了那就來寫個程式試試看吧 XD

執行結果:

在 WinDbg 中執行 !peb看到的樣子:

/images/emoticon/emoticon07.gif/images/emoticon/emoticon01.gif

最後整理一下邏輯:

  1. 想辦法拿到 EProcess Address
    (前幾天的內容有說到如何直接從 User mode 拿到地址)
  2. 想辦法拿到 PEB Address(計算 Offset)
  3. 改掉 ProcessParameters 裡面的 ImagePathName 和 CommandLine 的 Buffer

實作起來非常簡單且有趣,
當然想要偽裝的更像目標物可能要再改一下其他的東西,
這就交給大家自己研究惹。

好了,今天就講到這,我得先去寫其他報告了~

大家若有發現哪裡寫得不好或錯誤的地方,都留個言討論一下吧 XD
那我們下期見 o( ̄▽ ̄)ブ

下期預告

  • 【Day 09】- 今日來創造 Ghost Process
  • 如果你/妳喜歡我的文章,請記得訂閱按讚分享並且打開小鈴鐺哦
  • 這樣就能在第一時間收到通知,也不會錯過任何文章啦~~

上一篇
【Day 07】- 惡搞行程(Process)、鍵盤(Keyboard)大作戰之序章
下一篇
【Day 09】- 今天來創造 Ghost Process(基於斷鏈隱藏 Process 的手法)
系列文
打通任督二脈奇幻之旅 - 用 30 天探索 Windows 底層運作原理15

尚未有邦友留言

立即登入留言