🌕寫在前面
- 🍊博客主頁:Scorpio_m7
- 🎉歡迎關注🔎點贊👍收藏??留言📝
- 🌟本文由 Scorpio_m7原創,CSDN首發!
- 📆首發時間:🌹2021年12月29日🌹
- ??堅持和努力一定能換來詩與遠方!
- 🙏作者水平很有限,如果發現錯誤,請留言轟炸哦!萬分感謝感謝感謝!
文章目錄
- 🌕寫在前面
- Hook的概念
- HookDemo
- Frida基本用法
- Frida
- Frida框架環境搭建
- 服務端(frida-server)
- 客戶端(frida-tools)
- Frida CLI
- Frida-ps
- Java建構式hook
- java多載函式hook
- python的支持
- 脫殼
- hook加解密
- 代理檢測繞過
- ssl pinning證書繞過
- Bride插件
- 安裝
- 功能面板
- (后續更新)
Hook的概念
Hook 技術又叫做鉤子函式,在系統沒有呼叫該函式之前,鉤子函式先得到控制權,這時鉤子函式既可以加工處理(改變)該函式的執行行為,還可以強制結束訊息的傳遞,
HookDemo
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showMsg("showmsg...");
}
public void showMsg(String msg) {
Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
}
Java.perform(function() {//這是frida的main,所有的腳本必須放在這個里面,
// 這里寫Hook代碼的具體邏輯
var mainClazz = Java.use("com.funnysec.demo1.MainActivity");
mainClazz.showMsg.implementation = function(v1) {
return this.showMsg("frida4androidhook");
}
});
}
Frida基本用法
Frida
Frida是個輕量級別的hook框架,Frida的核心是用C撰寫的,并將Js引擎注入到目標行程中,在這些行程中,JS可以完全訪問記憶體,掛鉤函式甚至呼叫行程內的本機函式來執行,支持Windows、Linux、 IOS等平臺
Frida框架環境搭建
準備一款模擬器(夜神模擬器),也可以是真機(需要root),
C:\>pip3 install frida
Requirement already satisfied: frida in e:\python\python3.9\lib\site-packages (15.1.10)
Requirement already satisfied: setuptools in e:\python\python3.9\lib\site-packages (from frida) (57.4.0)
C:\>pip3 install frida-tools
Requirement already satisfied: frida-tools in e:\python\python3.9\lib\site-packages (10.4.1)
Requirement already satisfied: pygments<3.0.0,>=2.0.2 in e:\python\python3.9\lib\site-packages (from frida-tools) (2.10.0)
Requirement already satisfied: prompt-toolkit<4.0.0,>=2.0.0 in e:\python\python3.9\lib\site-packages (from frida-tools) (3.0.22)
Requirement already satisfied: colorama<1.0.0,>=0.2.7 in e:\python\python3.9\lib\site-packages (from frida-tools) (0.4.4)
Requirement already satisfied: frida<16.0.0,>=15.0.0 in e:\python\python3.9\lib\site-packages (from frida-tools) (15.1.10)
Requirement already satisfied: setuptools in e:\python\python3.9\lib\site-packages (from frida<16.0.0,>=15.0.0->frida-tools) (57.4.0)
Requirement already satisfied: wcwidth in e:\python\python3.9\lib\site-packages (from prompt-toolkit<4.0.0,>=2.0.0->frida-tools) (0.2.5)
命令列中輸入frida --version命令,檢查是否有顯示版本號,下載frida-server,模擬器下載x86架構,真機下arm架構,frida-server版本需要和frida一致,將模擬器中的/bin/目錄添加到系統環境變數中
C:\>adb devices
List of devices attached
127.0.0.1:62001 device
C:\>adb push E:\frida-server-15.1.14-android-x86 /data/local/tmp/
[100%] /data/local/tmp/frida-serverx86
C:\>adb shell
root@shamu:/ # cd data/local/tmp/
root@shamu:/ # chmod 777 frida-server-15.1.14-android-x86
root@shamu:/data/local/tmp # ls -l
-rwxrwxrwx root root 46416812 2021-12-29 15:33 frida-server-15.1.14-android-x86
將frida-server上傳至模擬器內,因為Android系統的限制,Android系統中并不支持+rwx這種命令格式,所以用chmod 777命令,開啟另外一個CMD視窗執行埠轉發使其與主機互通adb forward tcp:27042 tcp:27042,adb forward tcp:27043 tcp:27043
服務端(frida-server)
不需要用戶關心,運行起來即可,
客戶端(frida-tools)
提交要注入的代碼到服務端,接受服務端發來的訊息,一些工具等,
Frida CLI
frida -U -f com.xxx.xxxx -l hook.js –no-pause
- -U 指定對USB設備操作
- -l 指定加載一個hook腳本
- -f 表示由frida來幫助你啟動apk程式
- –no-pause 省略輸入 %resume
Frida-ps
frida-ps -Uai
- –help 查看幫助
- -U 指定USB設備
- -a 顯示存活的應用
- -i 顯示全部的應用
C:\>frida-ps -Uai
PID Name Identifier
---- ------------- ----------------------------------
3675 FDex2 formatfa.xposed.Fdex2
3292 HttpCanary com.guoshi.httpcanary
3448 Inspeckage mobi.acpm.inspeckage
3403 drozer Agent com.mwr.dz
- 下載 com.android.providers.downloads.ui
- 圖庫 com.android.gallery3d
- 檔案管理器 com.cyanogenmod.filemanager
- 設定 com.android.settings
Java建構式hook
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ShowMsg showMsg = new showMsg("m7");
Toast.makeText(this,showMsg.getMsg(),Toast.LENGTH_LONG).show();
}
class ShowMsg{
private String msg;
private Context ctx;
ShowMsg(String msg){
this.msg=msg;
}
public String getMsg(){
return "hacker by"+this.msg;
}
}
hook腳本
Java.perform(function() {
var showMsgClazz = Java.use("com.funnysec.demo1.ShowMsg");
showMsgClazz.$init.implementation = function(v1) {
return this.$init("ljr 十年經驗,老安全專家!");
}
});
java多載函式hook
public class MainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showMsg("showmsg2...");
}
public void showMsg() {
Toast.makeText(this,"showmsg",Toast.LENGTH_LONG).show();
}
public void showMsg(String msg) {
Toast.makeText(this,msg,Toast.LENGTH_LONG).show();
}
}
hook腳本1
Java.perform(function() {
var mainClazz = Java.use("com.funnysec.demo1.MainActivity");
mainClazz.showMsg.implementation = function() {
return "Hook showMsg2";
}
});
hook腳本2
Java.perform(function() {
var mainClazz = Java.use("com.funnysec.demo1.MainActivity");
mainClazz.showMsg.overload('java.lang.String').implementation =
function() {
return this.showMsg("Hook showMsg2");
}
});
python的支持
import frida, sys
def message(message, data):
print(message)
hookCode = """
if(Java.available){
Java.perform(function(){
var kClazz = Java.use("com.bytedance.common.utility.k");
var encVal = kClazz.c("18888888888");
send(encVal);
});
}
"""
process = frida.get_remote_device().attach('com.dragon.read')# 指定一個行程名
# process = frida.get_device_manager().add_remote_device('127.0.0.1:8888').attach('com.funnysec.fridatest')
script = process.create_script(hookCode)# 往行程中注入代碼
script.on("message", message)# 回呼函式,配合frida中的send函式
script.load()# 加載注入的代碼
sys.stdin.read()# 讓腳本處于阻塞狀態,不讓它執行結束
脫殼
一代整體型殼: 采用Dex整體加密,動態加載運行的機制,
二代函式抽取型殼: 粒度更細,將方法單獨抽取出來,加密保存,解密執行,
三代VMP、Dex2C殼: 獨立虛擬機解釋執行、語意等價語法遷移,強度最高,
frida-dexdump基于frida實作,在記憶體中暴力搜索 dex035也就是dex檔案頭,從而抽取處dex檔案,
- 安裝: python3 -m pip install frida-dexdump
- 啟動frida-server端
- 啟動要脫殼的應用
- 執行命令進行脫殼 frida-dexdump
- 使用jar cvf命令合并dex檔案
hook加解密
在App抓包程序中可能會遇到一些引數是加密的情況,可以通過Hook技術對加密函式進行呼叫,如果客戶端存在解密函式也可以嘗試對密文進行解密,配合fuzz對目標進行測驗,

