Frida:配置自動補全 in VSCode

1. 前言

編寫 frida JavaScript 腳本是一件 very 普遍的事情在 Android Reverse 中。為了方便編寫,配置相關的環境使其能夠自動補全是很關鍵的,即通過類名就能夠獲取該類的所有對外接口信息,這是面向對象編程的核心優勢,可惜我沒有對象。

首先我們還是要有一個信仰,相信這是能夠配置好的,這個原因很簡單,因為 frida 的控制臺中就給出了相應的補全操作,只是因為操作不方便我才要去 VSCode 中配置。
在這里插入圖片描述

2. 配置

In C/C++ 中我們只需要 #include 相應的頭文件就能夠達到在編寫源碼時的自動補全了,后續的補全操作都是由 MicrosoftIntelliSense 組件完成的。

同樣的在 JavaScript 中包含相應的 .ts (TypeScript)文件就能夠達到這樣的效果。當然 .ts 絕對不是用來干這個的,只是我找到的 frida-gum 的相關文件是 .ts 的。相應的下載地址在這 @types/frida-gum。我下載的是 19.0.0 版本的,對應的 frida-17.2.* 這個版本的 APIfrida-16.1.0 是不同的,配置的時候需要找到對應版本的 index.d.ts 文件。

安裝 node.js 后可以直接使用其附帶的 npm 進行下載。After 下載,@types/frida-gum 目錄下的 index.d.ts 復制到 Frida JavaScript 目錄下即可。在文件開頭添加下面的代碼進行包含即可。

/// <reference path="./frida.d.ts" />

當然如果不 want 下載 node.js 可以直接從網頁端產看代碼,然后全選,復制到文件中保存,這里我要吐槽一下 npm 管理了,代碼都展示出來了卻不提供下載的接口。

完成包含后就可以在 VSCode 使用 Frida 的自動補全了。
在這里插入圖片描述
[Append]:
我發現一個新的配置方式,能夠將 Java 也配置好 in the meanwhile. Frida JavaScript API 中給出一個配置的方案,只需要去下載相應的 example 就可以了。不過在這里面也需要使用 npm,如果不 want 下載可以直接去看 package_lock.json 文件中的下載地址,只需要下載 frida-gumfrida-java-bride 就可以了。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

當然需要注意的一點是 TM frida-17 做了大改,把 Java 的相關 API 定義弄到了單獨的文件中去,而在 17 之前則一個 frida-gum 就夠了。
在這里插入圖片描述

3. API 變化

frida-17.2.5frida-16.1.0API 是不一樣的,這里我只能說我親身體會到的一個例子,這個 Bug 我找了好久,修完之后 I just wanna say sun your mum frida

下面的代碼是 frida-16.1.0 以及很多網上教程中常用的用來 Hook Android 加載庫時的操作。但在 frida-17.2.5 中這樣的操作是不行的。

Module.findExportByName(null, "dlopen");

當輸入上述 JavaScript 之后會在得到這樣的報錯信息,出現這樣錯誤的原因是 frida-17.2.5 中沒有相應的 API 實現。
在這里插入圖片描述
When 我去查看相應的 API 描述 in @type/frida-gum-19.0.0 時,發現在 Module 中只有一個 findExportByName 的實現,而其參數列表只接受一個參數,并且函數沒有 static 關鍵字修飾,必須要實例化之后才能使用。
在這里插入圖片描述

While in @type/frida-gum-15.2.0 中則是另一種情況,在其 Module 中有兩個 findExportByName 的實現,并且其中一個使用 static 關鍵字修飾,即不需要實例化也能使用。這就是代碼 Module.findExportByName(null, "dlopen") 為什么在 frida-16.1.0 中能夠正常使用的原因。
在這里插入圖片描述

4. Some Code

這部分是我用來記錄自己寫的 JavaScript 代碼的位置,主要是給自己以后查閱。使用的是 frida-17.2.5。包括:查找 API 函數輸出調用棧顏色字

