您的位置:首页 > 产品设计 > UI/UE

使用apktool、dex2jar、jd-jui反编译后修改文件并重新打包

2017-12-14 14:16 399 查看
刚刚加入新公司,领导让熟悉一些反编译相关的知识点,并在反编译后对文件做修改、打包,现在做一些记录。

一、apktool反编译和打包、签名

参考:http://www.jianshu.com/p/eb766d2bb837

第一步:下载apktool.bar和apktool.jar,下载jar之后记得改下名字

下载地址:https://ibotpeaches.github.io/Apktool/install/

第二步:将所在位置加入到环境变量中。

第三步:执行反编译命令apktool d test.apk

第四步:查看smali文件,并将自己生成的smali文件进行替换

这里的smali文件用到了android studio中的一个第三方插件java2smali 插件地址

https://github.com/ollide

这个插件可以将java文件转换为smali文件,不用我们自己写smali文件了。

第五步:执行打包命令 apktool b test,并在test文件夹下的dist目录下获取生成的apk。

第六步:因为现在的apk是没有签名的,所以执行签名,如果想要覆盖安装的话,必须和之前的签名一致,签名后安装运行

生成签名文件命令,按提示输入内容或者回车

keytool -genkeypair -alias test.keystore -keyalg RSA -validity 500000 -keystore test.keystore

- alias 别名

-validity 有效期

签名命令

jarsigner -verbose -keystore test.keystore -signedjar test_signed.apk test.apk test.keystore

二、使用dex2jar反编译apk,并用jd-jui查看

下载地址

dex2jar下载地址:https://sourceforge.net/projects/dex2jar/

jd-jui下载地址:http://jd.benow.ca/

相关命令

dex转jar命令

d2j-dex2jar classes.dex

jar转dex命令

d2j-jar2dex classes-jar2dex-dex2jar.jar

说明:

参考http://www.jianshu.com/p/eb766d2bb837中的步骤,我最后没能成功运行apk,在此仅做一下记录,方便日后查看。我的具体步骤如下:

第一步:解压apk,得到dex,并转为jar

第二步:修改目标java文件,并打包成新的apk,并按照第一步得到修改后的class文件。

第三步:将第二步得到的修改的class文件覆盖到第一步得到的jar包中。

第四步:将jar包转为dex,并覆盖到原始的apk文件中。

第五步:对apk重新签名安装,提示UNEXCEPT_EXCEPTION异常

其他:我发现第四步在将jar转为dex后,dex包明显比之前变小,不知道是不是这个原因造成的最后无法运行。

三、对METE-INF文件夹和keystore签名的简单理解。

参考: http://myeyeofjava.iteye.com/blog/2125348

METE-INF文件夹[/b]:用来记录apk的文件信息和文件的完整性、安全性。

MAINFEST.MF:摘要文件,程序会遍历Apk包中的所有文件,对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码,将结果写入文件当中。如果改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。

CERT.SF:这是对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用keystore中的私钥进行加密。在安装时只能使用keystore的公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。

说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件

CERT.RSA:文件中保存了公钥、所采用的加密算法等信息。

说明:系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。

结论:从上面的总结可以看出,META-INFO里面的说那个文件环环相扣,从而保证Android程序的安全性。(只是防止开发者的程序不被攻击者修改,如果开发者的keystore被他人获取,apk有可能被篡改)

其他:对于未经签名的apk,通过压缩软件解压后,在METE-INF文件夹下,会看到只有MAINFEST.MF清单文件,签名后,才会有CERT.RSA和CERT.SF文件。

SHA-1与MD5的比较

MD5:(message-digest algorithm 5)信息-摘要算法

SHA-1:(Secure HashAlgorithm) 安全哈希算法

因为二者均由MD4导出,SHA-1和MD5彼此很相似。相应的,他们的强度和其他特性也是相似,但还有以下几点不同:

1. 对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位,SHA-1对强行攻击有更大的强度。

2. 对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。

3. 速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