android逆向破解1

1. Android APK文件結構
問題:Android APK的入口函數是什么?
Android 系統歷史
2. SDK工具-adb,monitor
adb命令
monitor操作
3. Android逆向工具
①命令行工具
1.AndroidManifest.xml清單文件解密工具
2.Dex文件反匯編、匯編工具
3.apk簽名工具
4.apk反編譯工具-apktool
5.Dex2jar工具(轉換文件格式)
6.Java反編譯工具(將java文件反編譯為源碼)
②可視化工具
1.AndroidKiller工具(集成了反編譯、回編譯、安裝apk、查看源碼)
2.JEB反編譯工具
3.Jadx-GUI
4.GDA 反編譯工具
4. Android逆向分析方法
5. 字符串分析法-實例-破解一個apk的流程
破解步驟
使用AndroidKiller用字符串分析法
6. Smali代碼-HelloWorld
7. 日志過濾法-實例
使用Monitor過濾日志
使用AndroidKiller過濾日志
8. 配置環境問題
夜神模擬器adb連接

Android APK文件結構
SDK工具-adb,monitor
逆向工具介紹
Android逆向分析方法
字符串分析法-實例-破解一個apk的流程
日志過濾分析法
配置環境問題

  1. Android APK文件結構
    android studio生成的apk在以下目錄
image.png

基本的APK是一個壓縮包,壓縮包中有

image.png

META-INF目錄 簽名信息,包括公司信息、文件的HASH值
Res目錄 資源信息,包括圖片、xml(布局文件、字符串、風格樣式等)
AndroidMainfest.xml 清單文件,包括APK包名、四大組件的一些申明定義、權限、程序的入口
Classes.dex 可執行文件,包括java的類信息、方法信息、字段信息、虛擬機指令。dex文件的生成流程是從java源碼->class文件->dex文件
Resources.arsc 資源序號文件,包括資源里的所有ID、名稱。資源ID對應文件是R.class

image.png

Lib目錄 動態庫,擴展名是.so ,包括C++代碼,有各種平臺,比如x86,arm

image.png

Assets目錄 自定義資源,比如.txt,mp4,等等

image.png

問題:Android APK的入口函數是什么?

自己定義的MainActivity中onCreate
清單文件中application節點可以添加android:name屬性,指定繼承自application的類,用于初始化整個app的全局信息。繼承自application的類有兩個重寫函數會執行,是程序最早執行的函數。
① attachBaseContext
② onCreate

image.png

所以一個app最早執行的函數是 application的類中的attachBaseContext函數
一般apk加固之后,都會自定義application類,并重寫其中的attachBaseContext函數或onCreate函數,并且聲明為native類型的函數。
app運行的流程

image.png

Android 系統歷史

分為三個階段
① android2.3~4.0 卡頓
② android4.1~4.4 成長,飛躍
android虛擬機dalvik->art
③ android5.0~現在 整體不錯
逆向分析的環境
系統:android 4.4 (同時有dalvik和art)
手機: google nexus 4/5(500左右)
google nexus 6p(800左右)

  1. SDK工具-adb,monitor
    adb命令

① 列舉設備
adb devices
② 將apk上傳到設備
adb push


image.png

③ 安裝apk
adb install -r apk文件名 (可以覆蓋安裝)
④ 啟動apk
adb shell am start -n <包名/activity名稱>

adb -s emulator-5556 shell am start -n com.bluelesson.helloworldndk21/.MainActivity

adb shell am start -D -n <包名/activity名稱> (以調試方式啟動)
⑤ shell命令
ls,cd,su,ps,ps | grep com,kill,chmod

monitor操作

① 概況

androidstudio中打開

image.png

文件目錄中打開

image.png

主要窗口


image.png

② 設備列表


image.png

③ 文件夾操作


image.png

④ 日志


image.png

過濾日志

image.png
  1. Android逆向工具
    ①命令行工具

1.AndroidManifest.xml清單文件解密工具

AXMLPrinter2.jar
java -jar AXMLPrinter2.jar <清單文件>
java -jar AXMLPrinter2.jar AndroidManifest.xml > out.xml

2.Dex文件反匯編、匯編工具

Dex文件是android java代碼編譯生成的二進制文件,包含了虛擬機指令(dalvik虛擬機)

Baksmali.jar(反匯編工具,將虛擬機指令反匯編成smali代碼)
java -jar baksmali.jar -o <輸出目錄>
java -jar baksmali.jar classes.dex -o out_dir
反匯編生成的目錄中,包括所有dex文件中的類代碼,每一個類就是一個smali文件。
Java中有三種類,外部類、內部類、匿名類
外部類:MainActivity.java -> MainActivity.smali
內部類:MainActivity類中MyOnClickListener類 MainActivityMyOnClickListener.smali 匿名內部類:MainActivity類中new OnClickListener對象 -> MainActivity1.smali
smali.jar(匯編工具,將smali代碼匯編生成dex文件)
java -jar smali.jar <目錄> -o 文件名
java -jar smali.jar out_dir -o out.dex
修改smali代碼,#號是注釋代碼
// # if-eqz v2, :cond_24
3.apk簽名工具

