Android逆向一-frida操作

系列文章目錄

第一章 frida操作


文章目錄

  • 系列文章目錄
  • 前言
  • 一、兩種模式
  • 二、frida命令行執行及參數
  • 三、frida使用python執行
  • 四、動靜態域調用
    • 1. 靜態域調用
    • 2.動態域調用
  • 五. 遠程rpc調用
  • 六. 補充
  • 總結


前言

熟悉frida操作,hook手機app的關鍵位置進行逆向操作

一、兩種模式

  • attach:應用運行過程中hook, 有殼也可以
  • spawn:創建進程時就hook(類還沒有加載), 有殼話就不行

二、frida命令行執行及參數

frida -UF -l agent/HelloWorld.js 
-U  usb模式
-F  最前臺的應用
-l  加載腳本
-o  輸出到文件
-f  spawn模式
--no-pause 進程啟動之后立即執行,不用暫停 

三、frida使用python執行

import time
import frida# 連接安卓機上的frida-server
device = frida.get_usb_device()  # USb連接
# device =frida.get_device_manager().add_remote_device('192.168.199.199:5555')  # ip連接
# 獲取前臺運行的應用
print(device.get_frontmost_application()) 
pid = device.get_frontmost_application().pid
# attach模式
session = device.attach(pid)
# 加載s1.js腳本
with open("agent/20220531.js") as f:script = session.create_script(f.read())
script.load()# 腳本會持續運行等待輸入
input()

四、動靜態域調用

1. 靜態域調用

指的是在代碼中直接引用類的字段,不需要創建類的實例。