使用Hook對加密函式進行呼叫,計算出被加密過后的值,使用jadx-gui對apk進行反編譯,嘗試搜索關鍵字或者頁面請求的介面地址,

gVar.a的值為mobile,也就是未加密過的手機號,在外出還呼叫了k.c,可能就為加密函式,對k.c進行hook

可以封裝成一個函式,實作主動呼叫,
function enc(v) {
Java.perform(function()) {
var kClazz = Java.use("com.bytedance.common.utility.k");//找到包的位置
var encV = kClazz.c(v);//獲取原來的值
console.log(encV);//加密后的值
});
}
代理檢測繞過
有些App會檢測是否開啟了網路代理,如果開啟APP將無法正常使用,此時需要通過找到關鍵的判斷函式并使用Hook技術進行繞過,有殼的APP先脫殼,方便分析邏輯,使用jadx-gui通過搜索關鍵字找到關鍵位置

查看查找用例,類似于交叉應用,MyUtil.processWifiProxy()的呼叫在一處匿名函式內,匿名函式是否實體化的關鍵在于外層的if判斷,當MyUtil.isWifiProxy()為true時將彈出提示資訊,


Hook思路: 讓isWifiProxy()函式永遠回傳false,這樣if將不會成立,從而不會出現彈窗,
Java.perform(function()) {
var myUtil = Java.use("com.htjy.app.common_work.utils.MyUtil");
myUtil.isWifiProxy.implementation = function() {
return false;
}
});
ssl pinning證書繞過
提示網路不通或者例外之類的,直接使用ssl pinning繞過腳本,大部分情況都能繞過,除非自己實作了一些底層的校驗機制,
Bride插件
Brida是BurpSuite的插件,它充當Burpsuite和Frida之間的橋梁,Brida0.4集成了由許多Frida的Hook腳本,0.3版和0.4版使用起來有些差距,
安裝
需要python,Burpsuite,nodejs,Brida.jar
C:\>pip3 install Pyro4
WARNING: Ignoring invalid distribution -ip (e:\python\python3.9\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (e:\python\python3.9\lib\site-packages)
Collecting Pyro4
Downloading Pyro4-4.82-py2.py3-none-any.whl (89 kB)
|████████████████████████████████| 89 kB 634 kB/s
Collecting serpent>=1.27
Downloading serpent-1.40-py3-none-any.whl (9.6 kB)
WARNING: Ignoring invalid distribution -ip (e:\python\python3.9\lib\site-packages)
Installing collected packages: serpent, Pyro4
WARNING: Ignoring invalid distribution -ip (e:\python\python3.9\lib\site-packages)
WARNING: Ignoring invalid distribution -ip (e:\python\python3.9\lib\site-packages)
Successfully installed Pyro4-4.82 serpent-1.40
nmp安裝
C:\Users\>npm config set prefix E:\nodejs\node_modules\npm\
C:\Users\>npm config get prefix
E:\nodejs\node_modules\npm
C:\Users\>npm install -g cnpm --registry=https://registry.npm.taobao.org
3.npm install frida-compile@9.0.5 -g --registry=https://registry.npm.taobao.org
功能面板
- Configurationa (配置一些環境資訊)
- JS Editor (Hook腳本撰寫)
- Hooks and functions (啟用/禁用Brida提供好的腳本)
- Graphical analysis (以樹形展示目標程式的函式和庫檔案等,添加檢查鉤和修改回傳值等)
- Graphical hooks (顯示Graphical analysis中添加的鉤子)
- Custom plugins (創建一些按鈕的UI方便呼叫以及和Burpsuite的其他模塊中進行聯動操作)
- Debug export (允許在該模塊中呼叫hook腳本中匯出的函式)
啟動frida框架,當以Spawn application方式hook時用包名,以Attach application時用PID,
(后續更新)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/397399.html
標籤:其他
