【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
  • 如果你/你喜欢我的文章,请记得订阅按赞分享并且打开小铃铛哦
  • 这样就能在第一时间收到通知,也不会错过任何文章啦~~

<<:  [Day08 - React Native] 路由,使用 React Native Navigation

>>:  Day8 NodeJS-libuv与Asynchonous

# Day 30 Commencement: I open at the close

哇!不知不觉就到第 30 天了,来回顾一下这 30 天的旅程吧! 简单回顾 自己订的铁人赛主题是阅读...

[Day28] 建立购物车系统 - 11

本篇同步发文在个人Blog: 一袋.NET要扛几楼?打造容器化的ASP.NET Core网站!系列文...

今天学会了env虚拟环境

今天看影片学会了env虚拟环境 突然觉得环境设定好轻松 不用在顾虑什麽版本 你要什麽版本就弄什麽版本...

每日挑战,从Javascript面试题目了解一些你可能忽略的概念 - Day10

tags: ItIron2021 Javascript 前言 终於迈入第10天啦! 我们昨天讲完资料...

Day 11 - Spring Boot & JdbcTemplate

在实际开发中,一定会需要将资料持久化,常见的持久化技术有Spring 自带的JdbcTemplate...