進擊的Android注入術《二》

2021-09-06 22:59:28 字數 2692 閱讀 1417

在《一》裡,我把基本思路描寫敘述了一遍,接下為我們先從注入開始入手。

我們平時所說的**注入,主要靜態和動態兩種方式

動態跟靜態最大的差別是,動態不須要修改原始檔,但須要高許可權(一般是root許可權),並且所需的技術含量更高。

動態注入技術,本質上就是一種排程技術。想想平時我們除錯乙個程序時,能夠做哪些功能? 一般有下列幾項:

動態注入相比於普通的除錯,最大的差別就是動態注入是乙個」自己主動化除錯並達到載入自己定義動態鏈結庫「的過程。所謂自己主動化,事實上就是通過**實現,在linux上通過ptrace就能夠完畢上面全部功能,當然ptrace功能是比較原始的,平時除錯中的功能還須要非常多高層邏輯封裝才幹夠實現。

在閱讀以下章節之前,強烈建議閱讀一下man文件,見

這裡。一般而言,我們要對乙個程序進行注入,主要有下面幾方面目的:

如上圖所看到的,程序a注入到程序b後,通過改動暫存器和記憶體,讓程序b載入自己定義的動態庫a,當a被載入後,a會嘗試載入其它模組,比方載入dex檔案等等,詳細的注入步驟例如以下:

上述是乙個簡化的過程,整個注入的**,我已經上傳到github,位址

當so被dlopen載入到目標程序後,我們須要讓so中的邏輯被執行,比較複雜的做法是相同使用ptrace改動暫存器的辦法,讓目標程序呼叫dlsym找到我們函式的位址。而比較簡單的做法有兩種,例如以下

__attribute__ ((__constructor__))

void main()

}

void main();

static void* _main(void*)

class entryclass

} boy;

以下演示樣例乙個通過ptrace注入的演示樣例,涉及到兩部分**,一部分是目標程序**記作host,還有一部分是被我們注入的so**記作libmyso.so

包括三個原始檔,各自是demo1.c,inso.h, inso.c

/*

* inso.h

* * created on: 2023年6月24日

* author: boyliang

*/__attribute__ ((visibility ("default"))) void seta(int i);

__attribute__ ((visibility ("default"))) int geta();

/*

* inso.c

* * created on: 2023年6月24日

* author: boyliang

*/#include #include "inso.h"

static int ga = 1;

void seta(int i)

int geta()

/*

* demo1.c

* * created on: 2023年6月24日

* author: boyliang

*/#include #include #include "inso.h"

#include "log.h"

int main()

return 0;

}

/*

* myso.c

* * created on: 2023年6月24日

* author: boyliang

*/#include #include #include #include #include #include "log.h"

__attribute__ ((__constructor__))

void main()

}

注入程式,我將其命名為poison,用法是poison 。以下是演示樣例的輸出顯示:

i/ttt     (  594): demo1 start.

i/ttt ( 594): 1

i/ttt ( 594): 2

i/ttt ( 594): 3

i/ttt ( 594): 4

i/ttt ( 594): 5

i/ttt ( 594): 6

i/ttt ( 594): 7

i/ttt ( 594): >>>>>>>>>>>>>i am in, i am a bad boy 1!!!!<<<<<<<<<<<<<<

i/ttt ( 594): 999

i/ttt ( 594): 1000

i/ttt ( 594): 1001

當執行./poison /data/local/tmp/libmyso.so 594後,輸出中立即出現了特定字串,而且列印的資料一下子變成了999,證明我們注入成功了。

上述演示樣例所涉及到**,我都放公布到github上了,大家假設想研究**,能夠到 在

《三》,我會再介紹一種android上特有的注入技術,敬請期待。

進擊的Android注入術《二》

在 一 裡,我把基本思路描述了一遍,接下為我們先從注入開始入手。我們平時所說的 注入,主要靜態和動態兩種方式 靜態注入,針對是可執行檔案,比如平時我們修改elf,dex檔案等等,相關的輔助工具也很多,比如ida jeb apktool等等 動態注入,針對是程序,比如修改程序的暫存器 記憶體值等等 動...

進擊的暑假(二)

1.題目 有乙個字元陣列的內容為 student a am i 請你將陣列的內容改為 i am a student 要求 不能使用庫函式。只能開闢有限個空間 空間個數和字串的長度無關 提示 student a am i i ma a tneduts i am a student 解答 include...

htop命令 進擊的二狗子

htop htop是top的公升級版,它支援圖形介面滑鼠操作,相比top更加友好易操作。安裝yum install y htop使用命令列中直接敲擊htop命令即可左邊部分從上至下,分別為,cpu 記憶體 交換分割槽的使用情況,右邊部分為 tasks為程序總數,當前執行的程序數 load erage...