apk破解攻略

Apk破解方案

一、准备工作

a) 安装jdk:用于创建数字证书与签名

b) apktool工具:反编译apk文件,得到资源文件、配置文件、smali文件、dex文件

c) dex2jar工具:将dex文件转换成jar文件

d) Jd-jui工具:查看jar文件源码

e) 配置环境变量,不配置也可以,不过操作麻烦(不配置环境变量的话,使用每个命令/工具要到命令的当前文件夹才能执行),你懂得……

f) 下载地址:

i. 官方下载:

1. Jdk
http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe

2. Apktoolhttp://code.google.com/p/android-apktool/

3. Dex2jarhttp://code.google.com/p/dex2jar/

4. Jd-jui:http://java.decompiler.free.fr/?q=jdgui

ii. 我使用的:http://download.csdn.net/download/wangfayinn/4836532 

二、反编译

a) apktool d iapk.apk iapkFile(可选,默认在当前目录下)

i. 执行此操作后,会在iapkFile文件夹下得到一个iapk文件夹,默认是在当前目录下

ii. Apktool d -s xx.apk

1. 可以获取dex文件,但是没有出现smali文件

三、修改

a) 根据需求修改iapk文件夹下内容

i. 修改res资源

ii. 修改manifest配置文件

1. 案例如:http://tieba.baidu.com/p/1272897204 

iii. 修改smali汇编代码

1. smali文件其实就是dalvik虚拟机运行的dex字节码对应的汇编文件,更多介绍请看:http://code.google.com/p/smali/

2. 案例如:http://blog.csdn.net/cloudwu007/article/details/6851800 

四、重新打包签名

a) 编译打包

i. apktool b IAPK

ii. 这时会在IAPK文件夹下生成两个文件夹:build(存放中间文件)、dist(存放打包生成的apk文件)

iii. 注意:此时dist文件夹下的iapk.apk文件还没有签名,所以无法安装运行。

b) 使用jdk提供的kyetooljarsigner签名

i. 准备签名文件(数字证书)

1. keytool -genkey -alias tony.wang.keystore -keyalg RSA -validity 20000 -keystore tony.wang.keystore

2. 参数说明:alias:别名 keyalg:算法 validity:有效期 keystore:密钥库名称
详细使用说明请参看:http://blog.csdn.net/Mr_Von/article/details/3089839 

ii. 签名:

1. jarsigner -verbose -keystore tony.wang.keystore -signedjar newiapk.apk iapk.apk tony.wang.keystore

2. 参数说明:

[-keystore <url>]            密钥库位置

[-storepass <口令>]          用于密钥库完整性的口令

[-storetype <类型>]          密钥库类型

[-keypass <口令>]           专用密钥的口令(如果不同)

[-sigfile <文件>]            .SF/.DSA 文件的名称

[-signedjar <文件>]          已签名的 JAR 文件的名称

[-digestalg <算法>]     摘要算法的名称

[-sigalg <算法>]        签名算法的名称

[-verify]                    验证已签名的 JAR 文件

[-verbose]                   签名/验证时输出详细信息

[-certs]                     输出详细信息和验证时显示证书

[-tsa <url>]                 时间戳机构的位置

[-tsacert <别名>]            时间戳机构的公共密钥证书

[-altsigner <>]            替代的签名机制的类名

[-altsignerpath <路径列表>]  替代的签名机制的位置

[-internalsf]                在签名块内包含 .SF 文件

[-sectionsonly]              不计算整个清单的散列

[-protected]                 密钥库已保护验证路径

[-providerName <名称>]       提供者名称

[-providerClass <>         加密服务提供者的名称

[-providerArg <参数>]] ...  主类文件和构造函数参数

五、反破解

a) 第一种办法:将核心代码用JNI写进so库中。由于so库的反编译和破解的难度加大,所以这种方式防止反编译效果不错。缺点是,对于Java层的代码没有保护作用,同样可以被篡改。

b) 第二种办法:在线签名比较。在程序初始化时,联网将运行的程序的签名与服务器上的官方标准签名进行比较,从而达到让反编译后的程序无法正常运行的效果。缺点是,如果此部分联网检验的代码被篡改跳过,则整套机制失效。

c) 第三种办法:代码混淆。为了加大反编译后代码分析的难度,对代码进行混淆。缺点是,治标不治本,同样可以修改(甚至据说还有反混淆工具,没用过,不多做评论)。

d) 声明:反破解技术均摘自网上,另外请参看我转载的另外四篇反破解博客

六、参考文章:

a) http://blog.csdn.net/cloudwu007/article/details/6851800

b) http://www.cnblogs.com/lovelili/archive/2011/10/19/2217259.html

c) http://tieba.baidu.com/p/1272897204  

d) http://www.cnblogs.com/wangvsa/archive/2012/10/09/2717089.html 

声明:本技术文件旨在技术交流,请勿用于商业违法活动。



你可能感兴趣的:(apk破解攻略)