1. 程式人生 > >Android逆向之旅---基於對so中的函式加密技術實現so加固

Android逆向之旅---基於對so中的函式加密技術實現so加固

致謝:

一、前言

今天我們繼續來介紹so加固方式,在前面一篇文章中我們介紹了對so中指定的段(section)進行加密來實現對so加固

這篇文章我們延續之前的這篇文章來介紹一下如何對函式進行加密來實現加固,當然這篇文章和前篇文章有很多類似的地方,這裡就不做太多的解釋了,所以還請閱讀這篇文章之前先去了解前一篇文章。

二、技術原理

這篇和之前的那篇文章唯一的不同點就是如何找到指定的函式的偏移地址和大小

那麼我們先來了解一下so中函式的表現形式:

在so檔案中,每個函式的結構描述是存放在.dynsym段中的。每個函式的名稱儲存在.dynstr段中的,類似於之前說過的每個section的名稱都儲存在.shstrtab段中,所以在前面的文章中我們找到指定段的時候,就是通過每個段的sh_name欄位到.shstrtab中尋找名字即可,而且我們知道.shstrtab這個段在標頭檔案中是有一個index的,就是在所有段列表中的索引值,所以很好定位.shstrtab.

但是在這篇文章我們可能遇到一個問題,就是不能按照這種方式去查詢指定函式名了:


可能有的人意識到一個方法,就是我們可以通過section的type來獲取.dynsym和.dynstr。我們看到上圖中.dynsym型別是:DYNSYM,

.dynstr型別是STRTAB,但是這種方法是不行的,因為這個type不是唯一的,也就說不同的section,type可能相同,我們沒辦法區分,比如.shstrtab和.dynstr的type都是STRTAB.其實從這裡我們就知道這兩個段的區別了:

.shstrtab值儲存段的名稱,.dynstr是儲存so中的所有符號名稱。

那麼我們該怎麼辦呢?這時候我們再去看一下elf的說明文件:

我們看到有一個.hash段,在上圖中我們也可以看到的:

由 Elf32_Word 物件組成的雜湊表支援符號表訪問。下面的例子有助於解釋雜湊表


組織,不過不是規範的一部分。bucket 陣列包含 nbucket 個專案,chain 陣列包含 nchain 個專案,下標都是從 0 開始。bucket 和 chain 中都儲存符號表索引。Chain 表項和符號表存在對應。符號 表項的數目應該和 nchain 相等,所以符號表的索引也可用來選取 chain 表項。雜湊 函式能夠接受符號名並且返回一個可以用來計算 bucket 的索引。
因此,如果雜湊函式針對某個名字返回了數值 X,則 bucket[X%nbucket] 給出了 一個索引 y,該索引可用於符號表,也可用於 chain 表。如果符號表項不是所需要的, 那麼 chain[y] 則給出了具有相同雜湊值的下一個符號表項。我們可以沿著 chain 鏈 一直搜尋,直到所選中的符號表項包含了所需要的符號,或者 chain 項中包含值 STN_UNDEF。

上面的描述感覺有點複雜,其實說的簡單點就是:

用目標函式名在用hash函式得到一個hash值,然後再做一些計算就可以得到這個函式在.dynsym段中這個函式對應的條目了。關於這個hash函式,是公用的,我們在Android中的bonic/linker.c原始碼中也是可以找到的:

unsigned long elf_hash (const unsigned char *name) {
unsigned long h = 0, g; while (*name)
{
	h=(h<<4)+*name++; if (g = h & 0xf0000000)
	h^=g>>24; h&=-g;
}
return h; 
}
那麼我們只要得到.hash段即可,但是我們怎麼獲取到這個section中呢?elf中並沒有對這個段進行資料結構的描述,有人可能想到了我們在上圖看到.hash段的type是HASH,那麼我們再通過這個type來獲取?但是之前說了,這個type不是唯一的,通過他來獲取section是不靠譜的?那麼我們該怎麼辦呢?這時候我們就要看一下程式頭資訊了:


我們知道程式頭資訊是最後so被載入到記憶體中的映像描述,這裡我們看到有一個.dynamic段。我們再看看so檔案的裝載檢視和連結檢視:


這個我們在之前也說過,在so被載入到記憶體之後,就沒有section了,對應的是segment了,也就是程式頭中描述的結構,而且一個segment可以包含多個section,相同的section可以被包含到不同的segment中。.dynamic段一般用於動態連結的,所以.dynsym和.dynstr,.hash肯定包含在這裡。我們可以解析了程式頭資訊之後,通過type獲取到.dynamic程式頭資訊,然後獲取到這個segment的偏移地址和大小,在進行解析成elf32_dyn結構。下面兩種圖就是程式頭的type型別和dyn結構描述,可以在elf.h中找到:

相關推薦

Android逆向---基於so的section加密技術實現so加固

致謝:一、前言好長時間沒有更新文章了,主要還是工作上的事,連續加班一個月,沒有時間研究了,只有週末有時間,來看一下,不過我還是延續之前的文章,繼續我們的逆向之旅,今天我們要來看一下如何通過對so加密,在介紹本篇文章之前的話,一定要先閱讀之前的文章:so檔案格式詳解以及如何解析

Android逆向---基於so函式加密技術實現so加固

致謝:一、前言今天我們繼續來介紹so加固方式,在前面一篇文章中我們介紹了對so中指定的段(section)進行加密來實現對so加固這篇文章我們延續之前的這篇文章來介紹一下如何對函式進行加密來實現加固,當然這篇文章和前篇文章有很多類似的地方,這裡就不做太多的解釋了,所以還請閱讀

Android逆向---Android應用的漢化功能 修改SO的字串內容

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向Android應用的漢化功能(修改SO的字串內容)

