mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件 mac,使用jadx,反编译apk mac,使用apktool,反编译apk 重新打包apk, 签名 smali文件的阅读 

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用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,并且反编译完成后,结果如下:

 mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

####

apk包,jadx,解压之后的目录:

assets,静态资源文件夹,图标,图片这样的,是不会被编译的,可以直接鼠标打开查看,

lib,依赖的库,是c语言写的,so库,第三方库,系统库,自己打包的库,都在这个里面,有的把加密token的文件放到这个so文件里面

res,就是resource,这个也是资源文件夹,为什么有两个资源文件夹,上面的不会被编译,但是这个res会被编译,这个重要,国外的游戏,汉化就是改这个文件,

Androidmanifest.xml,这个文件很重要,app启动的时候会读取这个文件,获取什么权限,首次加载什么页面,都在这里, 

Androidmanifest.xml文件,安卓清单文件,app需要什么权限,比如网络,地址,蓝牙等等,所以改这个文件就可以加权限了,

从这个文件可以看到很多的app的线索,可以分析这个app,

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

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

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

###

注意,可能会产生apktool反编译失败的情况,尤其是大厂的,安全性比较高,比如支付宝,

这样我们可以去网上找这个apk的低版本的包,去反编译,因为越高版本,安全性也是越高的,

####

这里面多了很多的smali文件,

这个smali文件就是java的代码,但是是smali格式的文件,一一对应的就是java文件,

可以和jadx反编译的结果对比看看,是可以一一对应上的,

这个class.dex文件就是被反编译成了smali文件了,

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读  

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

###

转成了smali文件有好处的,

因为你要改源代码,改java是不好的,因为要编译,你编辑的时候版本不一致,就会有问题,在你的环境执行不起来,

所以改smali文件比较好,修改了smali文件之后,需要重新打包,apktool打包之后就是一个apk包

打包之后还不行,需要有签名,才可以安装

签名是java的jdk自带的,

####

首先你要怎么看懂这个Androidmanifest.xml文件

###

注意,这个文件里面有且只有一个application,

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

package,这个包名,你要hook,就要知道包名是什么

而且你看日志,也要通过包名过滤,

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

这些就是要获取的手机权限,

比如接入网络,使用蓝牙,你如果去掉一个权限,你再打包就可以了,这个权限就去掉了,

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

这个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文件对比看看,

###

mac,使用jadx,apktool,反编译apk,打包apk,签名,阅读smali文件
mac,使用jadx,反编译apk
mac,使用apktool,反编译apk
重新打包apk,
签名
smali文件的阅读 

###

所以一定要对应java文件看,否则smali文件是接近汇编的语言,你看起来是很费劲的,

你看里面有一个行号,这个是一个重点,你对应的去看对应的java文件就可以了,

不懂的还可以百度搜索一下,

读这个smali文件的目的:

就是看到加密的地方在哪里,然后通过改smali文件,来达到目的,

或者是绕过app的签名验证,

或者是抓包用了代理,这个也可以绕过

或者是打印log,

这些都要通过修改smali文件来实现,

####

####