####
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文件來實現,
####
####
