Android逆向

553 阅读2分钟

Android逆向

原文发表在我自己的博客

1.工具

  1. apktool.jar
  2. jd-gui.jar
  3. dex2jar.zip

2.查看java源码

假设现在有一个test.apk,如果我们想要查看一个apk里的java源码,首先

  • 我们通过解压apk文件得到classes.dex文件,然后将classes.dex文件放置到dex2jar目录下

  • 通过命令行

    .\d2j-dex2jar.bat classes.dex
    
  • 然后就会在当前文件夹中生成classes-dex2jar.jar

  • 然后用jd-gui打开,即可查看源码

2.修改java源码

使用dex-2jar和jd-gui只能常看源码,但不能修改,那么如何修改源码呢

如果想要修改,需要反编译出smali文件,然后对smali文件进行修改操作,使用下边命令反编译apk:

apktool.jar d test.apk

然后会在当前目录生成test目录,目录内容大体如下:

然后就可以通过修改smali目录下相应的文件了

当然,还需要学习一下smali的相关语法

更多的smali的语法可以参考这篇文章

3.重新打包

利用apktool的打包功能重新打包

.\apktool.bat b demo -o new.apk  
# b表示打包  demo指的是用于打包的文件夹  -o xxx\xxx.apk 表示输出apk的路径以及文件名  

4.重新签名

打包过后的apk无法安装,因为它还没有签名

如何签名apk

  • 拷贝xxx.jks到要签名的apk目录下,没有的话可以用AS生成一个

  • 用jarsigner签名apk

     #可以先看看apk是否被签名
    jarsigner -verify new.apk
    #签名
    jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore fhh.jks -storepass xxxxxxxxx -signedjar signed.apk new.apk fenghaha
    #参数含义
    #jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore [签名证书文件名] -storepass [签名证书密码]  -signedjar [签名后生成apk的文件] [被签名的apk文件] [签名证书的别名]
    
  • 签名之后就会在当前目录下生成signed.apk文件,就算签名成功了

本人水平有限,如果有什么错误,欢迎评论指正。

参考:

smali基础语法-简书

segmentault

知乎-红岩专栏