查找
打印 上一主题 下一主题

[逆向破解] 三战安卓全民奇观逆向脱壳解密

[仿制链接]
检查: 7005|回复: 5

913

主题

2

老友

7730

积分

神功绝世

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

积分
7730
跳转到指定楼层
1#
宣布于 2015-9-7 11:31:00 | 只看该作者 |只看大图 回帖奖赏 |倒序阅览 |阅览方式
许多人现在都期望了解有关加密解密,加壳脱壳的内情,或教程,或常识。很抱愧的通知咱们,现在这些东西估量很难学到,会的也不会透漏。因为许多原因,总归是不方便宣布。在写这篇文章前,我也有许多思想斗争和忧虑,但仍是决议拿捏尺度,适度写出来,本文仅仅为了技能沟通,勿用于任何用处,不然与作者无关。对应APK脱壳什么的,我是真的不能出教程,或许让咱们要绝望了,因为富贵也说了,安卓这一块外国是几乎没有壳的,和电脑端的恰恰相反,电脑端的壳大部分是外国,国家或相关权威部门都支撑脱壳,而安卓这块外国因为一些咱们都知道的问题,他们不会进行代码的盗取,盗版等,恰恰只要国内才鼓起加壳加固,所以往往是360,百度,爱加密等,一些大牛自身就在这些单位作业,就更不或许泄漏核心技能了。所以,我期望仍是死心吧。可是,U3D这一块的解密,我不敢说自己是榜首个做的,不过也是较早进行测验和打破要害点的,具有很大意义上的独立研讨版权,比方0X71异或解密的榜首个东西完成。我会掌握分寸,同享一些,让咱们一起学习和研讨,当然,我供认的确是有必定的证明自己实力的目的,期望借此能够引起相关单位对我的支撑,但那不是要点,至少我不是很垂青,正如我想说,“人应无名,以便安心练剑”。好了,下面我就以全民奇观为例,说一说加密DLL的问题。
全民奇观,这个游戏必定都很了解,这篇文章就仅从技能层面上,对它的加密算法及相关做一个扼要的剖析。全民奇观大体上假如从加密来看,能够分为1.4,1.5,1.6三个年代。三个年代的加密都有自己独立的特征,但是不变的是,每一代全民奇观都是把解密算法写在了libmono.so的mono_image_open_from_data_with_name函数中。本文的视点是从静态剖析为主,首要训练加密解密算法的剖析才能,而不是用动态调式像脱壳那样直接把壳脱下了。关于U3D游戏的动态加载加密DLL的动态调式和脱壳,我现已在上文《U3D动态调式和脱壳DLL》中为咱们把结构展现了出来,有爱好能够看看。
1. 全民奇观1.40年代
这个游戏是U3D开发的不错的游戏,然后它的诞生让我分外引起注重,因为自它诞生开端就注定了一个年代的完毕,这个年代就是U3D的DLL再也不是裸奔,一点点没有维护了,然后拿到reflector中就能够随心所欲了。全民奇观是榜首个进行DLL加密的游戏,那时我和法总他们都有些呆若木鸡,因为榜首次发现DLL放到reflector中呈现“它不包含MZ头”的过错提示,接着运用winhex翻开Assembly-csharp.dll,是下面这种状况:

而上文所说到的不包含MZ是什么意思呢,DLL是PE文件,PE文件头的标识位就是MZ。假如没有MZ头,则会以为这个文件不是PE文件,其实意思就是这个PE文件被处理了,有或许混杂,有或许是重写移位,也或许是加密。在电脑范畴上,重写移位比较多,也就是运用OD和汇编把PE文件头改造,乃至删去,然后重写在其他区段,再以汇编衔接。这种方法常用于免杀,被称为PE文件头免杀,也是中高层技能,PE文件格局及结构也是系统安全范畴和免杀技能范畴很重要的一块,不了解的能够看我的《七少月免杀榜首季教程》。而在安卓端,呈现这种状况,咱们往往是以为被加密了,先来看一看正常的Assembly-csharp.dll文件的HEX:

从这儿,咱们能够看出,4D5A就是MZ头。假如你领会才能高一点,马上就会理解,已然是文件格局头,那么只要是DLL或PE文件,或许在前面几十行的HEX应是相似的。这种主意是对的。那么,这有什么效果,咱们再看看全民奇观1.4的加密DLL的HEX,其实你能够发现这种加密是很简略的,但凡本来该00的HEX全部是71,并且两个本来相同的HEX,加密后仍是相同,比方榜首行的C和D,本来都是FF,加密后都是8E。这通知咱们,这种加密是十分简略的,没有任何的位移替换等,仅仅把本来的HEX操作数进行必定算法变为另一个罢了。咱们拿出三个HEX十六进制数比照一下:
4D------3C;5A--------2B;00----------71。
把它们转为二进制,不难发现,就是进行按位对71进行异或。当然,后来发展为按列异或,隔位异或,等等,但原理相同。而现在,这种简略异或方法已很少运用,但它是一个里程碑,具有重大意义。接下来,咱们要找到这个DLL是在哪里解密的呢,找到libmono.so的那个mono_image_open_from_data_with_name要害函数,咱们很简略看到以下代码:

我剖析过 unity3d的mono源码,原生的这个函数中,是不存在任何循环结构体,当然更没有异或,所以这个当地就是重写mono结构,参加解密算法的当地。下面就是动态调式也好,LOG输出也好,静态剖析也好,总归最终就能断定这种加密算法就是先把文件转化为byte字节省,然后按位对0x71进行异或。这种加密是对称加密,所以加密一次是加密,加密第2次就是解密,也就是说加密和解密的代码是相同的,要害代码如下,这儿我选用的是JAVA,不过在这儿要感谢一个逆向未来的朋友,受他的启示,后来我用C#修正重写为东西。

咱们能够做成东西,进行解密DLL,当修正完后,再点击解密即为加密,替换原DLL:



至此,还并没有完毕,我又做了几个试验,其实最重要的是试验的才能和方向的断定,当然这个需求长时间的经历。我比较了全民奇观1.4.0和1.4.3两个版别的libmono.so,发现要害函数及解密算法处是共同的,更斗胆一点,进行替换,游戏能够正常翻开。再比较1.5.0的libmono.so发现相关代码处存在很大不同,也不能进行替换。
2. 全民奇观1.5年代
跟着技能发展,异或71加密现已被筛选,接着你会看到DLL的HEX发作变化,如下:

这个十分有意思,应该是特别有意思,假如是新手,你或许觉得,这太简略了,经过调查,除了第1个HEX和正常的DLL的HEX不相同,后边好像是相同的。许多人直接把43改为4D,然后放到reflector中,成果当然是报错,过错是什么呢?变为大约是什么签名过错,这就通知咱们,首要它是处理了加密了,其次即便解密了,也或许需求修正。因为现在该游戏仍然是运用这种加密方法,更多细节就不方便讲下去,这儿我只从代码和算法的技能视点来看一下。咱们仍然是到libmono.so的要害函数,我在下面图中标示了几处,尤其是函数EncryptXor2是要点,有爱好能够跟下去剖析,仍是那句话,我不方便多说:

我在全民1.5年代里,仍旧做了试验,来断定dll解密算法的方位,这次我一起运用1.5.0版别,只不过一个是百度版,一个是360版,我发现两者libmono.so中的要害函数代码一模相同,替换后,游戏都能正常运转,能够进行交换。
3.全民奇观1.6年代
这个年代的全民奇观加密算法和1.50是相同的,但是不同的是,你会发现它多了一些.mdb文件。如下图:

.mdb是数据库ACCESS的文件,显着这是个幌子,用HEX翻开如下:

那么这个文件究竟是什么,用来干什么,它加进来这种机制起到什么样的维护呢?我以为,这是一个备份文件,是Assembly-csharp.dll的另一种方式的备份文件,效果当然是增强稳定性,更首要是防修正。为此,我做了一个试验,我将本来的Assembly-csharp.dll删掉,换为一个没有加密的其他游戏的Assembly-csharp.dll,公然不出我所料,一般来说,这游戏必定是不能运转了,但全民奇观仍然很正常运转着。这就通知咱们,这个.mdb其实就是Assembly-csharp.dll的备份加密文件。咱们来到libmono.so中再看看:

看了我符号的几个当地,现已很理解了,整个函数意思是copy,就是仿制,它是什么的仿制?是对应DLL的仿制,仍然那句话,我欠好再多说更多,只能说,跟下去你能发现这个mdb文件是怎样到达备份功用,并当DLL的确出问题,或被检测验证反常时,怎么解密仿制放到内存中,成为DLL进行正常并按本来运转的。最终,来一个图片:



郑重声明:本文仅以技能评论为目地,请勿用于任何用处!!!!

输入你的邮箱订阅论坛最新动态,还有时机免费取得VIP会员的时机哦~

7

主题

0

老友

269

积分

资助会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
269
2#
宣布于 2015-9-9 12:49:29 | 只看该作者
论坛不能没有像楼主这样的人才啊!我会一向支撑bwin官方网站论坛

0

主题

0

老友

65

积分

资助会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
65
3#
宣布于 2015-9-10 15:36:20 | 只看该作者
这个楼主很屌~~~~ 哈哈哈哈~~~~                          

6

主题

0

老友

197

积分

资助会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
197
4#
宣布于 2015-11-15 15:51:20 | 只看该作者
衔接呢。。。。。。。。。。。。。。。。。。。。。。。。。。。

6

主题

0

老友

151

积分

资助会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
151
5#
宣布于 2016-8-6 18:16:38 | 只看该作者
楼主太凶猛了!楼主,I*老*虎*U!我觉得bwin官方网站论坛真是个好当地!

5

主题

0

老友

46

积分

资助会员

Rank: 14Rank: 14Rank: 14Rank: 14

积分
46
6#
宣布于 2019-1-30 17:03:47 | 只看该作者
思静跟打工哪个凶猛
 懒得打字嘛,点击右侧方便回复【左边自定义内容】 
您需求登录后才能够回帖 登录 | 当即注册

本版积分规矩

在线客服
快速回复 回来顶部 回来列表