djcsdjcs 发表于 2016-11-12 09:13

再战全民奇迹2.3最新版

本帖最后由 djcsdjcs 于 2016-11-12 09:32 编辑

本文为论文性质,请勿转载;本文仅学习讨论加密解密技术,勿用于其他任何用途,否则与本人无关!!!!本文延伸于七少月 三战分析全民奇迹
http://www.52pojie.cn/thread-409754-1-1.html 向七少月老师奠定的基础性工作表示感谢!
从官网上下载全民奇迹最新的2.3版本,解压后发现 assets\bin\Data\Managed目录下多个dll加密,去lib目录下查看libmono.so文件,大小9.49MB,而该APK开发的unity版本号为5.2.4,正常使用的标准libmono.so大小为3M多,此处明显异常,结合之前版本的加密思路,可以断定DLL文件的加密逻辑仍在libmono.so文件中。把这个so丢到IDA中瞅瞅,核心函数被加密(见最下面图1)


这个加密比较弱,卖个关子,看看交叉引用或者相关的内存控制修改API,都可以成功解密,解密后是这样的,看起来很眼熟吧


不过伪代码从篇幅上讲比之前的版本要长不少,看起来是增加了些难度。先动态起来试试,目的是定位到解密代码,使用IDC脚本抠出解密后的assembly-csharp.dll,并顺便跟跟解密逻辑,不过第一次动态失败了,没在我设的断点停下来,不知道是加了反调试还是我的小米1S问题,不过办法多得很,我也懒得折腾小米了,换第二套方案,让游戏正常运行然后从内存中抠出来解密后的assembly-csharp.dll,同时把libmono.so换成unity官方标准的,重新打包APK,很遗憾,过了进场画面后闪退,这个原因我还不清楚,希望能跟大家交流交流(标准libmono.so的版本绝对没错,也不是签名验证的问题(我测试机屏蔽了签名校验))。
接着换第三套方案,静态分析,在之前的工作经历中做过较长一段时间的嵌入式操作系统逆向工作,挺喜欢通过分析把伪代码吃透变成自己的代码,经过研读mono_image_open_from_data_with_name方法,发现这个加密dll的代码逻辑上分为两部分,判断DLL为"Assembly-CSharp-firstpass.dll"或"Assembly-CSharp.dll"的时候,启用第二段进行解密,判断DLL为"Assembly-CSharp.dll"的时候,启用第一段进行解密,总而言之就是核心的Assembly-CSharp.dll经过两个逻辑的解密才达成彻底的解密,将解密逻辑逆回去便可以写出加密逻辑(留着修改DLL后用),值得注意的一点是,解压APK得到的看起来加密的assembly-csharp.dll其实是个傀儡。。。真正使用的是混在了libmono.so文件中,这也是大小9M多的根本原因。编写C#代码成功的对几个dll进行加解密,至此安全机制分析完毕。技术交流可以站内我



小新不用蜡笔了 发表于 2016-11-12 09:43

不错   支持                                                                                          

djcsdjcs 发表于 2018-4-20 10:32

tzlaoliu 发表于 2018-4-17 11:48
楼主有研究这游戏的最新版8.3的客户端么?求指教

看了一下 没啥变化

Ren患不均 发表于 2016-11-12 10:06

很好很好,虽然我没弄懂……

z317988139 发表于 2016-11-12 10:27

好牛逼,可是看不懂

小浪妖 发表于 2016-11-12 10:38

昨天开放注册 今天看到好人呀

Mariolll 发表于 2016-11-12 10:51

很强 学习学习

努力的小七 发表于 2016-11-12 10:58

好吧,感谢分享

雷锋i 发表于 2016-11-12 11:01

佩服佩服,真厉害,看不懂

hosia 发表于 2016-11-12 11:03

看不懂,感谢分享。

lipengyu 发表于 2016-11-12 11:11

不错哦。继续努力。做等大神
页: [1] 2 3 4 5
查看完整版本: 再战全民奇迹2.3最新版