【Day 10】- 藏起来的 Process 真的看不见摸不着?(讲解找出断链後的 Process 方法)

Agenda

  • 资安宣言
  • 测试环境与工具
  • 学习目标
  • 前情提要
  • 技术原理与程序码
  • References
  • 下期预告

资安宣言


撰写本系列文章目的在於提升资讯安全之实务能力,
并透过实作体悟到资讯安全领域的重要性,
本系列所有文章之内容皆有一定技术水平,
不得从事非法行为、恶意攻击等非法活动,
「一切不合法规之行为皆受法律所约束」,
为了避免造成公司、厂商或玩家之间困扰,
所有实作不会拿已上市产品、Online Game 等等来作范例学习,
且部分具有深度、价值之内容,将会提升一定阅读门槛(不对该技术做分析、解说),
请勿透过本系列文章所学,从事任何非法活动,请不要以身试法!!!


测试环境与工具

学习目标

  • 1.找出断链後隐藏的 Process
  • 2.了解 PsLookupProcessByProcessId 与 NtOpenProcess 部分运作原理

前情提要

昨天讲了第一种隐藏 Process 的方法,
也就是【Day 09】- 今天来创造 Ghost Process(基於断链隐藏 Process 的手法)

这个方法是修改 EProcess 中的 ActiveProcessLinks 来达成隐藏效果,

那麽今日就来讲讲如何找出透过上述方法隐藏的 Process!

技术原理与程序码

首先开始前要先说一下,
小弟我目前还属於菜鸟阶段,正不断努力学习中,
若有发现错误或不妥之处还请不吝赐教。
欢迎大家多多留言,互相交流交流。

那就开始今天的主题吧~~
/images/emoticon/emoticon35.gif

大家都知道一个 Process 都有一组「身分证」,
身分证 = EProcess Address
只要拿到 EProcess Address 就能获得 Process 资讯!

一般在写 CODE 的时候都是 CALL API 列举 Process,
拿到 PID 後再 CALL PsLookupProcessByProcessId
这样就能顺利拿到 EProcess Address。

所以不知道大家有没有想到方法来找出隐藏的 Process?

1..

2... ... ..

3.... .... .... !

时间到 XD

公布解答:
简单找出断链隐藏後的 Process 方法如下:

  1. 暴力列举 PID,然後 CALL PsLookupProcessByProcessId
  2. 暴力列举 PID,然後 CALL OpenProcess

第一种 CALL PsLookupProcessByProcessId 的方法就能拿到 EProcess Address,
要什麽资讯都有~~~

第二种 CALL OpenProcess 能直接在 User mode 实现,
但如果 Process 有保护那就 ...会失败!

我们来看一下效果:
隐藏前:

隐藏後:

隐藏後在 R0 下,暴力列举 PID,然後 CALL PsLookupProcessByProcessId

隐藏後在 R3 下,暴力列举 PID,然後 CALL OpenProcess

所以~
要如何加强隐藏技术呢?
/images/emoticon/emoticon39.gif

既然现在知道以上两个 API 可以透过 PID 找到 Process 了,
那现在就来看看以上两个 API 的实作方式
从中找到方法,再来好好处理这个方法 :D

以下讲讲懒人逆向法 XDDD(应该不算是逆向 哈哈)

在很久很久以前~不知是哪个年代~
有间电脑科技公司针对某个系统课程,
提供了学习 Windows Kernel 底层运作的机会,
那间电脑科技公司叫做:Microsoft

然後不知道为什麽,
网路上就开始流传了一份文件,它叫做:WRK v1.2(Windows Research Kernel)

/images/emoticon/emoticon34.gif

这份 Source code 是可以修改、编译一个属於自己的 wrkx86.exe,
是真的可以拿来跑在 Windows Server 2003 、XP 上的 Source code ,
涵盖内容包含以下:

  • cache - cache manager
  • config - registry implementation
  • dbgk - user-mode debugger support
  • ex - executive functions (kernel heap, synchronization, time)
  • fsrtl - file system run-time support
  • io - I/O manager
  • ke - scheduler, CPU management, low-level synchronization
  • lpc - local procedure call implementation
  • mm - virtual memory manager
  • ob - kernel object manager
  • ps - process/thread support
  • se - security functions
  • wmi - Windows Management Instrumentation
  • inc - NTOS-only include files
  • rtl - kernel run-time support
  • init - kernel startup

所以 Source code 在哪里??
大家自己找吧 >.< 直接放这里我会怕 XD

找到 PsLookupProcessByProcessId 与 NtOpenProcess 会发现:

  1. PsLookupProcessByProcessId 会从 PspCidTable 拿对应 PID 的 Object
  2. NtOpenProcess 会 CALL PsLookupProcessByProcessId

所以很明显惹吧~
明天 Day 11 要来解决、学习的项目就是:PspCidTable

补充1:
如果是 zwquerysysteminformation 能不能找出断链後藏起来的 Process 呢?
答案是:No!
为什麽呢?交给各位找答案了 我就不在这讲了 哈哈

补充2:
这份 Source code 这麽久了还适用喔?
答:改了很多东西呢,不过有些东西架构基础上还是有点像~

好了,这篇就讲到这结束了,
大家若有发现哪里写得不好或错误的地方,都留个言讨论一下吧 XD
那我们下期见 o( ̄▽ ̄)ブ

References

下期预告


<<:  [Day 20] 回测与报表

>>:  Scanners API-Day Range Rank && Percent Rank

Day 16 - 透过Vuex来管理状态

Vuex 是 Vue中用来管理状态的函式库,像是使用者的登入状态,就可以把它存入Vuex中。 htt...

【Day 20】全局储存库 Context

Context Context 是 React 提供的一个 API 其功能有: 统一存放共用参数,实...

Day 28 - 用 canvas 与 pdfjs 做文件签名(上)

前述 今天用前面做过的小画家相似功能,来完成一个可以在文件上面签名的功能~ 当然也会有新的东西可以玩...

[Day 17] IOCP 实作

前言 今天简单实践了最基本的 IOCP http server , 原则上是用我第二天写的 one2...

Vue.js 从零开始:methods

methods 方法 在Vue里面methods是以物件来定义,内层都是函式,以下几种来示范meth...