专栏名称: 吾爱破解论坛
吾爱破解论坛致力于软件安全与病毒分析的前沿,丰富的技术版块交相辉映,由无数热衷于软件加密解密及反病毒爱好者共同维护,留给世界一抹值得百年回眸的惊艳,沉淀百年来计算机应用之精华与优雅,任岁月流转,低调而奢华的技术交流与探索却
目录
相关文章推荐
寿光公安  ·  “快递已放家门口,如有疑问请拨打电话……” ·  19 小时前  
寿光公安  ·  “快递已放家门口,如有疑问请拨打电话……” ·  19 小时前  
安全学习那些事儿  ·  《华盛顿邮报》遭网络攻击 多名记者邮箱遭入侵 ·  23 小时前  
安全学习那些事儿  ·  《华盛顿邮报》遭网络攻击 多名记者邮箱遭入侵 ·  23 小时前  
与消费者同行  ·  618来了,新规明确了,网购注意! ·  昨天  
与消费者同行  ·  618来了,新规明确了,网购注意! ·  昨天  
苹果黑科技  ·  微信新增“外接设备备份”功能 ·  昨天  
深圳应急管理  ·  分区暴雨黄色预警!请加强安全防范! ·  2 天前  
深圳应急管理  ·  分区暴雨黄色预警!请加强安全防范! ·  2 天前  
51好读  ›  专栏  ›  吾爱破解论坛

2025腾讯游戏安全技术竞赛 安卓初赛

吾爱破解论坛  · 公众号  · 互联网安全  · 2025-04-19 08:30

主要观点总结

本文描述了对一款游戏存在的加速、自瞄、透视等问题进行分析和修复的过程。通过利用UE4的so文件分析,使用Frida进行hook函数等操作,解决了异常点如透视、角色移动、子弹轨迹等问题。同时,对UE4的渲染机制进行了探索,尝试实现项目的自定义深度渲染。最后,提供了相关的Frida脚本和UE4相关函数的分析。

关键观点总结



正文

请到「今天看啥」查看全文


使用stackplz断点,可以发现正常移动视角时,堆栈情况如hit_count:4,而开枪时则hit_count:3的情况,对比两种情况,因为两种情况都要进入#00所在的函数,因此不好patch。通过frida replace置空#01所在函数,可以发现无法正常开枪,因此该函数与开枪有关系,在这之前也不能动。因此只能对#01所在的函数跳转 BLR patch成 NOP ,阻止其修改ControlRotation,即可修复。

image-20250329193238453

异常点5:子弹乱飞

在修复自瞄后开枪会发现,子弹并不朝着准星瞄准的方向发射,在查阅相关资料后,得知子弹发射时会通过GunOffset、Location和Rotation等参数计算出发射位置及方向。使用Frida对相关参数进行获取可发现GunOffset这一参数被设置为(100, 0, 10),且通过硬件断点确定该参数在开枪时会被读取。将其修改为(0, 0, 20)后,子弹乱飞情况有所缓解,但未能彻底解决,测试在Yaw为90,270时(即人物侧对地面文字)影响较大,0,180,360时(即人物正对地面文字)影响较小。

 复制代码 隐藏代码
function getGunOffset(actorAddr){
    var data_addr = ptr(actorAddr).add(0x500);
    dumpVector(data_addr);
}

function writeGunOffset(actorAddr, x, y, z){
    ptr(actorAddr).add(0x500).writeFloat(x);
    ptr(actorAddr).add(0x500+4).writeFloat(y);
    ptr(actorAddr).add(0x500+8).writeFloat(z);
}

writeGunOffset(actorAddrs["FirstPersonCharacter_C"], 0020);
image-20250329193930047

在射击函数中,也就是前面自瞄修复的下面,可以看到0x670FBAC的函数中有两个rand函数。将其patch成固定值后,此处我patch成0x7fffff(0xffffff/2)后运行发现小球能够以相对稳定的角度射出,说明此处随机数确实与前面小球左右横跳的情况有关

image-20250330005044597

但仍未弄清楚此处计算结果与ControlRotation还会如何运算。在 0x8D2ED80 0x8D2E214 的函数里面,可见 ActorSpawning 的字符串以及对 UObject 列表等进行修改,此处应该生成了Projectile。本人猜想是需要在这附近对生成子弹的角度修改为ControlRotation,使小球恢复向玩家前方射出,参考UE官方示例代码https://dev.epicgames.com/documentation/zh-cn/unreal-engine/3---implementing-projectiles?application_version=4.27#%E5%AE%9E%E7%8E%B0%E5%8F%91%E5%B0%84%E5%87%BD%E6%95%B0

image-20250330112923633

对应一下

image-20250330120524114

刚好符合SpawnActor的构造,1个指针+4个参数,使用脚本hook一下第3个参数

image-20250330120647854

上面是传入该函数的Rotation,下面是PlayerController的Rotation,可见刚好写反(此处调试时已把rand patch掉),把传参改回来就行

 复制代码 隐藏代码
    var func_addr = moduleBase.add(0x8D2ED80)
    Interceptor.attach(func_addr, {
        onEnterfunction (args) {
            dumpRotator(ptr(args[3]));
            var playerRotation = getControlRotation(actorAddrs["PlayerController"]);
            ptr(args[3]).writeFloat(playerRotation.Pitch);
            ptr(args[3]).add(4).writeFloat(playerRotation.Yaw);

        },
        onLeavefunction (retval) {
        }
    });

此时子弹即可正常向前方射出,但是准心偏下,这个就需要慢慢调参解决

异常点6:透视

可以看到FirstPersonCharacter_C和ThirdPersonCharacter都被渲染成红色,可以猜测二者被应用同一修改

网上查找过相关资料,透视可通过渲染自定义深度实现,Frida测试过这里并没有开启该参数

 复制代码 隐藏代码
function getRenderCustomDepth(actorAddr){
    var value = ptr(actorAddr).add(0x212).readU8();
    var bitValue = (value >> 3) & 1;
    return bitValue;
}

functiongetAllRenderCustomDepth(){
    const actors = getActorsAddr();
    for (const actorName in actors) {
        if (actors.hasOwnProperty(actorName)) {
            const actorAddr = actors[actorName];
            try {
                var value = getRenderCustomDepth(actorAddr);
                console.log(`RenderCustomDepth of ${actorName} at ${actorAddr}${value}`);
            } catch (e) {
                console.error(`Failed to get RenderCustomDepth of ${actorName} at ${actorAddr}${e}`);
            }
        }
    }
}

由于对UE4渲染这方面实在不熟悉,不清楚该功能如何实现。猜想可能是从源码上修改了Character.Pawn.Actor.Object的深度,使其渲染在其他Actor的顶层,同时使其渲染成红色。

相关Frida脚本

 复制代码 隐藏代码
var moduleBase;
varGWorld;
varGWorld_Ptr_Offset = 0xAFAC398;
varGName;
varGName_Offset = 0xADF07C0;
varGObjects;
varGObjects_Offset = 0xAE34A98;
var actorAddrs

var offset_UObject_InternalIndex = 0xC;
var offset_UObject_ClassPrivate = 0x10;
var offset_UObject_FNameIndex = 






请到「今天看啥」查看全文