【Frida-实战】EA游戏平台的文件监控(PsExec.exe提权)

news2024/11/17 9:51:12

▒ 目录 ▒

    • 🛫 问题
      • 描述
      • 环境
    • 1️⃣ 代码编写
      • 开源代码搜索
      • 自己撸代码
      • procexp确定句柄对应的文件名并过滤
    • 2️⃣ PsExec.exe提权
      • 定位找不到`EABackgroundService.exe`的问题
    • PsExec.exe提权
      • PsExec.exe原理
    • 🛬 结论
    • 📖 参考资料

🛫 问题

描述

由于工作原因,需要对EA平台进行分析,其中一项就是监控文件操作。
本篇文章主要目的是Frida实操应用,如果有更深入的需求,推荐使用ProcMon.exe,通过各种删选条件进行监控操作。

ps: 对于有些软件,会检测ProcMon.exe等各种软件,需要这时候可以使用frida进行监控。

环境

版本号描述
文章日期2023-05-05
操作系统Win11 - 21H2 - 22000.1335
Python3.7.1
frida.exe15.0.18

1️⃣ 代码编写

开源代码搜索

首先想到的就是找下有没有开源的代码,结果找到一个https://github.com/nowsecure/frida-fs,代码下好,编译好了,结果发现,只是个文件操作的库。

后来有找了该作者的另一个库https://github.com/nowsecure/fsmon,这次看清楚了,支持Android、ios、mac,唯独不支持windows!!!

总之,没有找到合适的监控文件的frida代码。

自己撸代码

文件读写相关的函数有ReadFile、WriteFile、CreateFileW(CreateFileA最终调用的也是CreateFileW)等,我们以CreateFileW为例,讲解下frida提供的各种接口及含义。

  1. Module.findExportByName,根据模块名(“kernel32.dll”)和导出函数名(“CreateFileW”),获取目标函数地址。
  2. Interceptor.attach,执行hook的函数,传递一个目标函数地址和hook后的处理方法集合。
  3. onEnter & onLeave,处理函数集合的两个常见方法,分别代表调用函数前和调用后的处理。
  • 对于onEnter: function (args),我们可以查看并修改参数相关值。
  • 对于onLeave: function (retval),这里我们查看并修改函数返回结果。

完整代码:

const win32 = Process.platform === 'windows';

if (win32) {
  Interceptor.attach(Module.findExportByName("kernel32.dll", "ReadFile"), {
    onEnter: function (args) {
      const hFile = args[0];
      const lpBuffer = args[1];
      const nNumberOfBytesToRead = args[2];
      const lpNumberOfBytesRead = args[3];
      const lpOverlapped = args[4];

      console.log(`ReadFile called with hFile: ${hFile}, lpBuffer: ${lpBuffer}, nNumberOfBytesToRead: ${nNumberOfBytesToRead}, lpNumberOfBytesRead: ${lpNumberOfBytesRead}, lpOverlapped: ${lpOverlapped}`);
    },
    onLeave: function (retval) {
      console.log(`ReadFile returned: ${retval}`);
    }
  });

  Interceptor.attach(Module.findExportByName("kernel32.dll", "CreateFileW"), {
    onEnter: function(args) {
      var fileName = args[0].readUtf16String();
      console.log("Opening file: " + fileName);
      if (fileName.endsWith('\\IS')) {
        // Thread.sleep(5*1000)
      }
    },
    onLeave: function (retval) {
      console.log(`Opening returned: ${retval}`);
    }
  });
  
  Interceptor.attach(Module.findExportByName("kernel32.dll", "WriteFile"), {
    onEnter: function(args) {
      var fileHandle = args[0];
      // console.log("Enter Writing ", fileHandle.toInt32() === 0xbc4);
      if (fileHandle.toInt32() === 0xbc4) {
        return
      }
      console.log("Writing " + '0' + " bytes to file handle " + fileHandle);
      var buffer = args[1];
      var length = args[2];
      console.log("Writing " + length + " bytes to file handle " + fileHandle);
    },
    onLeave: function (retval) {
      // console.log(`Writing returned: ${retval}`);
    }
  });
}

procexp确定句柄对应的文件名并过滤

