首页
社区
课程
招聘
[原创]逆向分析某手游基于异常的内存保护
发表于: 5小时前 3386

[原创]逆向分析某手游基于异常的内存保护

R0g 活跃值
2
5小时前
3386

去年元旦心血来潮逆向了一下传说中保护最强的手游,看完保护方案之后一直没时间把代码搬出来,一年后整理资料时偶然看到以前的记录,遂发布

分析日期:2025-01-08


总结

通过mprotect设置内存为 PROT_NONE 并使用sigaction注册信号处理接管访问被保护内存的SIGSEGV

随后在sigsegv_handler进行了一系列解析指令、模拟执行指令、回写解密数据的操作:

1、解析异常地址并判断是否属于被保护范围,解析ARM引发SIGSEGV的指令,获取操作数、寄存器信息

2、读取context中加密的寄存器值,解密数据并将其写回异常context

3、构造shellcode实现一个模拟单步,传入解密后的context,使用context结构中的寄存器信息单步执行

4、shellcode会将写入的单步指令的执行结果回写到context中,此时便可以跳过异常指令直接恢复执行

至此数据解密完成


分析

一、追踪目标代码

进入游戏对局后发现,全局World地址无法读取到正确的数据,查看maps发现该地址vma属性已经被设置成---p

既然无法访问,那么进程自身是如何访问的呢?遂在内核接管了下 mprotect 和 sigaction,发现游戏设置了SIGSEGV (11) 的 signal_handler 用来处理内存访问异常

二、SIGSEGV处理概览

ARM指令编码规则:https://developer.arm.com/documentation/ddi0602/2024-12/Index-by-Encoding

三、异常指令分类处理

1、处理 Loads & Stores Instructions

解析指令,拿到指令用到的的寄存器、立即数等信息,为下一步的模拟执行准备context信息

读取异常context中的用到的加密值,解密值并写回异常context

随后调用sub_75A299FDA0加载模拟执行用到的shellcode,填充需要模拟单步的指令

sub_75A299FDA0会mmap申请一块内存,写入原始的shellcode包,详见下文

刷新模拟单步的shellcode所在的指令和数据缓存,使用修正后的异常context执行shellcode,并从shellcode执行后的context中获取指令执行结果

将结果写回到SIGSEGV上下文寄存器中,修改PC跳过指令继续执行

2、处理 SYS Instructions

与直接读写内存的指令类似,解析指令拿到指令隐性使用到的寄存器值,解密值并将其写回context,随后直接模拟执行来修正异常指令执行后的context并跳过该指令

3、模拟执行shellcode构造

使用mmap申请一段rwx内存并写入shellcode,shellcode实现了加载context到物理寄存器,执行需要单步的指令,将物理寄存器写回context结构

代码预置了四个类似的shellcode,唯一区别是解析shellcode参数时用到的寄存器分别为X0、X1、X2、X3,其目的是为了防止解析参数的寄存器影响到模拟执行结果

构造完成后将shellcode地址存到线程相关的结构上,类似Windows的TEB,只不过这个是te*safe自己构造的

其中一个shellcode具体内容如下,其他的shellcode除存储context的寄存器不同外逻辑一致

以上内容仅供游戏安全领域学习交流,切不可用于非法目的!

引用

https://www.cnblogs.com/revercc/p/17641855.html

https://bbs.kanxue.com/thread-255711.htm

https://bbs.kanxue.com/thread-271200.htm

bb9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2S2M7X3#2Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8$3y4#2L8h3g2F1N6r3q4@1K9h3!0F1i4K6u0r3k6r3c8A6x3o6j5H3x3W2)9J5c8U0t1H3x3U0c8Q4x3X3b7I4x3W2)9J5c8V1W2F1k6r3g2^5i4K6u0V1j5Y4W2Q4x3X3c8q4L8X3y4G2k6r3W2F1k6H3`.`.

不知不觉又过去一个秋,好在在这条漫长寂寥的逆向之路上,并非我独行

期间感谢新哥、超哥、存哥等各位前辈,以及那些匿名的朋友,在各个方向上的指点和帮助

你们的经验与教诲,是我这一年最宝贵的收获


岁月不居,天道酬勤

最后祝各位2026新年快乐!愿大家不仅拥有技术的深度,更能拥有生活的热度


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 3小时前 被R0g编辑 ,原因:
上传的附件:
收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回