http://blog.csdn.net/sin90lzc/article/details/7481361
android软件破解的工具:
smali.jar——google官方提供,主要作用是把smali文件打包成class.dex文件
baksmali.jar——google官方提供,主要作用是把*.odex文件反编译为smali文件
apktool.jar——第三方提供?用于解析*.apk文件,生成smali文件和解析资源文件
signapk.jar——apk签名工具
ddms——ADT中的一个调试工具
破解工具的使用方法:
http://sin90lzc.iteye.com/blog/1198173
除了这些破解工具之外,还需要对smali语法有一定的了解。下面的网址对smali的语法有详细的说明:
http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html
最后,最好对Android的应用开发有一定的了解,至少对Android的四大组件有深刻的认识:Activity,Service,ContentProvider,BroadcastReceiver
Android应用程序在某些机器上不能运行、崩溃的原因不外乎以下几点:
原因一:该应用程序需要依赖于生产厂商的框架(像三星,它对android的framework做过大量的修改)
错误提示:找不到field,找不到对应的方法,找不到相应的类
解决途径:
1.在smali中尝试屏蔽掉相应的field,method,或类的调用,然后进行大量测试,确保不影响正常使用
2.反编译framework,找到缺少的field,method,类的相应smali文件,根据smali文件编写java源码。(当smali文件比较小的时候,这个方法才可行,否则尽量避免用这种方法)
3.实在无招的情况下,只能把第三方的framework的smali文件复制到自己的framework里面(非常槽糕的方法)。
4.对于应用程序需要依赖第三方低层的功能实现时,而我们的低层却没有这样的功能(比如说视频通话等),此时可以使用上面的方法一解决,也可以参考技术四。
原因二:资源文件不存在,像color,drawable,string等等的资源
错误提示:资源文件找不到
解决途径:
在技巧一中有详细说明。
原因三:应用程序需要一些函数库的支持(在目录/system/lib中缺少相应的函数库)。
错误提示:一般都会抛出UnSatisfiedException异常,后面紧跟所缺函数库的库名。
解决途径:
1.在第三方的函数库中找到对应的so文件,然后复制到自己的函数库中。
2.如果函数库与函数库之间有着各种耦合的时候,方法一可能就会不适用了(看运气呗)。这时候就只能反编译so文件了(这个是C/C++的反编译的应用了,需要再学习)
原因四:应用程序没有相应的权限
错误提示:nopermission
解决途径:
1.在AndroidMenifest.xml文件中添加<user-permision />添加相应的权限
原因五:由于应用程序本身的一些安全机制或条件判断影响程序的表现
解决途径:
1.反编译成smali文件,使用技巧三的方法跟踪程序的运行,耐心地分析程序的逻辑,找到可疑smali代码,屏蔽或修改代码。
原因六:数据库的结构不一样
错误提示:缺少某个字段或类型不匹配
场情:比如android的音乐播放器与三星的音乐播放器,它们的数据库结构由MediaProvider.apk这个包提供。然而两者在MediaProvider.apk中关于数据库结构的定义是不一样的,三星音乐播放器需要更多的字段去保存信息。
解决途径:
1.拿上面场情为例,反编译MediaProvider.apk,从smali文件中找到组件ContentProvider的定义(smali文件),在该smali文件中找到关于SQL生成表结构的字符串(如:create table...),修改该SQL语句来适合三星音乐播放器的需要,然后重新打包回apk文件。
原因七:应用程序需要引用第三方提供商自定义的框架(比如,三星的/system/framework目录下有twframework.jar、twframework-res.apk,这个就是三星的UI框架)
错误提示: