发新帖

新手请教加密的DLL文件怎么解密

[复制链接]
34929 18
大家好,我是很初级的逆向新手,开始学习逆向还不到一周。前几天开始着手破解一款安卓平台Unity3d做的游戏:Dominations,纯粹为了自娱自乐。恶补了很多安卓逆向的相关知识,用apktool+.net reflector成功>破解了内购道具,可以从1级一直升到满级。之所以这么顺利是因为这个游戏的DLL完全没有保护,逆向出来的代码非常清晰,读和改代码只用了很短的时间,而且他们服务器端的验证也很少。

出于学习目的,我开始着手破解“全民奇迹”,同样是一款用Unity3d开发的游戏。用apktool解包后发现smali代码是经过混淆的,CSharp-Assembly.dll也是经过加密的。尝试用.net reflector和查壳工具打开,都提示PE头损坏,没有"MZ"字段。用Hex编辑器打开,发现应该是加密过。下图是这个DLL的头:


下图是正常PE头,可以发现编码应该被某种算法转化了,最明显的特征是所有的00都变成了71。


我把百度和谷歌都翻遍了,也找不出来怎么解密这种DLL文件。我自己想到几种解决方案,不知道靠不靠谱:
1. 既然是加密的DLL,那么运行的时候必定需要解密,所以解密算法应当藏在apk包的某个位置。我可以通过查看加密算法的代码来进行解密,但具体解密算法放在哪,我找到后该怎么进行解密,我就不得而知。
2. 如果上述办法不能解,那么可以dump程序运行的内存来破解。这种高深的办法对我现在的水平来说实在太难了,我看不懂汇编代码,也不知道怎么dump,dump之后该从何入手进行破解。

相比这种DLL文件大神们很容易就能破解吧,我只希望大神们能提供一些破解的思路,从何处入手比较好,该学习什么知识等等。谢谢各位了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

精彩评论18

dara0418    发表于 2015-5-23 05:20:20 | 显示全部楼层
自己坐沙发。。。刚注册1个小时就来发帖了,希望能有人提供思路

举报 使用道具

回复 支持 反对
Visidors    发表于 2015-5-23 14:33:43 来自手机  | 显示全部楼层
不会,带你顶顶,估计过个几天也没人回答

举报 使用道具

回复 支持 反对
Visidors    发表于 2015-5-23 14:46:10 来自手机  | 显示全部楼层
我有个朋友和你情况一样,不嫌弃就一起吧,1533534443

举报 使用道具

回复 支持 反对
Sarkozy    发表于 2015-5-24 21:36:52 | 显示全部楼层
新手就想破网游。。。。。初生牛犊不怕虎。关于加密,先别管楼

点评

呵呵,我还不算太新手,专业做软件的,对于计算机结构和网络知识也有一定基础。前面那个游戏之所以那么容易破解,是因为代码可以完全逆向,服务器端也没有严格的验证。。。  详情 回复 发表于 2015-5-25 20:04

举报 使用道具

回复 支持 反对
Sarkozy    发表于 2015-5-24 22:30:56 | 显示全部楼层
你可以自己分析下
其实从pe头你自己就能发现猫腻了,这就是用了换位算法的

点评

嗯,你说的很有道理,我研究研究看看。我对于加密解密是没啥了解的了  详情 回复 发表于 2015-5-25 20:06

举报 使用道具

回复 支持 反对
dara0418    发表于 2015-5-25 20:04:14 | 显示全部楼层
Sarkozy 发表于 2015-5-24 21:36
新手就想破网游。。。。。初生牛犊不怕虎。关于加密,先别管楼

呵呵,我还不算太新手,专业做软件的,对于计算机结构和网络知识也有一定基础。前面那个游戏之所以那么容易破解,是因为代码可以完全逆向,服务器端也没有严格的验证。。。

举报 使用道具

回复 支持 反对
dara0418    发表于 2015-5-25 20:06:19 | 显示全部楼层
Sarkozy 发表于 2015-5-24 22:30
你可以自己分析下
其实从pe头你自己就能发现猫腻了,这就是用了换位算法的 ...

嗯,你说的很有道理,我研究研究看看。我对于加密解密是没啥了解的了

举报 使用道具

回复 支持 反对
kuulf    发表于 2015-5-27 00:09:12 | 显示全部楼层
按位异或0x71不就出来了。。

举报 使用道具

回复 支持 反对
kuulf    发表于 2015-5-27 00:13:39 | 显示全部楼层
8e -- ff        1000 1110 --  1111 1111 =======> 1000 1110 ~ 0111 0001 = 1111 1111
00 -- 71        0000 0000 --  0111 0001 =======> 0000 0000 ~ 0111 0001 = 0111 0001
03 -- 72        0000 0011 --  0111 0010 =======> 0000 0011 ~ 0111 0001 = 0111 0010
04 -- 75        0000 0100 --  0111 0101 =======> 0000 0100 ~ 0111 0001 = 0111 0101
40 -- 31        0100 0000 --  0011 0001 =======> 0100 0000 ~ 0111 0001 = 0011 0001
4d -- 3c        0100 1101 --  0011 1100 =======> 0100 1101 ~ 0111 0001 = 0011 1100
0E -- 7f        0000 1110 --  0111 1111 =======> 0000 1110 ~ 0111 0001 = 0111 1111

点评

我也刚知道,我对于各种位操作实在有点蒙,当初没学好,所以看不出来。已经自己写了程序还原了DLL,可以逆向出C#代码。谢谢你了  详情 回复 发表于 2015-5-28 02:37

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表