/// <reference path="./frida.d.ts" />
const CMD_RED = "\x1b[31m";
const CMD_GREEN = "\x1b[32m";
const CMD_YELLOW = "\x1b[33m";
const CMD_BLUE = "\x1b[34m";
const CMD_MAGENTA = "\x1b[35m";
const CMD_CYAN = "\x1b[36m";
const CMD_WHITE = "\x1b[37m";
// Store original console.log
const originalLog = console.log;
// Override console.log
console.log = function(...args) {originalLog(args, CMD_WHITE);
};console.log(CMD_GREEN + "[+] Enter Hook");/*** get a export function by its name* @param {string} strName : the function you want to hook* @returns {fnPoint} : the address of the function*/
function FindExportByName(strName) {var fn = null;const Modules = Process.enumerateModules();for(let i = 0; i < Modules.length; i++) {fn = Modules[i].getExportByName(strName);if(fn) {console.log(`In Module : ${Modules[i].name}, Address is : ${fn}`);break;}};return fn;
}/*** print out a thread calling stack * @param {context} Context : the context of current Thread, can be obtained in Interceptor.attach() callback*/
function TraceStack(Context) {try {const backtrace = Thread.backtrace(Context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).map(sym => sym.name + CMD_YELLOW +'[' + sym.moduleName + ']');console.log(CMD_YELLOW + 'Backtrace:');backtrace.forEach((frame, i) => console.log(CMD_GREEN + "\t" + `${i}: ${frame}`));}catch(e) {console.log(CMD_RED + "\tStack trace unavailable");console.log(CMD_RED + `\t${e}`);}console.log(CMD_GREEN + "End Trace");
}// record which lib are loaded
var setLoged = new Set(["libstats_jni.so"]);
/*** if the module isn't record in setLoged, then print it.* @param {string} libPath : the module name that is loaded* @returns : if the first that load it return 1 else return 0.*/
function LogLib(libPath) {if(libPath && !setLoged.has(libPath)) {setLoged.add(libPath);console.log(CMD_CYAN + `Load Module : ${libPath}`);return 1;}return 0;//console.log(CMD_RED + `00: ${this}`);
}function TraceModuleLoad() {var fnOpen = FindExportByName("android_dlopen_ext");if(fnOpen) {var bThere = 0;var libPath;Interceptor.attach(fnOpen, {onEnter(args) {libPath = args[0].readCString();bThere = LogLib(libPath);//Thread.sleep(10);if(bThere) {TraceStack(this.context);}},onLeave(retval) {}})console.log("Complete dlopen hook install");}
}
// get all the load module when apk start
TraceModuleLoad();console.log(CMD_YELLOW + "[-] Hook Installed");

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913003.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA矩陣算法實現

簡介 現如今設計上對速度的要求越來越高&#xff0c;而矩陣相乘含有大量的乘法和加法計算&#xff0c;造成計算時間長從而影響性能&#xff0c;本章節利用FPGA實現浮點型矩陣運算&#xff0c;可在極短時間內完成矩陣運算。 知識介紹 矩陣計算公式如下&#xff1a; 需要保證A的…

C#可空類型詳解:從基礎到高級應用

C#可空類型詳解&#xff1a;從基礎到高級應用 在C#編程中&#xff0c;可空類型是一個非常重要的概念&#xff0c;它允許我們為值類型&#xff08;如int、bool、DateTime等&#xff09;分配null值&#xff0c;從而增強了代碼的表達能力和靈活性。本文將詳細介紹C#中可空類型的各…

Elasticsearch:異常檢測入門

在我之前的文章里&#xff0c;我有講述很多有關使用機器學習來針對數據做異常監測的文章。你可以在 “開發者上手指南” 里的 “機器學習” 章節中找到。在今天的練習中&#xff0c;我將使用最新的 Elastic Stack 9.0.2 來展示如何在 Elasticsearch 中使用機器學習的方法來進行…

ARuler3.1.3 | 高級版測量應用,利用AR技術測量所有

ARuler是一款非常便捷的測量應用程序&#xff0c;專為需要精確測量的用戶設計。它不僅具備強大的3D測量功能&#xff0c;還利用增強現實&#xff08;AR&#xff09;技術&#xff0c;為用戶提供多種測量選項&#xff0c;包括角度、長度、寬度、高度、面積和體積等。無論是日常生…

MapReduce分布式計算框架:從原理到實戰

大家好&#xff01;今天我們來聊聊大數據處理領域的一個重要框架——MapReduce。作為Google提出的經典分布式計算模型&#xff0c;MapReduce極大地簡化了海量數據的處理流程。無論你是大數據新手還是有一定經驗的開發者&#xff0c;這篇文章都會讓你對MapReduce有更深入的理解。…

Redis 7 及更高版本的腳本化方案

一、背景與動機 傳統的 Redis 腳本機制依賴于客戶端加載 EVAL 腳本&#xff0c;存在以下局限&#xff1a; 網絡與編譯開銷 每次調用都要傳輸腳本源碼或重新加載 SHA1。緩存失效風險 重啟、主從切換、SCRIPT FLUSH 后腳本緩存丟失&#xff0c;事務易失敗。調試與運維困難 SHA1…

Java項目:基于SSM框架實現的云端學習管理系統【ssm+B/S架構+源碼+數據庫+畢業論文】

摘 要 互聯網發展至今&#xff0c;無論是其理論還是技術都已經成熟&#xff0c;而且它廣泛參與在社會中的方方面面。它讓信息都可以通過網絡傳播&#xff0c;搭配信息管理工具可以很好地為人們提供服務。針對課程學習信息管理混亂&#xff0c;出錯率高&#xff0c;信息安全性差…

【壓力測試之_Jmeter鏈接Oracle數據庫鏈接】

Oracle數據庫鏈接 歡迎來到挖坑避坑課堂鏈接數據庫 歡迎來到挖坑避坑課堂 之前性能測試都是業務之類的&#xff0c;數據庫壓測很少涉及&#xff0c;就會出現很多各式各樣的問題&#xff0c;首要問題就是Jmeter鏈接數據庫的問題&#xff0c;本篇主要講解Jmeter鏈接Oracle數據庫…

Appium與Appium Inspector配置教程

一、連接設備 首先將手機的開發者模式打開&#xff0c;不同手機的開啟方法不同&#xff0c;這里演示的測試機為vivoS1&#xff0c;其他機型的開啟方法大家可以自行AI搜索。 1.手機授權 &#xff08;1&#xff09;點擊手機的【設置】選項 &#xff08;2&#xff09;打開手機…

【web出海】深度拆解 FLUX.1 kontext:這不僅是AI繪畫的革命,更是 MicroSaaS 創業者的黃金機遇

前言 近日&#xff0c;Black Forest Labs 發布的 FLUX.1 Kontext 模型在AI圈掀起了波瀾。它不僅僅是又一個文生圖工具&#xff0c;其獨特的“在情境中&#xff08;in-context&#xff09;”編輯、驚人的角色一致性、精準的局部修改和強大的文字渲染能力&#xff0c;標志著一個技…

Git 安裝閉坑指南(僅 Windows 環境)

&#x1f4bb; Git 安裝閉坑指南&#xff08;僅 Windows 環境&#xff09; 適用人群&#xff1a;剛開始用 Git 的 Windows 用戶&#xff1b;重新配置開發環境的程序員&#xff1b;不想踩坑的團隊小伙伴 目標&#xff1a;快速、穩定地安裝 Git&#xff0c;在各種常見場景下避免“…

2025年4月SCI-呂佩爾狐優化算法Rüppell’s fox optimizer-附Matlab免費代碼

引言 本期介紹一種新的元啟發式算法——呂佩爾狐優化算法Rppell’s fox optimizer&#xff0c;RFO。RFO的靈感來自于呂佩爾狐貍在白天和晚上自然而聰明的集體覓食行為。優化器利用呂佩爾狐敏銳的視覺、聽覺和嗅覺對其各種主要覓食活動進行數學模擬&#xff0c;在優化過程中兼顧…

SwiftUI 中的模糊效果詳解:.blur、.material、UIVisualEffectView

模糊效果&#xff08;Blur Effect&#xff09;是 iOS 用戶界面設計的重要組成部分&#xff0c;它被廣泛應用于系統控制中心、通知背景、彈窗蒙版等場景&#xff0c;營造出“毛玻璃”的視覺層次感。 本文將深入解析 SwiftUI 中實現模糊效果的三種主流方式&#xff1a;.blur(radi…

Euler2203安裝.NetCore6.0環境操作步驟

# 1. 下載.NET二進制包 wget https://download.visualstudio.microsoft.com/download/pr/xxxx/dotnet-sdk-6.0.xxx-linux-x64.tar.gz把dotnet-sdk-6.0.428-linux-x64.tar.gz放到一個目錄里面# 2. 創建安裝目錄sudo mkdir -p /usr/share/dotnetsudo tar -zxf dotnet-sdk-6.0.428…

解決安裝SunloginClient問題記錄(Ubuntu 24.04.2)

成功安裝流程&#xff08;Ubuntu 24.04.2&#xff09; 1. 首次嘗試安裝&#xff08;失敗&#xff0c;缺少依賴&#xff09; sudo dpkg -i ./SunloginClient_15.2.0.63064_amd64.deb sudo apt-get install -f # 修復依賴&#xff08;此時提示缺少 libgconf-2-4&#xff09; …

wordpress安裝教程

一、安裝軟件 1、apache sudo apt install apache2 -y 2、mysql sudo apt install mysql-server -y 3、PHP及其擴展 sudo apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-fpm -y 重啟ap…

C#,VB.NET從JSON數據里提取數組中的對象節點值

在VB.NET中&#xff0c;若要從 JSON 數據里提取Data.DataList數組中的CategoryId&#xff0c;并將其轉換為VB.NET數組&#xff0c;可借助Json.NET&#xff08;Newtonsoft.Json&#xff09;庫來實現。下面為你詳細介紹具體的實現步驟和代碼示例&#xff1a; 一、實現 JSON 到數…

Flutter 進階:實現帶圓角的 CircularProgressIndicator

在 Flutter 中&#xff0c;我們經常使用 CircularProgressIndicator 來展示加載進度。但是你是否注意到&#xff1a;它的進度端始終是“平頭”的&#xff08;直角&#xff09;&#xff1f; 這在一些 UI 設計中并不美觀&#xff0c;特別是想實現類似 Apple 健身環那樣“前端圓清…

解決CentOS7下載docker-compose出現沒有可用軟件包問題

1 問題描述 今天在使用虛擬機CentOS 7系統安裝docker-compose時&#xff0c;用的是aliyun鏡像&#xff0c;出現沒有可用軟件包的問題&#xff0c;這就說明不是因為網絡&#xff0c;而是因為aliyun鏡像沒有該軟件包。 2 解決辦法 這里推薦最穩定的解決辦法&#xff0c;去docker-…

基于SpringBoot+Vue的酒類倉儲管理系統

文檔包含用例圖、系統架構圖、系統功能結構圖、實體屬性圖、總體e-r圖。一.系統開發工具與環境搭建1.系統設計開發工具后端使用Java編程語言的Spring boot框架項目架構&#xff1a;B/S架構運行環境&#xff1a;win10/win11、jdk17前端&#xff1a;技術&#xff1a;框架Vue.js&a…