安卓逆向入坑

  • 总结一个图就是这么个流程
    在这里插入图片描述

apk文件是怎么来的

1.根据资源文件和AndroidManifest.xml生成R.java文件
2.处理aidl,生成对应的java文件,如果没有aidl,则跳过
3.编译工程源码(主项目,库)src目录下所有的源码,同时上边生成的 R.java和aidl生成的java文件也会被编译生成相应的class文件
4.将第3步生成的class文件打包生成.dex文件
5.将资源文件打包,生成初始的apk
6.将第4步生成的.dex文件加入到apk中生成未签名的包
7.apk签名

总结 一句话就是:这些过程Android studio或者eclipse或者其他的安卓开发IDE工具都会自动完成。

流程图

在这里插入图片描述

什么是安卓逆向

安卓系统是不是只能安装apk文件,即安卓逆向就是apk逆向。弄清楚了apk怎么来的,即java代码通过编译、打包、签名之后,就成了apk文件,就咱们说的app(application),再来说安卓逆向,逆向就是从.apk文件逆着之前的操作,得到java代码呗,其实这么说不太准确,但为了好理解先这样讲吧,为什么不准确了,因为生成一个apk不仅仅是java代码还需要别的一些图片音频啥的资源文件,逆向从apk出发得到的除了java代码外,同理还有一些别的资源文件。

安卓逆向有什么用

安卓逆向之后咱们得到了原java代码,咱们是不是就可以知道 APP功能是如何实现的,那比如我一个APP听歌需要会员,我逆向得到源代码之后,修改判断登录登录用户是否是会员的函数,让系统一直认为登录用户就是会员,修改之后,咱们再编译、打包、签名、发布、安装,咱们是不是就可以白嫖了?(事情并没有这么简单,人家版权不要面子的哇);或者你逆向之后,可以查看同行的apk里面广告包含,研究别人的营销策略;亦或进行代码安全分析,是否有漏洞,因为所有的安全漏洞最终是 因为代码质量原因造成的,理论即如此。

如何进行安卓逆向

工具:
 Android studio(用于编写java代码)
 jadx=dex2jar + jd-gui(逆向,即jadx就相当于后两者的组合,强烈建议前者)
 apktool(查看apk的xml文件、AndroidManifest.xml和图片等,也可以查看src目录下的smali文件。)

jadx将apk文件拖进去得到的就是我们想要的:
在这里插入图片描述

逆向

通过上述说的将apk拖进jadx就可以看到我们想要的东西了,然后查看 源码和apk中的资源文件,分析代码安全漏洞和流程。
现在你会发现jadx里面是没有编辑功能的,即jadx只是一个得到源代码和资源文件的工具,如果我想要修改代码或者让apk加载自己的文件,就需要用到apktool了。
在这里插入图片描述

  • apktool得到源代码和资源文件
进入apktool所在目录
apktool d app.apk

将会在该目录下生成和apk名称一样的文件夹,里面即是源代码和资源文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 反编译完成之后就可以将自己的想法加进去,修改图片或者使用代码编辑工具修改代码逻辑,此时代码是.smail。
  • smail:反编译出来的所有代码,语法与java不同,类似汇编,是Android虚拟机所使用的寄存器语言,但在jadx中源代码是java形式的,一种东西的两种表示而已。
  • classes.dex:classes.dex是java源码编译后生成的java字节码文件,dex2jar将dex反编译成jar,使用jadx就可以阅读源代码了。
    resources.arsc:resources.arsc有固定的格式,包括了资源索引和字符串资源池等。
  • AndroidManifest.xml:清单文件,它描述了应用的名字、版本、权限、引用的库文件等等信息。
  • assets:assets目录可以存放一些配置文件(比如webview本地资源、图片资源、音视频等等),不会经过编译,和原始工程里面的文件是一致的,这些文件的内容在程序运行过程中可以通过相关的api获得。
  • lib:lib目录下的子目录存放的是一些与手机CPU架构对应的C/C++代码编译生成的so文件,一般用于JNI开发。
  • META-INF:META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。
  • res:res目录存放经过编译后的资源文件,虽与原始工程目录下的res目录层次结构类似,但是实际上是经过编译处理的,只有图片资源和原始工程是一致,其他类型的资源则是编译处理过,无法直接查看。
    在这里插入图片描述
    在这里插入图片描述
  • 如果你有smail语言基础或者安卓开发基础,修改好源代码或者 加入了其他资源文件之后,现在就可以重新打包、签名、发布、安装了。
//打包
apktool b app(文件夹,里面包含着源代码和资源文件,即你修改之后的包,重新打包后新的未签名apk生成的路径在yourapp/dist/yourapp.apk。)
//签名,对打包后的apk签名,未签名的apk无法安装到Android手机里。使用你自己的签名文件进行签名,签名命令参考如下:
apksigner.bat sign --ks yourapp\keystore.jks --ks-key-alias keystore yourapp\dist\yourapp.apk

到此将会生成一个.apk的安卓应用,将它安装到安卓模拟器或者你的安卓手机,验证功能。

感谢

https://blog.csdn.net/micaaa/article/details/82426710
https://www.jianshu.com/p/64ed26536601

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值