安卓逆向1,mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
####
mac,使用jadx,反编译apk
jadx是一个非常好用的android反编译gui工具。下面就来介绍下jadx工具。
首先给出jadx的github地址:https://github.com/skylot/jadx
macos 安装:
brew install jadx
打开jadx界面
jadx-gui
####
这个jadx是一个神器,可以打开apk结尾的文件,还可以打开jar结尾的,dex结尾的,class结尾的文件,
###
选中淘宝apk,并且反编译完成后,结果如下:
###
####
apk包,jadx,解压之后的目录:
assets,静态资源文件夹,图标,图片这样的,是不会被编译的,可以直接鼠标打开查看,
lib,依赖的库,是c语言写的,so库,第三方库,系统库,自己打包的库,都在这个里面,有的把加密token的文件放到这个so文件里面
res,就是resource,这个也是资源文件夹,为什么有两个资源文件夹,上面的不会被编译,但是这个res会被编译,这个重要,国外的游戏,汉化就是改这个文件,
Androidmanifest.xml,这个文件很重要,app启动的时候会读取这个文件,获取什么权限,首次加载什么页面,都在这里,
Androidmanifest.xml文件,安卓清单文件,app需要什么权限,比如网络,地址,蓝牙等等,所以改这个文件就可以加权限了,
从这个文件可以看到很多的app的线索,可以分析这个app,
class.dex文件,这里面就是java编译之后的可执行文件,这个里面就是真正的代码了,安卓就是执行这个文件,才把app启动了,
我们java编译之后是.class文件,我们安卓的源代码编译之后就是.dex文件,这个.dex就是在安卓中的可执行文件,
resource.arsc,这个是资源索引文件,这个是对应关系,dex文件直接找不到res,需要靠这个文件来找到对应的资源,
###
我们反编译的目的是要找到加密的地方,
这个jadx也可以使用全局搜索功能
###
mac,使用apktool,反编译apk
1、下载apktool.sh脚本(https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/osx/apktool)和apktool.jar(https://bitbucket.org/iBotPeaches/apktool/downloads/)(注意下载最新版本重新命名为apktool.jar)
2、把刚刚下的脚本和jar包,存放到“/usr/local/bin”目录下
打开终端
cd /usr/local/bin
chmod a+x apktool.sh和apktool.jar
或则打开“/usr/local/bin”目录,手动把脚本和jar包放到文件内
open /usr/local/bin
3 在终端执行 apktool.sh d debug.apk
###
注意,可能会产生apktool反编译失败的情况,尤其是大厂的,安全性比较高,比如支付宝,
这样我们可以去网上找这个apk的低版本的包,去反编译,因为越高版本,安全性也是越高的,
####
这里面多了很多的smali文件,
这个smali文件就是java的代码,但是是smali格式的文件,一一对应的就是java文件,
可以和jadx反编译的结果对比看看,是可以一一对应上的,
这个class.dex文件就是被反编译成了smali文件了,
###
###
###
转成了smali文件有好处的,
因为你要改源代码,改java是不好的,因为要编译,你编辑的时候版本不一致,就会有问题,在你的环境执行不起来,
所以改smali文件比较好,修改了smali文件之后,需要重新打包,apktool打包之后就是一个apk包
打包之后还不行,需要有签名,才可以安装
签名是java的jdk自带的,
####
首先你要怎么看懂这个Androidmanifest.xml文件
###
注意,这个文件里面有且只有一个application,
###
package,这个包名,你要hook,就要知道包名是什么
而且你看日志,也要通过包名过滤,
###
这些就是要获取的手机权限,
比如接入网络,使用蓝牙,你如果去掉一个权限,你再打包就可以了,这个权限就去掉了,
###
这个name很重要,你找代码的入口就要通过这个来找,
因为你看到的代码都是混淆了,你搜索都搜不到,你要通过线索来找,
有些代码是不能混淆的,方法名字是不能混淆的,这个安卓应用理论的name就是不能混淆的,这个是入口,你混淆了之后,就加载不了了,找不到这个name了,
这就是你找代码的线索,而且他告诉你了文件夹的路径,com.taobao,tao,TaobaoApplication,
activity也是非常的重要,一个activity就是一个界面,这个更加的关键,这个里面也是不能混淆的,所以你可以通过这个来找,
而且这个里面也是有路径的,每一个页面的名字,路径都有,而且不能混淆,这就是一个重要的线索,
####
APP四大组件
1,Activity:
一个Activity通常就是一个界面
<activity android:name="">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
2、Service:
后台服务,
播放音乐,
数据处理等
3、Broadcase receiver
异步接收广播
4、Content provider:
内容共享
后面的三个基本用不到,主要是第一个activity,
###
重新打包apk,
apktool b 目录
这个目录就是之前apktool反编译出来的目录,再把这个目录进行重新打包,
执行了这个命令之后,目录里面就生成了一个dist文件,这个文件下面就是我们打包的apk,
###
签名
keytool jarsigner 工具是JAVA JDK自带的
这是分成两步走,
第一步,生成签名,这个就是keytool工具,
第二步,就是用证书给apk签名,这个就是jarsigner工具,
生成证书命令:
keytool -genkey -keystore my-release-key.keystore -alias my_alias -keyalg RSA -keysize 4096 -validity 10000
最后一个10000是有效期,可以设置长一点,太短了,没多久就过期了,你还要重新签名,打包,
这一步之后会生成一个签名,
用证书给apk签名
jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
-signedjar
com.dahuodong.veryevent_4.6.2_60_sign.apk com.dahuodong.veryevent_4.6.2_60.apk my_alias
未签名APK不能在安卓手机上安装,
这一步之后会生成一个签名之后的apk文件,这个apk文件才可以安装,运行,
###
注意:
APP在启动时会对签名校验,要逆APP,跳过校验
他写死了签名是什么,你的签名和他的签名不一致,就不能,
你要找到验证签名的地方,然后注释掉,然后才可以,
####
smali文件的阅读
这个apktool反编译之后会产生smali文件,
这个smali文件,类似汇编语言,但是比汇编简单许多,只要你会java,了解android的相关知识,就可以轻松的看懂,
这个smali文件是可以直接编辑器打开的,
这个smali文件就是一一对应那个java文件,可以直接对比jadx反编译的java文件,对比看,
##
我们通过找application里面name,找到对应的smali文件看看,找到对应的java文件对比看看,
###
###
所以一定要对应java文件看,否则smali文件是接近汇编的语言,你看起来是很费劲的,
你看里面有一个行号,这个是一个重点,你对应的去看对应的java文件就可以了,
不懂的还可以百度搜索一下,
读这个smali文件的目的:
就是看到加密的地方在哪里,然后通过改smali文件,来达到目的,
或者是绕过app的签名验证,
或者是抓包用了代理,这个也可以绕过
或者是打印log,
这些都要通过修改smali文件来实现,
####
####