1. 程式人生 > >Android逆向-Android基礎逆向(1)

Android逆向-Android基礎逆向(1)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                       

0x00 前言

這裡強調一句,在學習的時候,一定要進行筆記的書寫,這樣才可以

學習的目的:

1.對安卓開發的進行簡單的複習(由於本人是Android開發的,所以layout就不重複了)。
2.對最簡單的安卓App進行開發。
3.對smali程式碼進行進一步的學習。
4.對dex檔案的分析
5.簡單的動態除錯
6.靜態分析
7.Davlik虛擬機器
8.簡單的APK檔案分析。
以上待補充

工具使用:

1.Android studio 基本操作
2.apktool
3.APKIDE
4.AndroidKiller
5.jd-gui

學習相關基礎

1.android簡單開發能力
2.smali程式碼簡單瞭解
3.java瞭解
4.一些簡答工具的使用

學習內容

本次學習內容:
Android開發簡單的HelloWorld
對開發的HelloWorld進行反編譯

0x01 Android helloworld

開發了一些簡單的App所以對於這個Android專案建立就不贅述,想學的可以去單獨看看Android開發。

第一步

新建一個project,更改名稱
這裡寫圖片描述

第二步

選擇API
這裡寫圖片描述

第三步

預設選擇,然後下一步。
這裡寫圖片描述

第四步

選擇activity的名稱,也就是我們主Activity的名稱,什麼是主Activity,就是類似於c語言的main函式,當然只是類似。
這裡寫圖片描述

第五步

因為Android studio新建的程式有基本xml,還有helloworld,所以這裡不講解。也不用谷歌自帶的模擬器了,直接生成apk。
Build —— Build APK
然後等待,就會Build APK。
這裡寫圖片描述

第六步

在first_demo\app\build\outputs\apk下就可以看到我們生成的APK。
這裡寫圖片描述
這個APK就可以在手機或者其他的虛擬機器上進行測試了。

第七步

我這裡使用的是夜神模擬器,自己百度下載就好。這裡不提供下載連結。
這裡寫圖片描述
把自己的APK拖進去就可以了。
這裡寫圖片描述

0x02 Android APK分析

1.神器android Analyzer

這個是Android studio自帶的神器,以前沒有用過,這次寫的時候才發現,用的方法很簡單。
Build ——Analyze APK就可以了。
這裡寫圖片描述
這個東西以後如果用的到的話就進行詳細瞭解。

2.APK實質

APK的實質就是一個特殊的zip檔案包。
把APK拖到Submit中進行一個檢視,當然也可以用其他工具。
這次我們只是做一個檢視,不進行分析。
這是我重新寫的,之前寫的那份不知道為什麼沒有儲存,這兩天回家,網絡卡到爆炸。好氣emmmm。
這裡寫圖片描述

3.APK內容分析。

把APK字尾改成.zip然後解壓,就會得到一些檔案。
這裡就是所有的檔案了。我們來依次做一個簡單的認識。
這裡寫圖片描述

3.1簽名檔案

這裡寫圖片描述
這裡就是簽名檔案了。這次只是簡單的認識。

3.2資原始檔

這裡寫圖片描述
這裡面放的是一些圖片資原始檔,比如說是一些圖示。

3.3資源索引檔案

這裡寫圖片描述
簡單的說就是R.等資源存放的地方,這個可能開發的人更能理解吧。

3.4classes.dex

這裡寫圖片描述
dex檔案就是java程式碼編譯之後的內容,也是我們手機可以直接執行的檔案。

3.5AndroidManifest.xml

這裡寫圖片描述
這個檔案裡是是一些許可權的描述,還有主檔案的問題。

3.6結束語

這些檔案以後都會進行詳細的分析。

0x03 反編譯

1.apktool

使用java -jar apktool.jar d demo.apk指令進行反編譯,但是可能會出現一個問題,就是apktool可能因為版本過低的,編譯的時候會出問題。
我們在cmd中輸入命令。
這裡寫圖片描述
然後就反編譯成功了。

1.1反編譯檔案

這裡寫圖片描述

1.2original資料夾

這裡寫圖片描述
這個資料夾裡裡面就是簽名檔案和AndroidManifest.xml

1.3.res資料夾

反編譯後還是資原始檔。

1.4.smali檔案

這個就是我們的主要檔案,dex檔案被編譯出來的就是samli檔案,這個也是我們要主要研究的東西。
這裡寫圖片描述

