首先介绍一下,Android 下面的几个必不可少的破解工具,SMALI、BAKSMALI 和 APK 签 名工具(我用的是RZ_mass_apksign),这就可以使得你在没有源码(其实一般都不可能有) 的情况下,如何对未知的APK 进行破解。 其次是 Android的 APK 结构。Android的 APK 是一个安装包,每一个APK 都有编译软件 ECLIPSE 的签名,有的还有证书等等, APK的意义等同于WM下的CAB和 Symbian下的 SIS (有 证书的算是SISX)。其实我们可以用WINRAR直接打开Android的 APK,因为事实上它是一个 ZIP 格式(我曾经用 MINIZIP 的代码修改过、重组过,这个是完全肯定的)。在这个 APK 包 中有几个非常重要的文件,例如AndroidManifest.xml是表示了这个APK的权限,而还有一 些是资源文件,一起打包在内,我们需要修改的就是classes.dex文件。 开发过 Android的都知道,Android其实不是用的JVM 来运行的,严格说是 dalvikvm。 而在 APK 中的 classes.dex 就是一种字节码文件,其含有你编写的 JAVA 的代码信息。 BAKSMALI 的作用是把 classes.dex 转为一种具有可读性的 SMALI 文件,其实代码形式有点 汇编的感觉。而 SMALI 的作用就是相反的,把 SMALI 文件,包括可能被你修改过的 SMALI 文件一起重新打包生成 classes.dex,这个时候,classes.dex 就嵌了你的代码了。不过值 得注意的是,仅仅是组好了包,你还不可能安装得成,因为签名。不过既然有签名,ECLIPSE 也是可以签名的,这个东西就目前了解看来显得有点废。 好吧,接下来就是破解了: 首先我把自己编的 APK——AndroidPassTrough.apk 用 WINZIP 打开,然后把里面的 classes.dex提取出来,用SMALI 打开,修改,所用的命令和如下图 2 所示:
然后,我们进入class 目录下,搜寻足迹,因为我们编的代码中用到了提示Toast,所 对应 SMALI代码修改的方式如下图 3所示:
在这里,“#”表示注释号,我将判断语句注入之后,保存修改,用SMALI 重新组包:
然后用 APK签名工具签名之后重新安装,就完成了破解。前面说过密码是3位“456”,
但是,这还不够。假设说,人家安装的APK且有数据在上面,而我的目的不是覆盖安装,
Android 手机的实时破解需要 ROOT 的支持,这个问题我个人没法解决,但是网上还是 |