// 打印設備指紋信息, 修改指紋信息
function FingerPrint(){Java.perform(function(){var BUILD = Java.use("android.os.Build");BUILD.DEVICE.value = "sailfish";console.log("Device is =>", BUILD.DEVICE.value);console.log("ID is =>", BUILD.ID.value);console.log("MODEL is =>", BUILD.MODEL.value);console.log("SERIAL is =>", BUILD.SERIAL.value);// console.log("SERIAL is =>", BUILD.getSerial());console.log("sdk is =>", BUILD.getString("ro.build.version.sdk"));})
}

2.動態域調用

使用Frida的JavaScript API,在運行時通過類的實例引用字段。這意味著可以修改字段的值,甚至訪問私有字段。

function InstanceDemo(){Java.perform(function(){Java.choose("com.example.junior.CalculatorActivity", {onMatch:function(instance){console.log("found instance =>", instance);console.log("instance showText is =>", instance.showText.value);console.log("found instance =>", instance.clear("456"));},onComplete:function(){console.log("Search Complete!")}})})
}

五. 遠程rpc調用

  • https://www.freebuf.com/articles/system/190565.html
  • javascript代碼
function callSecretFun() { //定義導出函數Java.perform(function () { //找到隱藏函數并且調用Java.choose("com.roysue.demo02.MainActivity", {onMatch: function (instance) {console.log("Found instance: " + instance);console.log("Result of secret func: " + instance.secret());},onComplete: function () { }});});
}
rpc.exports = {callsecretfunction: callSecretFun //把callSecretFun函數導出為callsecretfunction符號,導出名不可以有大寫字母或者下劃線
};
  • py代碼
import time
import fridadef my_message_handler(message, payload):print messageprint payloaddef read_rpc_code():with open("s3.js") as f:script = session.create_script(f.read())script.on("message", my_message_handler)script.load()return script# 連接
device = frida.get_usb_device()
pid = device.spawn(["com.roysue.demo02"])
device.resume(pid)
time.sleep(1)
session = device.attach(pid)# rpc調用
script = read_rpc_code()
script.exports.callsecretfunction()

六. 補充

frida-ps -Uai : 列出當前手機的進程,可以看到進程id
然后可以通過
objection -g 進程id explore 進行注入

總結

frida學習資料

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

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

相關文章

芯知識 | Flash可更換聲音語音芯片—引領音頻IC技術革新的新篇章

隨著科技的飛速發展,人們對于電子產品的音頻性能要求越來越高。在這種背景下,Flash可更換聲音語音芯片應運而生,成為音頻技術領域的一顆璀璨明星。本文將詳細介紹Flash可更換聲音語音芯片的特點、優勢以及應用場景,展望其在未來科…

【Docker】從零開始:10.registry搭建私有倉庫

【Docker】從零開始:10.registry搭建私有倉庫 為什么要使用私有倉庫關于Docker Registry基于容器搭建registry私有倉庫1.下載鏡像2. 啟動鏡像3.修改系統配置文件4.下載ubuntu鏡像,修改名稱3.提交鏡像4.查看鏡像 本地搭建私有倉庫(目前編譯報錯找不到包&a…

【管理運籌學】背誦手冊(五)| 動態規劃

五、動態規劃 基本概念 階段(Stage):將所給問題的過程,按時間或空間特征分解成若干相互聯系的階段,以便按次序去求解每階段的解,常用字母 k k k 表示。 狀態(State):…

java實現連接linux(上傳文件,執行shell命令等)

1 導入pom <dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency> 2 編寫配置類 package com.budwk.app.atest;import com.budwk.app.common.config.AppExceptio…

計算機網絡之網絡層

一、概述 主要任務是實現網絡互連&#xff0c;進而實現數據包在各網絡之間的傳輸 1.1網絡引入的目的 從7層結構上看&#xff0c;網絡層下是數據鏈路層 從4層結構上看&#xff0c;網絡層下面是網絡接口層 至少我們看到的網絡層下面是以太網 以太網解決了什么問題&#xff1f; 答…

【Python 千題 —— 基礎篇】刪除列表值

題目描述 題目描述 刪除列表的指定值。有一個列表 [1, 3, 5, 2, 44, 1, 9, 10, 32] &#xff0c;請使用 for 循環刪除該列表中與 [44, 1, 9] 列表相同的值&#xff0c;并輸出該列表。 輸入描述 無輸入。 輸出描述 輸出操作后的列表。 示例 示例 ① 輸出&#xff1a; …

記錄:通過day.js獲取兩個日期相差的時間,并轉化為年月日的格式

day.js這個日期庫真的是很不錯的日期庫&#xff0c;足夠滿足日常的開發需求。 Day.js中文網 (fenxianglu.cn) 需求&#xff1a;獲取兩個日期相差的時間&#xff0c;轉化為年月日的形式&#xff1b;話不多少&#xff0c;直接放代碼 import dayjs from "dayjs"; imp…

計算機網絡之應用層

一、概述 引入目的&#xff1a; 為了方便用戶去使用&#xff1b; 該如何方便用戶使用網絡呢&#xff0c;即怎樣幫助用戶使用網絡&#xff1f; 1.用戶需要知道網絡資源所在的位置 2.網絡上資源一定是在資源子網的主機上 3.資源子網上的主機&#xff0c;在通信子網中用IP地…

qt-C++筆記之終端Ctrl+C關閉界面和ROS節點

qt-C筆記之終端CtrlC關閉界面和ROS節點 code review! 文章目錄 qt-C筆記之終端CtrlC關閉界面和ROS節點1.運行2.main.cpp3.main_window.hpp 1.運行 2.main.cpp 3.main_window.hpp

vue-router 路由權限,路由導航守衛

addRouter() 添加路由 使用場景 列如&#xff1a;菜單權限的分配&#xff08;管理員與用戶不一致&#xff09; 根據后臺返回 參數 定義isAdmin根據isAdmin 分配 let isAdmin true // 添加路由 可以傳參 一級路由名稱 來添加二級路由 if (isAdmin) {router.addRoute({path: /…

SpringCloud 微服務全棧體系(十六)

第十一章 分布式搜索引擎 elasticsearch 六、DSL 查詢文檔 elasticsearch 的查詢依然是基于 JSON 風格的 DSL 來實現的。 1. DSL 查詢分類 Elasticsearch 提供了基于 JSON 的 DSL&#xff08;Domain Specific Language&#xff09;來定義查詢。常見的查詢類型包括&#xff1…

P1030 [NOIP2001 普及組] 求先序排列

1.先找根&#xff08;后序最后一個元素&#xff09; 2.以根分中序為兩個中序即&#xff1a; (相當于分為兩個子樹) A中序 對應->A后序 &#xff08;長度對應&#xff09; B中序 對應->B后序 &#xff08;長度對應&#xff09; 遞歸循壞即可&#xff08;中序長度小…

【數據結構(C語言)】淺談棧和隊列

目錄 文章目錄 前言 一、棧 1.1 棧的概念及結構 1.2 棧的實現 1.2.1. 支持動態增長的棧的結構 1.2.2 初始化棧 1.2.3 入棧 1.2.4 出棧 1.2.5 獲取棧頂元素 1.2.6 獲取棧中有效元素個數 1.2.7 檢查棧是否為空 1.2.8 銷毀棧 二、隊列 2.1 隊列的概念及結構 2.2 隊…

Javaweb之前后臺分離開發介紹的詳細解析

2.1 前后臺分離開發介紹 在之前的課程中&#xff0c;我們介紹過&#xff0c;前端開發有2種方式&#xff1a;前后臺混合開發和前后臺分離開發。 前后臺混合開發&#xff0c;顧名思義就是前臺后臺代碼混在一起開發&#xff0c;如下圖所示&#xff1a; 這種開發模式有如下缺點&a…

守護進程的理解

什么是守護進程 daemon False # 是否以守護進程方式運行&#xff0c;True守護&#xff0c;False 非守護 在這段代碼中&#xff0c;daemon 變量的值決定了進程是否以守護進程方式運行。如果 daemon 的值為 True&#xff0c;則表示進程將以守護進程方式運行&#xff0c;否則為…

使用vcpkg安裝庫失敗的解決方法

1、前言 vcpk是是一款開源的c/c庫管理工具&#xff0c;尤其是在windows平臺&#xff0c;可以幫助我們很好的管理各種依賴包。 在windows環境做c/c開發的人應該都深有體會&#xff0c;有時候編譯需要下載一堆依賴庫&#xff0c;導致搭建編譯環境特別麻煩。但是&#xff0c;通過v…

前端 vue 面試題(二)

文章目錄 如何讓vue頁面重新渲染組件間通信vue為什么要mutation、 action操作插槽、具名插槽、作用域插槽vue編譯使用的是什么庫&#xff1f;vue怎么實現treeshakingwebpack實現treeshaking為什么只有es module 能支持 tree shaking mixin 的作用mixin的底層原理nexTick原理vue…

預處理機制

跟著肯哥&#xff08;不是我&#xff09;學預處理機制 預處理類別 宏定義&#xff1a;#define 將文本替換為表達式或語句 條件編譯&#xff1a;#ifdef、#ifndef和#if、#elif、#endif 根據標識符是否被定義選擇編譯代碼 頭文件包含&#xff1a;#include 將其他文件&#x…

Jmeter怎么實現接口關聯?

用于接口測試時&#xff0c;后一個接口經常需要用到前一次接口返回的結果&#xff0c;應該如何獲取前一次請求的結果值&#xff0c;應用于后一個接口呢&#xff0c;拿一個登錄的例子來說明如何獲取。 1、打開jmeter&#xff0c;新建一個測試計劃&#xff0c;在測試計劃里新建一…

將所有圖片居中對齊

Ctrl h 調出替換框 ^g表示所有圖片 格式里面選擇段落 全部替換