1.4.1 android檔案

這裡寫圖片描述
這個檔案就是資原始檔。並不是我們主要看的檔案。

1.4.2然後再來看一下com資料夾。

這裡寫圖片描述

1.5MainActivity.smali

首先來看看程式碼

.class public Lcom/example/hanlei/first_demo/MainActivity;.super Landroid/support/v7/app/AppCompatActivity;.source "MainActivity.java"# direct methods.method public constructor <init>()V    .locals 0    .prologue    .line 6    invoke-direct {p0}, Landroid/support/v7/app/AppCompatActivity;-><init>()V    return-void.end method# virtual methods.method protected onCreate(Landroid/os/Bundle;)V    .locals 1    .param p1, "savedInstanceState"    # Landroid/os/Bundle;    .prologue    .line 10    invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V    .line 11    const v0, 0x7f04001b    invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V    .line 12    return-void.end method
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

1.5.1 第一個模組

有沒有覺得這個模組很熟悉,就是之前我們學習的開標頭檔案。描述了一個路徑,以及名稱。
這裡寫圖片描述

1.5.2第二個模組

這裡寫圖片描述
這個模組就是,之前的通用模組,只是多了一句繼承語句。support。

1.5.3第三個模組

這裡寫圖片描述
第三個模組就是onCreate模組,學習過Android程式設計的肯定知道這個就是啟動模組,相當於main函式。
我們來看看具體都有哪些內容吧。

.param p1, "savedInstanceState"    # Landroid/os/Bundle;
   
  • 1

這一句話之前沒有見到過,意思就是說傳入的引數名為savedInstanceState。

 invoke-super {p0, p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V
   
  • 1
  • 2

這句話很簡單,就是呼叫Landroid/support/v7/app/AppCompatActivity這一串的onCreate方法。然後返回值就是空。

const v0, 0x7f04001b
   
  • 1

定義一個v0暫存器,賦值為0x7f04001b

invoke-virtual {p0, v0}, Lcom/example/hanlei/first_demo/MainActivity;->setContentView(I)V
   
  • 1
  • 2

然後呼叫setContentView方法把v0的值傳進去。

1.5.3結束語

有沒有感覺到之前在反編譯java得到的smali對現在很有幫助呢。

2.APKIDE

使用方法很簡單拖進去,簡單粗暴易懂。
這裡寫圖片描述
這個是編譯之後的內容,和我們用apktool編譯出來的一樣但是這個提供了很多外掛功能,這個之後再進行細說。

3.AndroidKiller

這個是我自己喜歡用的,之前喜歡用APKIDE之後喜歡用AndroidKiller了。
方法也是很簡單。直接拖進去就好了。
這裡寫圖片描述
具體怎麼使用之後詳細說明。

4.JD-GUI

如果說smali程式碼看不懂的話,那麼java程式碼是不是相對要容易一點呢了。
JD-GUI這個工具的作用就是用來檢視JAR檔案的。我們把dex檔案轉成jar,然後就可以使用JD-GUI來查看了。
這裡寫圖片描述
這個是檢視apktool.jar檔案做的演示。

0x04 回編譯

APKTOOL

使用命令:

java -jar apktool.jar b demo
   
  • 1

生成的APK會存放在這個檔案裡,見圖。
這裡寫圖片描述
至於回編譯的具體流程之後會慢慢講到。
這裡只說APKTOOl的,其他的之後慢慢來,超級簡單,自己研究吧。

0x05 結束語

我在想要不要再加點c語言,python什麼的,是不是有點亂了。我覺得要複習的還有很多東西哦。

所學所得

最後加上一個簡單的總結吧。
1.APK內容檔案的分析(網路問題,我寫了四遍)
2.apktool的使用(我第一次用你敢信?)
3.工具(我本來就會用基本的,也不算是所得吧)
4.思路
5.其它

最後

有興趣可以看看這個java基礎系列,對smali理解可能有幫助。
Android逆向-java程式碼基礎(1)
Android逆向-java程式碼基礎(2)
Android逆向-java程式碼基礎(3)
Android逆向-java程式碼基礎(4)
Android逆向-java程式碼基礎(5)
Android逆向-java程式碼基礎(6)
Android逆向-java程式碼基礎(7)
Android逆向-java程式碼基礎(8)

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述