<魔塔50层>android反编译破解

原由:该游戏作者有点可恶,本来就是拿别人的游戏,还在游戏中加入积分的制度,打到20层后,需要积分。看不惯,就把它破解了,打到20层后,直接跳过要积分过程。
本文不提供破解后的安装包!


过程:
首先下载目标apk,我是从这里下载的:http://www.wandoujia.com/apps/com.ss.magicTower


然后下载工具,apktool+jd-gui+dex2jar+android sdk+jdk/jre
部分链接如下:
apktool(把apk文件反编译成dalvik中间码,smali):https://code.google.com/p/android-apktool/
jd-gui(查看jar源码文件):http://java.decompiler.free.fr/?q=jdgui
dex2jar(把dex转换成jar):https://code.google.com/p/dex2jar/


基本原理:首先把apk文件解压缩,然后提取其中的.dex文件,用dex2jar把dex文件转成jar文件,这样就可以用jd-gui打开jar文件,查看具体的java源码了。然后定位要修改的地方,再用apktool把apk文件转换成dalvik的中间码,定位到之前要修改的位置,然后修改保存,再用apktool重新打包成apk文件。最后一步,用jarsigner给前面生成的apk文件签名,这样就可以把咱重新制作的apk安装到android系统上了。


具体过程:
解压apk文件,可以用rar或者7zip,都行。
转换成jar:dex2jar.bat classes.dex
这一步后,就会在当前目录下生成一个classes_dex2jar.jar文件。


用jd-gui打开,并定位,这个不详讲。
(一般的程序都会用proguard来进行代码混淆,所以你这里看到的都是一些稀奇古怪的变量名,类名和方法名,这对定位会造成影响。但是花点时间,还是能够找出来的。proguard现在已经默认加到了android sdk里,在sdk/tools/proguard里,官网是http://proguard.sourceforge.net。在程序开发中,如果你希望用proguard来混淆自己的代码,只需在default.properties里添加一句"proguardproguard.config=proguard.cfg",就可以启用proguard)


apktool反编译:apktool.bat d mota50.apk mota50
命令完成后,会生成一个mota50的文件夹,定位到smali\com\ss\magicTower\k.smali文件,用文本编辑器打开它。然后修改相应的位置。我这里就是修改了判断条件那个地方,把if(a.h>180)改成if(a.h>-180),这样就永真了,所以就跳过验证了。
(android用的是dalvik VM的中间码,与pc端的java中间码不同,smali文件就是dalvik的中间码,你可以理解为汇编语言,具体关于dalvik中间码定义,可以看这里http://source.android.com/tech/dalvik/dalvik-bytecode.html)
修改完之后,需要重新打包成apk文件:
apktool.bat b mota50(这个命令,会在mota50文件夹中生成build和dist,两个文件夹,apk文件存放在dist)
你也可以用这个命令:apktool.bak b -f mota50 newmota.apk


这个命令会在当前目录生成一个apk文件。
这样生成的apk文件并不带签名,而在android中,不带签名的文件,是无法安装的。所以我们需要给它重新添加签名。
签名需要密钥,可是我们手上没有,需要自己生成一个,命令如下:
keytool -genkey -v -keystore magic.keystore -alias magic.keystore -keyalg RSA -keysize 2048 -validity 10000
具体参数含义,请看这里https://developer.android.com/tools/publishing/app-signing.html
注意:-keystore和-alias参数后面跟的名字一定要一样,否则后面用这个密钥去签名apk的时候,会提示找不到证书链!


这个命令完成后,会在当前目录生成一个magic.keystore密钥文件
有了密钥,我们就可以通过下面的命令,给apk进行签名:
jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore magic.keystore -signedjar mota50_signed.apk newmota50.apk magic.keystore
这个命令就是用magic.keystore密钥给newmota50.apk签名,并生成一个mota50_signed.apk的文件,这就是最终的文件了。
注意:由于在jdk7中,默认的签名算法已经改变了,所以你必须自己指定签名算法(-sigalg)和摘要算法(-digestalg)。否则签名无效,无法安装。
所以以前用的类似命令:jarsigner -verbose -keystore magic.keystore -signedjar mota50_signed.apk newmota50.apk magic.keystore虽然能够成功签名,但是无法安装。


当然,上面介绍的是手动签名。你也可以通过eclipse,或者其他的IDE来进行签名,网上也有一个 auto_signed图形工具来签名。这里就不在复述。


安装的时候,你可以安装在android emulator里,或者真机里:
adb install mota50_signed.apk


总结:该文只是介绍了真个破译的流程,对于真正关键的部分(修改smali文件),并没有做过多的介绍,其实android下的smali文件跟平常碰到的汇编代码是一样的,只不过指令集不一样,名字不一样而已。如果之前干过c/c++逆向的话,是很容易上手的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值