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

一、混淆打包
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工具反编译出来的 貌似一样

  1. 查看反编译出的工程
    工具: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文件
    这里写图片描述
    参考网址:http://blog.csdn.net/vipzjyno1/article/details/21039349

四、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目录中
这里写图片描述
这里写图片描述

  1. 可以随意修改 .smali文件啦
    这里写图片描述
    如上面这个文件,将里面的“hello”字符串修改为 “hello after smali”;
  2. 将修改后的 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,如果没有,则需要创建一个,参考网址: http://blog.csdn.net/aeolus1019/article/details/8121031

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值