某魔改Uworld逆向分析

某魔改Uworld逆向分析
huarui某魔改Uworld逆向分析
写在前面
tx游戏共同特点就是用了ACE的ue引擎。ACE对基础结构的保护还是很猛的
历时几周的研究,哥们终于找到定位ACE魔改Uworld的方法了。
本文原创,同时也发布视频BV13YhCzBEaP.
如果你有更好的方法欢迎和我交流
静态分析
可以看到这里的特征确实发生了变化
sub_143C59B40(&off_146B76CFO,QWORD(a1+ 136));
正常Uworld是这样的:
这里的它将原本直接传递给Uworld的值作为一个参数,与另一个不知道什么东西的东西一起传入到函数sub_143C59B40中
跟进函数去看也没什么重要信息。
其实这里的特征点确实没什么变化,tx喜欢每次更新上小算法已经是业界常识了(cr3也一样)他不敢上难的算法。优化这一块,我只能说没得选
但是目前分析来看他确实变化了,所以这里需要动态分析
这里科普一个常识,64位程序的第一个参数是RAX,第二个参数是RDX,第三个是R8,第四个是R9
记起来,后面要考
动态分析
首先定位到sub_143C59B40
IDA分析已经很明确了,刚刚接受Uworld的值的参数存放在RDX寄存器中
这里可以打一个断点来看RDX寄存器的值为C36C98D0
这里可以直接观察C36C98D0的结构体
0x00 ,0x10,0x20,0x28,0x30
是不是很熟悉?这就是Gworld
但是这并不是正确的地址。观察一段时间后可以发现,RDX的值又变动了
指针会变动,说明这个指针并不是我们要找的指针
(后来得到大佬指点,这一块Gworld是Gworld的某个缓存,是ACE独有的,是不能用于直接定位)
这里研究了两种办法解决这个问题
方案一
由于ACE的进程保护机制,我们几乎不可能用普通调试器进行操作
主播的电脑使用DBVM很容易蓝屏。这和AMD CPU的架构有直接关系。虚拟化对AMD的支持就像婆媳关系,主打一个名存实亡。事实上DBVM对amd架构的驱动已经停留在五年前,而电脑系统已经更新到win11 23h,所谓的驱动能跑就已经是一个奇迹了
intel的VT是对的
如果你也用的是AMD的处理器,这里推荐一个狗哥的DHS调试器(BV1Q1KSz4Eqn)。DHS目前仅支持进程附加和单个硬件断点,算是驱动调试器里比较强的。(谁懂AMD用户看到虚拟化的救赎感
这里的方法涉及到了部分虚拟化的指令,极有可能导致蓝屏(80%)。如果你是intel处理器或者能正常使用DBVM不蓝屏的可以用。这里不多废话直接上方法
查看是谁访问了C36C98D0
过一段时间出现
这里可以看到一个cmp qworld ptr[rcx],00
这是一段cmp,大概每隔30秒会有一次这个比较。从下面的mov rcx可以看出这是一段条件赋值。示例代码参考如下:
1 | CMP a, b |
这是很有趣的发现
顺着这块地址,寻找1到3层指针就能找到uworld
方案二
这个方法泛用性并不高,而且触发条件苛刻,主播目前还没摸索触发条件。
但是我个人认为这个方法还是有价值的。因为它可以用来定位一些比较特殊的情况。
从刚刚的示例我们可以有如下推测:
某个函数的参数是一个指针,但是这个指针的指向是变化的。
某个函数的参数是一个指针,但是这个指针的指向是固定的,但是这个固定的地址是变化的。
到这里如果你坚信总会有一个指针的指针,它是不变的,那么你就是对的
这就是方法二
我在8月26日的时候测试,我并没有找到这个指针
但是截止于8月30日,我使用相同的方法成功了。所以我立马抓住机会录下了视频
写在后面
这个项目的其他结构并没有魔改,也没有解密。唯一的难点就是这个指针问题。这里给可能需要的人特征如下:
1 |
|



