1. 程式人生 > 其它 >安卓逆向:app加固原理,app脫殼原理

安卓逆向:app加固原理,app脫殼原理

####

app加固原理

####

首先是為什麼要加固app?

加固,就是為了防止被很容易的被逆向,逆向就是說把app的原始碼摳出來,比如遊戲app,如果別人想要抄襲我,逆向之後,把程式碼拿去,然後就可以用,後臺都有,這是很危險的,

所以要加固,讓你難以逆向,這不是完全杜絕,而且相對比較難,

###

然後是一般app都是怎麼加固的?

一般不會自己公司加固,而是用的第三方加固, 比如應用市場的加固,所以你釋出上去應用市場,要求是沒有加固的,防止這個app有一些敏感的功能,違法的功能,做壞事的功能,

然後是應用市場給你加固,加固之後然後釋出出去,

有的應用市場不嚴格,可能允許你上傳加固的app,這是為了讓別人上傳更多的app,

可以選擇用還是不用他們應用市場的加固方案,可以不用,所以不是所有的app都有加固的,

每一個應用市場,都有自己的加固方案,

比如360,騰訊,這兩個搞定了,其他的都不用管,因為大部分app都在這些應用市場了,

加固的方案基本就是dex加固和so加固,

####

怎麼判斷一個app有沒有加固?

舉例:

使用zip的方法,或者jadx工具,反編譯,看目錄結構

找到lib資料夾,如果裡面有libsharea.so,這個就是騰訊的樂加固,

###

在沒有加固之前,jadx反編譯之後,是可以看到原始碼的

但是加固之後的app,你是看不到原始碼的,只能看到加固廠商的一些資訊,根本就沒有原始碼的目錄

加固之後,你是看不到原始碼的,只能看到殼的內容,

####

這個時候我們看看這個加固的apk的,application檔案,

如果沒有加固,肯定是直接去找這個xml檔案了,

但是現在加固了,現在要先進加固的殼,然後才能去找這個xml,

這個時候application檔案,安卓name就是殼的入口了,往下找,就會有原來app的安卓name的入口,

####

而且你去看Androidmanifest.xml檔案,發現是進入這個殼的application了,不是進入app原本的application了,

加固之後相當於是兩個apk了,

要先啟動殼的apk,然後通過這個殼apk,把源app的內容載入起來,放到記憶體裡面,

這個就是下一步載入的源app的application,

###

加固原理

你上傳你的源apk到應用市場,

應用市場有自己的加固殼程式,用這個殼去加密你的源apk,這個殼程式主要是讀取源apk的dex檔案,加密成為一個新的dex檔案,

最後生成一個新的apk,

###

加固之後的app執行原理

這個apk先載入殼app,殼app讀取源dex檔案,然後解密出來源app的dex,執行源apk,

###

現在加固了之後,你反編譯就不行了,看不到原始碼了,

所以必須要解決脫殼的問題,

app脫殼原理:

脫殼的原理

在殼app解密源apk的dex之後,源apk被載入之前,攔截這個過程中的系統函式,把記憶體中的dex檔案dump拿出來,

這個中間的流程是很長的,你要在哪一層hook,這個也需要你選擇,

因為只有殼app知道如何解密,所以這一步脫殼,還是需要知道這個原理,

#######

怎麼脫殼?

主要是兩種方式,

脫殼分為兩個方法

一個是手動脫殼,

一個是工具脫殼

###

脫殼-手動脫殼

通過動態除錯,跟蹤計算Dex原始檔的記憶體偏移地址,從記憶體中Dump出Dex檔案 難度大,暫存器,彙編,反除錯,反讀寫 IDA

動態除錯:反除錯,彙編,計算記憶體地址

動態除錯,你要從記憶體裡面拿程式碼了,這種記憶體裡面的程式碼就是彙編了,甚至是機器碼,就不容易了,

而且可能人家還有反除錯,這種就很困難,

跟著app載入流程走,把記憶體中的檔案提出來,這個難度大,

####

脫殼-工具脫殼

工具脫殼又有兩種,

第一種:脫殼-工具脫殼-Xposed框架

Fdex2:Hook ClassLoader loadClass方法 通用脫殼 dumpDex:https://github.com/WrBug/dumpDex 這兩個工具就是apk,直接安裝就可以了,很簡單,不用處理,

這兩個是在java層脫殼,

重點介紹一下fdex2,這個工具,

很好用,基本騰訊的樂加固,360的加固,都是可以脫殼的,

要使用這個工具,首先是要安裝這個Xposed,而手機要安裝這個,要先root,否則安裝不了,

使用已有工具會有問題:會發現很多的新的apk,都無法脫殼,技術晚半代至一代,可以脫老版本APP

xposed框架也可以自己寫程式碼脫殼,但是這個java不會,所以不考慮,

####

第二種:脫殼-工具脫殼-frida框架

一個是hook技術,

改變程式執行流程的一種技術 在函式被呼叫前,通過HOOK技術,先得到該函式的控制權,實現該函式的邏輯改寫

我們之前繞過簽名是,改了人家的smali檔案,這樣不好,還好沒有做其他的校驗,否則你不一定能繞過,

frida框架

主要系統函式都已HOOK/基於xposed frida開發脫殼工具/有大神已開發上層應用模組

所以兩種辦法,還是hook技術比較好,既不需要修改原始碼,還不是太困難,

####

hook,一般是可以hook兩層,

1個是java層

1個native層,也就是so庫,這個難度大一點,裡面都是c語言,

###

###

#####