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

admin 2026-01-05 18:13:50 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文逆向分析某手游基于异常的内存保护机制。该机制通过mprotect将内存设为不可访问并注册SIGSEGV处理程序。当访问触发异常时,Handler解析ARM指令,解密上下文寄存器值,构造Shellcode模拟单步执行,将结果回写并跳过异常指令,从而动态还原数据并保护内存安全。 综合评分: 88 文章分类: 逆向分析,移动安全,二进制安全


cover_image

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

R0g

看雪学苑

2026年1月4日 17:59 安徽

分析

一、追踪目标代码

进入游戏对局后发现,全局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的寄存器不同外逻辑一致

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

总结

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

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

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

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

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

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

至此数据解密完成。

引用

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

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

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

https://developer.arm.com/documentation/ddi0602/2024-12/Index-by-Encoding

#

看雪ID:R0g

https://bbs.kanxue.com/user-home-910874.htm

*本文为看雪论坛优秀文章,由 R0g 原创,转载请注明来自看雪社区

往期推荐

从ANGR-CTF项目入手ANGR和符号执行技术

AI时代-逆向工作者该如何用好这一利器

EXIF解析缓冲区溢出漏洞分析与利用

从C到Pwn:栈溢出漏洞利用实战入门

Android-ARM64的VMP分析和还原

球分享

球点赞

球在看

点击阅读原文查看更多


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:看雪学苑 R0g《逆向分析某手游基于异常的内存保护》

评论:0   参与:  0