在《一》裡,我把基本思路描寫敘述了一遍,接下為我們先從注入開始入手。
我們平時所說的**注入,主要靜態和動態兩種方式
動態跟靜態最大的差別是,動態不須要修改原始檔,但須要高許可權(一般是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...