本文轉載自趙四大神 一、前言 今天我們繼續來講述逆向的知識,今天我們來講什麼呢?我們在前一篇文章中介紹了關於SO檔案的格式,今天我們繼續這個話題來看看如何修改SO檔案中的內容,看一下我們研究的主題: 需求:想漢化一個Apk 思路:漢化,想必大家都瞭解,老外開發的

Android逆向---Android分析某手短視訊的資料請求加密協議(IDA靜態分析SO)第三篇

一、逆向分析在之前的兩篇文章中,我們已經介紹了短視訊四小龍的某音,某山,某拍的資料請求加密協議,不瞭解的同學可以點選檢視:;那麼今天繼續最後一個短視訊那就是某手,不多說了,還是老規矩直接抓包找入口:看到

Android逆向---Android分析抖音和火山小視訊的資料請求加密協議(IDA動態除錯SO)

一、前言 最近萌發了一個做app的念頭,大致什麼樣的app先暫時不說,後面會詳細介紹這個app的開發流程和架構,不過先要解決一些技術前提問題,技術問題就是需要分析解密當前短視訊四小龍:抖音,火山,秒拍,快手這四家短視訊的資料請求加密協議,只有破解了加密協議,才可以自定義資料請求拉回資料。不多說了,本文先來第一

Android逆向---動態方式破解apk進階篇 IDA除錯so原始碼

                一、前言今天我們繼續來看破解apk的相關知識,在前一篇:Eclipse動態除錯smali原始碼破解apk 我們今天主要來看如何使用IDA來除錯Android中的native原始碼,因為現在一些app,為了安全或者效率問題,會把一些重要的功能放到native層,那麼這樣一來,我們

Android逆向---SO(ELF)檔案格式詳解

第一、前言從今天開始我們正式開始Android的逆向之旅,關於逆向的相關知識,想必大家都不陌生了,逆向領域是一個充滿挑戰和神祕的領域。作為一名Android開發者,每個人都想去探索這個領域,因為一旦你破解了別人的內容,成就感肯定爆棚,不過相反的是,我們不僅要研究破解之道,也要

Android逆向---靜態方式分析破解視頻編輯應用「Vue」水印問題

https http mpeg 朋友圈 無需 爆破 資料 不可 fill 一、故事背景 現在很多人都喜歡玩文藝,特別是我身邊的UI們,拍照一分鐘修圖半小時。就是為了能夠在朋友圈顯得逼格高,不過的確是挺好看的,修圖的軟件太多了就不多說了,而且一般都沒有水印啥的。相比較短視頻有

Android逆向---Hook神器家族的Frida工具使用詳解

常見 fin () 文件的 數值 isp extern dex文件 所有 一、前言 在逆向過程中有一個Hook神器是必不可少的工具,之前已經介紹了Xposed和Substrate了,不了解的同學可以看這兩篇文章:Android中Hook神器Xposed工具介紹 和 Andr

Android逆向---動態方式破解apk前奏篇 Eclipse動態除錯smail原始碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---靜態方式破解微信獲取聊天記錄和通訊錄資訊

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---靜態分析技術來破解Apk

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Android逆向---抖音火山視訊的Native註冊混淆函式獲取方法

一、靜態分析 最近在小密圈中有很多同學都在諮詢有時候有些應用的動態註冊Native函式,在分析so之後發現找不到真的實現函式功能地方,我們知道有時候為了安全考慮會動態註冊Native函式,但是如果只是這麼做的話就會非常簡單,比如這樣的: 這樣的我們熟知Reigster

Android逆向---動態方式破解apk終極篇(加固apk破解方式)

一、前言 今天總算迎來了破解系列的最後一篇文章了,之前的兩篇文章分別為: 第一篇:如何使用Eclipse動態除錯smali原始碼  第二篇:如何使用IDA動態除錯SO檔案 現在要說的就是最後一篇了,如何應對Android中一些加固apk安全防護,在之前的兩篇破

Android逆向---解析編譯之後的Resource arsc檔案格式

                一、前言快過年了,先提前祝賀大家新年快樂,這篇文章也是今年最後一篇了。今天我們繼續來看逆向的相關知識,前篇文章中我們介紹瞭如何解析Android中編譯之後的AndroidManifest.xml檔案格式:http://blog.csdn.net/jiangwei09104100

Android逆向---Android手機端破解神器MT的內購VIP功能破解教程

一、前言在破解app的時候,我們現在幾乎都是在PC端進行操作,但是之前bin神的MT管理器,可以在手機端直接破解,不過也有很大的侷限性,但是對於一些簡單的app破解沒問題的。這個工具其實原理也很簡單,就

Android逆向---動態方式破解apk前奏篇(Eclipse動態除錯smail原始碼)

一、前言今天我們開始apk破解的另外一種方式:動態程式碼除錯破解,之前其實已經在一篇文章中說到如何破解apk了:Android中使用靜態方式破解Apk  主要採用的是靜態方式,步驟也很簡單,首先使用ap

Android逆向---破解一款永久免費網路訪問工具

一、前言因為最近個人需要,想在手機上使用"高階搜尋",但是找了一圈發現都是需要收費的網路工具,奈何我沒錢,所以只能通過專業技能弄一個破解版的。二、應用分析下面就直接奔入主題。首先我們看到到期介面如下:提

Android逆向Android手機端破解神器MT的內購VIP功能破解教程

一、前言 在破解app的時候,我們現在幾乎都是在PC端進行操作,但是之前bin神的MT管理器,可以在手機端直接破解,不過也有很大的侷限性,但是對於一些簡單的app破解沒問題的。這個工具其實原理也很簡單,就是解析apk中的dex,arsc等檔案,然後支援修改其中的類方法資