当前位置: 首页 > news >正文

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

▒ 目录 ▒

    • 🛫 问题
      • 描述
      • 环境
    • 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: 文章中内容仅用于技术交流,请勿用于违规违法行为。

相关文章:

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

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

可视化和回归分析星巴克咖啡在中国的定价建议

可视化和回归分析星巴克咖啡在中国的定价建议。星巴克的拿铁大杯Tall 在各国的价格。 Claude AI | 代码自动生成的数据可视化代码 选择Claude AI 而非 ChatGPT的理由是前者更懂中文​!具体可以参见我前面的两篇文章对比两者的中英文翻译的表现及使用安装等难易程度​…...

热门影片怎么买票比较便宜,低价买电影票的方法,纯攻略!

有时候真的有被自己蠢到!看电影看了这么多年,竟然不知道电影票价格才9.9元、19.9元就能买到。之前我看电影动不动就是几十上百块,感觉好亏啊。 其实,我也不敢相信的,通过这些平台,同时在节假日甚至春节档期…...

Python通过SWIG调用C++时出现的ImportError问题解析

摘要 win10系统,编译器为mingw,按照教程封装C的一个类并用python调用,一步步进行直到最后一步运行python代码时,在python代码中import example时报错ImportError: DLL load failed while importing _example: The specified modul…...

3ds Max云渲染有多快,3ds Max云渲染怎么用?

本地渲染效果图和动画3D项目是一个非常耗时的过程,当在场景中使用未优化的几何体或在最终渲染中使用大量多边形模型时,诸如此类的变量最终会增加渲染项目所需的时间和处理器能力。随着提供的渲染服务的云渲染平台出现,越来越多动画师、艺术家…...

Java之线程安全

目录 一.上节回顾 1.Thread类常见的属性 2.Thread类中的方法 二.多线程带来的风险 1.观察线程不安全的现象 三.造成线程不安全现象的原因 1.多个线程修改了同一个共享变量 2.线程是抢占式执行的 3.原子性 4.内存可见性 5.有序性 四.解决线程不安全问题 ---synchroni…...

我有一个方法判断你有没有编程天赋

我有一个方法判断你有没有编程天赋 一 前言 基于知识的诅咒的原理 做一个敲击者很难。问题在于敲击者已拥有的知识(歌曲题目)让 他们想象不到缺乏这种知识会是什么情形。当他们敲击的时候,他 们不能想象听众听到的是那些独立的敲击声而不是…...

python 生成chart 并以附件形式发送邮件

import requests import json import pandas as pd import numpy as np import matplotlib.pyplot as plt data np.random.randn(5, 3)#生成chart def generate_line_chart(data):df pd.DataFrame(np.abs(data),index[Mon, Tue, Wen, Thir, Fri],columns[A, B, C])df.plot()…...

leetcode-035-搜索插入位置

题目及测试 package pid035; /*35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。示例 1:输入: nums …...

读书笔记--数据治理之法

继续延续上一篇文章,对数据治理之法进行学习。数据治理之法是战术层面的方法,是一套涵盖8项举措的数据治理实施方法论,包括梳理现状与确定目标、能力成熟度评估、治理路线图规划、保障体系建设、技术体系建设、治理策略执行与监控、绩效考核与…...

送了老弟一台 Linux 服务器,它又懵了!

大家好,我是鱼皮。 前两天我学编程的老弟小阿巴过生日,我问他想要什么礼物。 本来以为他会要什么游戏机、Q 币卡、鼠标键盘啥的,结果小阿巴说:我想要一台服务器。 鱼皮听了,不禁称赞道:真是个学编程的好苗…...

CentOS 7(2009) 升级 GCC 版本

1. 前言 CentOS 7 默认安装的 gcc 版本为 4.8,但是很多时候都会需要用到更高版本的 gcc 来编译源码,那么本文将会介绍如何在线升级 CentOS 的 gcc 版本。 2. 升级 GCC (1). 安装 centos-release-scl; [imaginemiraclecentos7 ~]$ sudo yum…...

java非静态代码块和静态代码块介绍

代码块 SE.10.0…02.28 非静态普通代码块:定义在方法内部的代码块,不用任何关键字修饰,又名构造代码块、实例代码块 静态代码块:用static修饰的代码块 非静态代码块 public class Test {public static void main(String[] args…...

Golang中接口类型详解与最佳实践(二)

之前的文章《Golang中的interface(接口)详解与最佳实践》详细介绍了接口类型的定义、使用方法和最佳实践。接口类型使得编写可扩展、可维护和可复用的高质量代码变得更加容易。 如何判断是否实现了某个接口? 还是使用之前文章的例子,例如声明了如下一个…...

ChatGPT 探讨内存屏障的意内存

一、与 ChatGPT 探讨内存屏障的意内存 轻松的氛围,跟 ChatGPT 从内存屏障问题一直扯到CAP原理 我: 2023/4/14 17:48:09 那我可以理解为{ shared_var 1; asm volatile ("sfence" ::: "memory"); asm volatile ("lfence" …...

P1039 [NOIP2003 提高组] 侦探推理

此题难度为:提高/省选- 作者为:CCF_NOI 题目描述 明明同学最近迷上了侦探漫画《柯南》并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏。游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明…...

模拟电路学习笔记 - 概念与结论

真空二极管,电子管ENIAC发源地,基础方法二极管双极管三极管场向管学习特性,最终运放运方的目的是运用,射频,计算…放大电路大功率元器件和微元器件学习他们的特性分粒 集成设计的角度,不要仅仅分析设计的前…...

Linux驱动开发:I2C子系统

目录 1、I2C简介 1.1 两根线 1.2 信号 1.3 写时序 1.4 读时序 1.5 I2C速率 1.6 I2C驱动框架简介 2、I2C设备驱动 2.1 I2C相关API 2.1.1 i2c_driver 2.1.2 注册:i2c_add_driver 2.1.3 注销:i2c_del_driver 2.1.4 module_i2c_driver&#xff…...

[C++] 动态内存与智能指针

众所周知,C五大内存区:全局数据区(静态区)、代码区、栈区、堆区、常量区。 全局数据区(静态区):存放全局变量,静态数据和常量; 代码区:存放所有类成员函数和非成员函数代码,函数体的二进制代码。…...

多态的原理

有了虚函数,会在类的对象增加一个指针,该指针就是虚函数表指针_vfptr;虚表本质就是函数指针数组,虚表里面存放着该对象的虚函数的地址; 派生类继承有虚函数基类的对象模型 子类继承父类的虚表指针时,是对父类的虚表指针进行了拷…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

push [特殊字符] present

push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...