上述代码执行后,会有大量的日志输出,我们可以通过fileHandle.toInt32()过滤我们关心的句柄。
比如,我们不关心frida自己的句柄产生的日志,我们通过procexp查看frida相关句柄(0xb3c),当fileHandle.toInt32() === 0xb3c时,直接返回,不再输出日志。
代码如下:
在这里插入图片描述

  Interceptor.attach(Module.findExportByName("kernel32.dll", "WriteFile"), {
    onEnter: function(args) {
      var fileHandle = args[0];
      // console.log("Enter Writing ", fileHandle.toInt32() === 0xbc4);
      if (fileHandle.toInt32() === 0xb3c) {
        return
      }

2️⃣ PsExec.exe提权

定位找不到EABackgroundService.exe的问题

代码写完后,发现直接执行frida命令,会提示找不到进程。
在这里插入图片描述
排查一圈后,发现EABackgroundService.exe进程是SYSTEM权限,frida无权查看该进程。
在这里插入图片描述

PsExec.exe提权

很自然的,想到了PsExec.exe,查了资料,发现增加-i -d -s这三个参数就能将frida提取为SYSTEM,这三个参数的含义如下:

  • -i 运行程序,使其与远程系统上指定会话的桌面进行交互。 如果未指定会话,则进程在控制台会话中运行。 尝试使用重定向的标准 IO) 以交互方式 (运行控制台应用程序时 ,需要 此标志。
  • -d 不要等待进程终止 (非交互式) 。
  • -s 在系统帐户中运行远程进程。
    在这里插入图片描述

PsExec.exe原理

PsExec.exe是Sysinternals Suite中的一个工具,它可以在本地或远程计算机上启动进程。它的原理是通过在远程计算机上安装一个服务程序(PsExecSvc.exe),该服务程序允许PsExec.exe在远程计算机上执行命令。

它的提权原理是利用 Windows 系统中的一个名为“服务控制管理器”的组件,该组件可以启动和停止系统服务。
PsExec.exe 利用这个组件启动一个新的服务,该服务的权限可以被设置为 LocalSystem,这是 Windows 系统中最高的权限级别之一。一旦服务被启动,PsExec.exe 就可以在该服务的上下文中启动进程,从而获得了更高的权限。

具体来说,PsExec.exe 的提权过程如下:

  1. PsExec.exe 启动一个新的服务,该服务的权限可以被设置为 LocalSystem。
  2. 在该服务的上下文中,PsExec.exe 启动一个新的进程。
  3. 新的进程继承了服务的权限,因此具有更高的权限。

需要注意的是,使用 PsExec.exe 进行提权需要具有管理员权限。否则,PsExec.exe 将无法启动新的服务。此外,使用 PsExec.exe 进行提权也可能会被杀毒软件视为恶意行为,因此需要谨慎使用。

🛬 结论

EA平台使用了很多技术,如protobuf、rpc、各种加密等,有需要分析的,可以一起探讨。

📖 参考资料

  • PsExec.exe下载地址及使用说明 https://learn.microsoft.com/zh-cn/sysinternals/downloads/psexec

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/497098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4年Android开发,面试通过全靠狂刷这份面试题,从11K涨到25K+(内含答案)

在博主认为,对于Android面试以及进阶的最佳学习方法莫过于刷题博客书籍总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考&am…

【Python】序列类型③-集合

文章目录 1.集合(set)简介2.集合的定义3.集合的遍历4.集合的常用方法 1.集合(set)简介 集合是一种无序可变的容器对象 集合最大的特点:同一个集合内元素是不允许有重复的,因此集合自带"去重"效果 2.集合的定义 集合的定义有两种方式: 使用{}进行定义,这种方式不能定…

【TCP 重传、滑动窗口、流量控制、拥塞控制】

文章目录 重传机制超时重传快速重传SACK方法Duplicate SACK 滑动窗口流量控制那操作系统的缓冲区,是如何影响发送窗口和接收窗口的呢?窗口关闭 拥塞控制慢启动拥塞避免拥塞发生快速恢复 重传机制 TCP 实现可靠传输的方式之一,是通过序列号与…

chatgpt可以降重论文吗-chatgpt降重论文软件

chatgpt可以降重论文吗 ChatGPT是一种自然语言处理技术,可以生成符合指定条件的文本。因此,理论上可以使用ChatGPT来降重论文。但是,需要注意以下几点: 是否符合学术道德要求:学术论文的降重需要严格遵守学术道德准则…

mfc140u.dll丢失怎么解决?,哪种方法更简单?

如果您在运行 Windows 操作系统时遇到了“mfc140u.dll 丢失”或“找不到 mfc140u.dll”等错误提示,那么这意味着您的计算机遗失了该文件。mfc140u.dll 文件是 Microsoft Visual C 的一部分,是支持应用程序运行所必需的。无论是什么原因导致了 mfc140u.dl…

PointNetGPD<论文>

摘要 提出了一种端到端的抓取位置预测模型,能够从点云中估计出机器人的抓取位姿。网络以原始点云作为输入,能够捕捉到抓取器闭合区域点云的复杂几何结构,即使这些点云很稀疏。 PointNetGPD是一种轻量级的网络模型,能够处理抓取器…

手把手教你在Centos7.6系统安装mysql5.7

文章目录 1 查看linux系统版本2 官网获取文件3 wget下载4 安装yum源5 查看是否正常工作6 安装mysql服务6.1出错6.2解决方法 7 检查配置文件8 启动mysql服务9 root第一次登录10 其他设置10.1 修改密码10.2 开启开机自启动10.3 配置my.conf 1 查看linux系统版本 需要安装对应系统…

Docker安装、Docker基本操作

一、Dokcer安装 1.安装 # 1、yum 包更新到最新,需要几分钟时间(注意:也可以直接跨过) sudo yum update # 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 sudo yum install -y yum-util…

从文字到语义:文本分词和词性标注的原理与实现

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

个人博客系统调试详细过程

系统功能的详细说明和源代码见以下链接:https://blog.csdn.net/shooter7/article/details/121180333相关的源码数据库文件、软件安装包可以联系博主koukou(壹壹23七2五六98) 调试过程如下: 文章目录 调试过程如下:一、数据库安装二、sql数据文件的导入三…

java调用cmd命令

1.首先,我们需要了解一下 java是如何调用 cmd的: 6.在实际的开发中,我们有可能会遇到 java调用 cmd命令的情况: 7.对于一些特定的环境下,例如在嵌入式系统中,那么我们可以使用下面这种方式来调用 cmd命令&a…

【Redis】Redis常用基本命令

数据结构 常用基本命令 keys * 查看当前库所有的key exists key 判断某个key是否存在 type key 查看key的类型 del key 删除指定的key数据 unlink key :非阻塞删除,仅仅将keys从key元数据删除,真正的删除会异步操作 6.ttl key 查看key多少秒过期…

AIGC:ColossalChat(基于LLM和RLHF技术的类似ChatGPT的聊天机器人)的简介、安装、使用方法之详细攻略

AIGC:ColossalChat(基于LLM和RLHF技术的类似ChatGPT的聊天机器人)的简介、安装、使用方法之详细攻略 目录 ColossalChat的简介 1、局限性 LLaMA-finetuned 模型的限制 数据集的限制 2、在线演示 3、Coati7B examples Generation Open QA ColossalChat的安装…

功率电子开关的高边开关和低边开关high -side power switch

下图为使用NMOS,最简单的开关电路。(低侧驱动) CONTROL为控制信号,电平一般为3~12V。负载一端接电源正极,另一端接NMOS的D(漏极)。CONTROL电平为高时,Vgs>NMOS的Vgs导通阀值&…

数据库基础应用——概念模型

1、实体(Entity) 客观存在并可相互区别的事物称为实体。实体可以是人、物、对象、概念、事物本身、事物之间的联系。(例如一名员工、一个部门、一辆汽车等等。) 2、属性(Attributre) 实体所具有的每个特性称为属性。(例如:员工由员…

基于OpenCV的haar分类器实现人脸检测分析

基于OpenCV的haar分类器实现人脸检测分析 文章目录 基于OpenCV的haar分类器实现人脸检测分析一、基于OpenCV的haar分类器实现笑脸检测1、Haar分类器介绍2、haar分类器的静态使用(处理图片)3、haar分类器的动态使用(对摄像头视频进行处理&…

JAVA 17新特性

JAVA 17新特性 概述 JDK 16 刚发布半年(2021/03/16),JDK 17 又如期而至(2021/09/14),这个时间点特殊,蹭苹果发布会的热度?记得当年 JDK 15 的发布也是同天 Oracle 宣布&#xff0…

S32K3学习笔记_电源管理

S32K3学习笔记_电源管理 1、缩略词 PMC:Power Management Controller,电源管理控制器 FPM:Full Performance mode,全性能模式 LPM:Low Performance mode,低性能模式 LPCMP:低功耗比较器 S…

C语言单链表

本节目标: ①定义单链表结构体 ②初始化单链表 ③单链表增加结点(头插法、尾插法) ④删除指定结点 ⑤打印输出 目录 导入头文件 定义单链表结构体 初始化单链表 头插法 尾插法插入 删除指定结点 打印单链表 全部代码展示 导入头文件 …

NP完全性PART1:多项式时间与形式化语言体系

算法导论第三版,CH34笔记 NP完全性 Chapter Introduction 一般来说,我们认为可以在多项式时间内求解的问题是易处理的问题,在超多项式时间内解决的问题是不易处理的问题。 下面列出的几对问题,前者可以用多项式时间算法求解&…