簽名工具,使用android系統源碼編譯時用到的一個工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk

4.apk反編譯工具-apktool

反編譯apk
java -jar apktool.jar d
java -jar apktool.jar d HelloWorld.apk
①將清單文件以及其他xml文件解密
②將資源序號文件(resources.arsc)與資源名稱做了一個對應關系表
生成在了/res/values/public.xml
③將dex文件反編譯成了smali代碼

回編譯 apk目錄
java -jar apktool.jar b <反編譯的apk文件目錄>
java -jar apktool.jar b HelloWorld
生成的APK在 <反編譯的apk文件目錄>/dist目錄中

5.Dex2jar工具(轉換文件格式)

dex2jar>d2j-dex2jar.bat
dex2jar>d2j-dex2jar.bat classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar

6.Java反編譯工具(將java文件反編譯為源碼)

image.png

②可視化工具

1.AndroidKiller工具(集成了反編譯、回編譯、安裝apk、查看源碼)

apktool
所在目錄:AndroidKiller_v1.3.1\bin\apktool\apktool

image.png

在Androidkiller中設置新的apktool

image.png
image.png
image.png

adb工具
常用命令
打開shell:adb shell , adb -s 設備名稱 shell
安裝apk: adb install 1.apk , adb install -r 1.apk
列舉設備: adb devices
dex2jar工具集
將dex文件轉成jar文件,方便jd-gui反編譯
jd-gui工具
可以查看smali代碼對應的java源碼

image.png

編碼轉換


image.png
image.png

2.JEB反編譯工具


image.png

3.Jadx-GUI


image.png

4.GDA 反編譯工具

image.png
  1. Android逆向分析方法
    ① 字符串分析法
    ② 日志分析法
    ③ 動態調試smali, 動態調試so文件(c++生成的文件)
    ④ API下斷(調試so,對linux API下斷),?;厮莘治?/p>

  2. 字符串分析法-實例-破解一個apk的流程
    破解步驟

拿到apk
使用反編譯工具進行反編譯
根據apk運行提示,查找字符串
查找字符串進行分析,找關鍵代碼修改
使用重打包工具進行重打包
使用簽名工具進行簽名
使用AndroidKiller用字符串分析法

但是需要注意的是,中文字符串在Android是以Unicode編碼方式顯示的,格式類似\u4e0d\u597d\u610f\u601d。我們需要進行轉換,AndroidkKiller提供了這個功能

image.png

通過查找到對應代碼,然后在代碼附近可以發現顯示成功的字符串。在成功字符串上面有關鍵跳轉,我們只需要將關鍵跳轉nop掉即可。其實在smali使用#號注釋掉即可。

image.png

在代碼的上方,應該就是正確密碼比對的地方,查看上下文發現v2寄存器,使用資源ID中獲取的一個字符串。


image.png

在這個時候,一般在工程中搜索資源ID,從資源ID找到對應的資源名稱以及類型,然后再根據類型和名稱找到對應資源的定義。

image.png

然后再去搜索對應資源名稱,找到字符串定義,因為已經知道類型是sting,直接可以查看文件res/values/strings.xml。


image.png

之后,重新編譯,安裝測試。

  1. Smali代碼-HelloWorld

.class public LHelloWorld;

Ye olde hello world application

To assemble and run this on a phone or emulator:

java -jar smali.jar -o classes.dex HelloWorld.smali

zip HelloWorld.zip classes.dex

adb push HelloWorld.zip /data/local

adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld

if you get out of memory type errors when running smali.jar, try

java -Xmx512m -jar smali.jar HelloWorld.smali

instead

.super Ljava/lang/Object;

.method public static main([Ljava/lang/String;)V
.registers 2

sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;

const-string    v1, "Hello World!"

invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

return-void

.end method

image.png
  1. 日志過濾法-實例
    使用Monitor過濾日志

①添加過濾項

image.png

②搜索過濾

image.png

使用AndroidKiller過濾日志


image.png
image.png
  1. 配置環境問題
    夜神模擬器adb連接
image.png

復制androidkiller中的adb以及dll,到SDK目錄、夜神安裝目錄

image.png
image.png

注意:復制到夜神目錄下要注意改名字

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,635評論 25 708
  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,776評論 2 59
  • layout: wikititle: Android逆向分析筆記categories: Reverse_Engin...
    超哥__閱讀 10,713評論 1 17
  • 產品的目標是為用戶解決問題,好的產品需要深入理解用戶需求,并以現階段可行的方案解決問題。 如果要打造用戶喜愛的產品...
    小披閱讀 345評論 0 0
  • 我們邀請《華夏地理》的美女編輯 @iris 來繼續撲克牌的話題。 畢竟快到春節了,想必不少小伙都要在這個百無聊賴的...
    RedDogLoop閱讀 5,305評論 2 20