首页
社区
课程
招聘
[原创]2021南极动物厂 游戏高赛竞赛决赛分析01
2021-4-13 02:07 6806

[原创]2021南极动物厂 游戏高赛竞赛决赛分析01

2021-4-13 02:07
6806

0x01 前言

没有参赛 看了下题目 感觉不太难 蹭个热度 发个WP

 

然后 今年的题目感觉好敷衍(初赛题是2018年的决赛题 hack.exe内存注入从看雪抄的 flag的算法太简单..)

 

然后感觉题目分数的提升应该会比较看重功能的实现 (FLAG解题其实都大同小异 没什么好拉开距离的地方 感觉主要还是功能的实现 还有内卷程度)

 

所以自瞄的另外实现 我用的是子弹穿墙追踪 有兴趣的 可以接着往下看哦~

0x02 过程

题目描述

(1) shootgame是一个游戏,hack.exe是游戏shootergame的一个外挂程序。

 

(2) 运行shootgame游戏,运行hack.exe,成功执行外挂功能并分析外挂实现过程。

 

(3) 实现一个与hack.exe的功能相同的,但是游戏逻辑原理不同的外挂程序。

 

(游戏逻辑原 理不同:指外挂程序对读写游戏数据结构或代码的攻击内容不同,并不是读写内存方 式、注入内存方式、外挂核心核心代码载体差异的不同)

题目分析

Patr1

对hack.exe的详细分析

使用工具:IDA Pro 7.2CheatEngine 7.2x64dbgPYArk

  1. 直接打开了下hack.exe一闪而过 开游戏 再打开也是一闪而过

  2. IDA载入分析 一路查看执行的流程

    对代码前后逻辑分析完以后 发现会读取一个文件 读取失败就会返回

    此处为读取出错 进程就退出的逻辑。文件名为hack.dat

  3. 接着读取出来的Buffer会跑进一个函数 进行解密 之后会用解密出来的Buffer其中的字符 当做进程名称

    然后会从进程列表中 寻找对应的名称 暂不知道是哪个进程(猜测是游戏进程 后面可以确定)。

  4. 接着就是一大堆的解密 解密出来的数据 会作为GetProcessAddress的参数(函数名称) 获取函数地址

    然后还调用了刚刚解密进程名称的函数 解密一个Buffer 然后这个Buffer会被写进目标进程内 并且

    被写入的内存地址 是由hack.exe申请出来的可执行内存 所以把这个Buffer Dump出来看看

    首先我们先在main函数下个断点 然后用x64dbg设置新的运行点 单步两下


这时候打个广告欢迎使用PyArk 一个无所不能的Ark 官网:http://www.pysafe.cn/ 我们使用Pyark把这个解密以后的内存dump出来

  1. IDA载入 发现这个DLL必须要依附与ShooterClient.exe 验证了前面寻找的进程就是游戏进程的猜测哦~

    此时不知道这个dll有没有什么校验、例如判断是不是由hack.exe发起的注入 随手拿起这个dll 用CheatEngine注入到游戏里面 显示了一

    行字 并且在游戏中按住右键 可以自瞄敌人。(啊~这~。DLL注入以后竟然可以直接用)

  2. 那这个时候回顾题目要求

(1)求flag 这要分析解密hack.dat的函数 看了下原解密代码被优化了。看汇编挺吃力的,于是最后再看。

 

(2)写个"与hack.exe外挂功能相同,但实现原理与hack.exe不同的程序源码"的功能 那就要分析hack.dll是怎么实现的了

  1. hack.dll既然按住右键能自瞄 那就从这里入手 查看导入表 看看有没有判断热键的API 从而找到自瞄的攻击流程

    哦~ 发现个GetAsynKeyState这样的API(判断热键状态) 查找引用 发现整个dll只有这一处引用 并且 下面有写入float内存的操作


    看看这个被写入数据的内存地址是怎么来的 IDA查找引用



    得到完整的数据 然后在CE中添加这个数据 随便改个值 游戏中的屏幕动了 确认这里就是跟自瞄有关的逻辑了


    所以hack.dll攻击的数据结构就是 如上图这里啦~

  2. 那这个要写入进去的float类型的数据肯定跟敌人坐标有关了

  3. 往上分析以后可以看到敌人对象其实是来源于一个函数

  1. 对着函数进行分析以后 发现遍历了一个数组 从里面取出来所有符合的名字 然后转换屏幕坐标之后 取出距离屏幕准星最近的敌人



    判断是否遍历完成

    数组指针 数组大小

 

CmpName函数的分析


GetName函数的分析

 

所以 就是从一个对象数组 而不是一个敌人数组里面遍历出对象
并且判断他的名字后缀是不是awn_C_ 来判断是否为活体目标(是否为敌人) 并且把活体目标的坐标转换成了屏幕坐标 然后取出屏幕坐标距离准星最近的敌人为自瞄对象

  1. 用VS写个DLL 遍历看看 记得把多线程DLL调成多线程


成功打印了

 

下一篇:https://bbs.pediy.com/thread-267009.htm

 

赛题链接https://gslab.qq.com/html/competition/2021/race-pre.htm

 

链接:https://pan.baidu.com/s/1LjBWFcC156ReyG6qTu0Hfg
提取码:1fae


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2021-4-23 10:38 被kanxue编辑 ,原因:
收藏
点赞9
打赏
分享
最新回复 (5)
雪    币: 961
活跃值: (4962)
能力值: ( LV12,RANK:297 )
在线值:
发帖
回帖
粉丝
L0x1c 3 2021-4-13 03:22
2
0
存哥无敌!
雪    币: 3408
活跃值: (3525)
能力值: ( LV3,RANK:37 )
在线值:
发帖
回帖
粉丝
qqzxc 2021-4-13 11:32
3
0
存哥无敌!
雪    币: 5851
活跃值: (4417)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
淡然他徒弟 1 2021-4-13 13:30
4
0
L0x1c 存哥无敌!
源哥无敌了 都拿前三了。
雪    币: 5851
活跃值: (4417)
能力值: ( LV10,RANK:160 )
在线值:
发帖
回帖
粉丝
淡然他徒弟 1 2021-4-13 13:30
5
0
qqzxc 存哥无敌!
龟哥无敌 公司首席cto 嘻嘻嘻
雪    币: 659
活跃值: (951)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qdjytony 2021-4-26 03:23
6
0
存哥无敌!
游客
登录 | 注册 方可回帖
返回