您的位置:首页 > 移动开发 > Android开发

android混淆打包、反编译、重新打包签名

2015-12-13 16:31 806 查看
一、混淆打包

1. 在工程中配置 proguard.cfg 文件的内容, 比如哪些不混淆,或者保留等;

2. project.properties 中,加上 proguard.config= proguard.cfg

3. 打 release模式 或者 export signed apk ,就会打出混淆后的包

参考网址 :

http://blog.csdn.net/kangbulb/article/details/40625149

http://developer.android.com/tools/help/proguard.html#enabling

问题: 混淆打包遇到错误,则根据日志解决,另外,可能proguard版本低了;

注意事项:entity、enum 等,如果需要反射,如使用 alibaba.json、dbutils等,不要混淆这些类。

二、混淆后的 stack trace 日志查看

由于 混淆后的包的日志 中,类名等是a b c…等,所以需要 逆过来查看

工具 : retrace, 工具目录: sdk\tools\proguard\bin

命令: retrace.bat|retrace.sh [-verbose] mapping.txt trace.txt

例如:

retrace.bat -verbose mapping.txt obfuscated_trace.txt[日志文件]

反过来的 日志就跟未混淆过的日志一样 是“明文”了

ps: 每次打的包的 mapping.txt文件保存着,需要与 日志文件对应起来

没有mapping文件的方法:

1. 解压apk,取出 classes.dex文件;

2. dex2jar工具,将 classes.dex反编译为 jar文件;

3. jd-gui 工具查看jar包,找到对应的类,混淆后的代码类 按 a ~ z 的顺序排序,从代码猜测出是哪个类,从而找到对应的源码

4.


三、反编译

1. 查看资源文件

工具:apktool,

命令:apktool d -f demo.apk

ps: 该命令反编译出的 也有 smali文件, 与 bakSmali工具反编译出来的 貌似一样

查看反编译出的工程

工具:dex2jar、jd-gui

(1)解压apk文件[.apk重命名为.zip],取出 classes.dex文件



(2)dex2jar工具,将 classes.dex转换为 classes.jar文件

命令:dex2jar classes.dex



生成classes.jar文件



(3)使用jd-gui,打开classes.jar文件



参考网址:/article/1970420.html

四、smali查看 及 修改

工具:baksmali.jar[将classes.dex 转成整个工程的 smali文件]、smali.jar[将工程的smali文件转为一个 classes.dex文件]

1. 从 .apk文件中取出 classes.dex文件

2. baksmali.jar工具将其转为smali工程文件

命令:java -jar baksmali-2.0.3.jar -o classout/ classes.dex



其中 -o classout/ 表示转换出的smali工程文件 输出到 当前相对的 classout目录中





可以随意修改 .smali文件啦



如上面这个文件,将里面的“hello”字符串修改为 “hello after smali”;

将修改后的 smali工程文件重新转换为 classes.dex文件

此时使用 smarli.jar工具

命令:java -jar smali-2.0.3.jar classout/ -o newclasses.dex



此时,转换出 newclasses.dex文件

工具下载地址:http://download.csdn.net/detail/cxsjabcabc/8131635

五、重新打包、签名

在步骤四的基础上, 重新打包、签名;

1. 将 newclasses.dex 重命名为 classes.dex, 替换掉 apk包中原来的 classes.dex文件;



2. 如果该apk文件已经签过名了,那么 删除apk包中的 “META-INF”目录



3. 使用jdk中的 jarsigner.exe工具进行签名 [估计不重签名也能用吧]



命令:

签名结束后,得到签名后的包了;



注意:

(1) jdk1.7签名后安装时,提示

Failure[INSTALL_PARSE_FAILED_NO_CERTIRICATES]

原因:jdk1.7 与android有不兼容之处;

解决:改用jdk1.6进行签名;

(2)签名时需要 keystore,如果没有,则需要创建一个,参考网址: /article/7621132.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: