如何绕过某讯手游保护系统并从内存中获取 Unity3D 引擎的 Dll 文件
某讯的手游保护系统用的都是一套,在其官宣的手游加固功能中有一项宣传是对比较热门的 Unity3d 引擎的手游保护方案,其中对 Dll 文件的保护介绍如下, “Dll 加固混淆针对 Unity 游戏,对 Dll 模块的变量名、函数名、类名进行加密混淆处理,有效提高静态分析门槛”。
通过动态分析了它的保护方法,通过改源码刷机的方法绕过了它的保护方案(也可通过 hook libc.so 中的 execve 函数绕过保护),接下来就可以直接使用 GameGuardain 这个神奇附加上去进行各种骚操作了。这里主要讲一下如何去从内存中获取 Assembly-CSharp.dll 和 Assembly-CSharp-fristpass.dll 文件。
绕过保护后,先启动 GameGuardian,再启动相关游戏,在某讯的 Logo 刚好出现时附加到游戏上,待游戏进入到登录页面时,通过内存搜索值的方式搜索 9460301(0x4D 5A 90 00)的十进制表示方式。这也是 PE 文件 Dos 头的特征码。搜索步骤和结果如下:
记录下第一个值和最后一个的值,接下来的 dump 步骤需要(dump 时,开始地址尽量比第一个值小,结束地址尽量比最后一个地址大,上下浮动的大小尽量大于游戏中最大的 Dll 文件所占内存大小)。
等待保存完毕以后就可以从手机上拉取到本地了。获取到文件的结果如下:
接下来可直接使用 get_dll_from_bin.exe 这个工具直接从所有的 bin 文件中 dump 出所有的 dll 文件。操作后可用 dnSpy 直接打开所有的 dll 文件查看是否存在 Assembly-CSharp.dll 和 Assembly-CSharp-fristpass.dll 这两个文件。结果下图(本次获取到 12 个 dll 文件):
工具获取到 dll 后直接使用数字命名,直接通过 dnspy 打开看看是否有最终的目标 dll。
获取到 dll 如下:
并不存在所需要获取的 dll 文件。后面经过分析可知这套保护方案把 Dos 头的前 128 字节清空了。接下来就需要单个文件进行操作和修复了,使用 010editor 打开文件,搜索 PE 头的文件特征(50 45 00 00 4c 01 03 00)。然后通过搜索到的位置往前查看 128 字节是否被清零,如果是先把正常的 pe 文件的前 128 个字节复制,再往搜索到的位置的往前 128 字节进行粘贴修复即可。如图:
经过反复操作和修复后,再通过 get_dll_from_bin.exe 操作修复的 bin 文件即可。
经过操作后获取到如下的 Dll:
通过与解包后的资源文件大小相比较,3.dll 大小和 Assembly-CSharp.dll 相同。
12.dll 大小和 Assembly-CSharp-firstpass.dll 相同。
分别将 3.dll 和 12.dll 文件拖入 dnspy 中,如图所示 3.dll 是目标文件 Assembly-CSharp.dll:
12.dll 是 Assembly-CSharp-fristpass.dll:
到此,所有目标文件已经获取完毕。
排版有点渣,将就看吧。主要是思路。望大牛轻喷。
最后 我们分享个好用的工具。
使用 ipaguard 来对程序进行加固
代码加固是进一步保护应用的一种方式,通常通过特定平台来对应用进行加固处理。
这边以 ipaguard 为例,目前还在免费阶段,想薅羊毛的快快试试。
Ipa Guard 是一款功能强大的 ipa 混淆工具,不需要 ios app 源码,直接对 ipa 文件进行混淆加密。可对 IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加 ipa 破解反编译难度。可以对图片,资源,配置等进行修改名称,修改 md5。只要是 ipa 都可以,不限制 OC,Swift,Flutter,React Native,H5 类 app。
所以就要使用到混淆器,混淆器是把里面的代码变量等信息进行重命名,这样可读性会变得非常差,接着,
到这里,我们完成了对代码的混淆,但是还没有进行加固,防止反编译,所以,请往下看
然后导入自己的包就可以了,这里是流水式的走下来,所以只需要导入和导出就可以了,
添加单个文件,选择好刚刚混淆后的包,然后你做的事情就是等,等待上传完--加固完--下载完--已完成,当到已完成的时候,说明这里已经可以导出了,导出需要前面提到的自己创建的签名,这里可是会用到的,如果不用,则包安装包可能会出现问题
选择导出签名包,选择签名文件,输入密码,然后点击开始导出
导出的包是经过混淆,经过加固比较安全的包了
评论