精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

動態分析so文件中的JNI函數

哆啦安全 ? 來源:編碼安全 ? 2023-04-10 11:18 ? 次閱讀

APP逆向過程中,需要對dex文件和elf文件進行分析,又因現在各APP都有各種代碼保護手法,因此都需要進行動態分析。

今天就分享下對elf文件也就是so文件中動態分析so文件中JNI函數的方案。

jnitrace它是基于frida基礎上的一個工具,它是一個動態分析追蹤SO文件中的JNI API調用的工具,它可以進行指定SO文件進行跟蹤JNI調用。

基礎知識

1、JavaVM 和 JNIEnv

JNI 它定義了兩個關鍵數據結構:JavaVM和JNIEnv。它們本質上都是指向函數表的二級指針。(在 C++ 版本中,它們是一些類,這些類具有指向函數表的指針,并具有每個通過該函數表間接調用的 JNI 函數的成員函數。)JavaVM 提供“調用接口”函數,可以利用此類來函數創建和銷毀 JavaVM。

JNIEnv 提供了大部分 JNI 函數, so中的原生函數都會收到 JNIEnv 作為第一個參數。該 JNIEnv 將用于線程本地存儲。因此無法在線程之間共享 JNIEnv。如果一段代碼無法通過其他方法獲取自己的 JNIEnv,應該共享相應 JavaVM,然后使用 GetEnv 發現線程的 JNIEnv。

a28c0bfe-d6bf-11ed-bfe3-dac502259ad0.png

JNIEnv 和 JavaVM 的 C 聲明與 C++ 聲明不同。"jni.h" include 文件會提供不同的類型定義符,具體取決于該文件是包含在 C 還是 C++ 中。因此不建議在這兩種語言包含的頭文件中添加 NIEnv 參數。

2、spawn和attach注入區別

Frida支持spawn和attach兩種啟動方式。

attach模式下,Frida會附加到當前的目標進程中,即需要App處于啟動狀態,這也意味著它只能從當前時機往后Hook;

spawn模式下,Frida會自行啟動并注入進目標App,Hook的時機非常早,好處在于不會錯過App中相對較早(比如App啟動時產生的參數),缺點是假如想要Hook的時機點偏后,則會帶來大量干擾信息,嚴重甚至會導致server崩潰。

attach注入:APP啟動后再 hook,不能 hook APP的啟動階段。

spawn注入 :重啟 APP,適合 hook APP啟動階段。

基本操作

jnitrace使用需要配合python環境和frida工具(版本需要配套好)

a2a35d0e-d6bf-11ed-bfe3-dac502259ad0.png

這個jnitrace安裝后主要核心的實現功能都在jnitrace.py和jnitrace.js

a2c041ee-d6bf-11ed-bfe3-dac502259ad0.png

a2e5642e-d6bf-11ed-bfe3-dac502259ad0.png

下圖是jnitrace.py中主要功能:首先判斷連接設備的方式 是以remote_device還是usb_device,接著默認采用spawn的注入方式,在去執行jnitrace.js文件中的hook功能,最后在輸出執行后的數據。

a2f24004-d6bf-11ed-bfe3-dac502259ad0.png

下圖是jnitrace.js的關鍵功能點,注入后實際功能還是調用到底層的dlopen。

a30e7bde-d6bf-11ed-bfe3-dac502259ad0.png

實踐分析

Frida啟動后會往要hook的進程中注入frida的so文件

a31d83cc-d6bf-11ed-bfe3-dac502259ad0.png

下圖是所有功能組成的解析

a3401018-d6bf-11ed-bfe3-dac502259ad0.png

通過jnitrace -l libxxx.so com.xxx.xxx 可以打印輸出so中的jni函數,以及這些jni函數的調用獲取數據

a356c6f0-d6bf-11ed-bfe3-dac502259ad0.png

a372e272-d6bf-11ed-bfe3-dac502259ad0.png

a396db5a-d6bf-11ed-bfe3-dac502259ad0.png

通過 jnitrace -l libxxx.so com.xxx.xxx -i RegisterNatives 可以查看到so中的所有動態注冊的函數。

a3af5612-d6bf-11ed-bfe3-dac502259ad0.png






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    19

    文章

    2957

    瀏覽量

    104544
  • C++語言
    +關注

    關注

    0

    文章

    147

    瀏覽量

    6970
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84451

原文標題:App逆向之so分析方法

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    在單片機上實現動態加載功能

    本項目是一個在單片機(如:STM32)上實現動態加載功能的函數庫,與Windows的dll,Linuxso類似,可以將代碼
    發表于 05-30 11:04 ?1820次閱讀

    android的surface

    使用libhgl.so庫。在libs/EGL/egl.cpp文件,選擇使用這兩個庫的一個,主要操作在eglGetDisplay()函數
    發表于 03-04 15:54

    Linux系統動態庫與靜態庫函數的使用介紹

    。相對于靜態函數庫,動態函數庫在編譯的時候并沒有被編譯進目標代碼,你的程序執行到相關函數時才調用該函數庫里的相應
    發表于 04-02 16:21

    Linux系統動態庫與靜態庫函數的使用介紹

    必須有。相對于靜態函數庫,動態函數庫在編譯的時候并沒有被編譯進目標代碼,你的程序執行到相關函數時才調用該函數庫里的相應
    發表于 09-29 11:31

    8168的demos里如何加.so動態鏈接庫

    8168的demos里如何加c++文件生成的 .so動態鏈接庫
    發表于 06-21 11:56

    Linux系統動態庫與靜態庫函數的使用介紹

    main.c調用了hello.c實現的函數,使用靜態庫的方式編譯得到一個可執行文件main_a 2、動態動態庫的后綴為*.
    發表于 07-04 05:33

    芯靈思SinlinxA33開發板的安卓控制LED-2-JNI基礎

    語句塊來加載動態庫} } 程序實現測試java代碼javah -jni Hello 生成Hello .h 打開Hello .h 文件里面已經寫好C函數的名字C代碼將C
    發表于 02-22 16:55

    JNI類的傳遞

    怎樣去創建JNI要傳遞的類?從JNI得到返回類的信息是什么?
    發表于 09-30 09:18

    如何在普通的鴻蒙工程中使用編譯好的SO文件

    DevEco Studio 默認創建了libs目錄,所以將之前編譯好的SO文件直接拷貝到libs目錄即可。2.2 引入 JNITools 文件
    發表于 03-25 10:06

    請問C++項目如何編譯成可在OpenHarmony3.1環境下使用的動態so文件

    以前的Linux環境的C++項目,可以通過在CMakeList文件設置使用的工具鏈,編譯出各個開發平臺下可以使用的so文件。請問,我現在在開發平臺上,燒錄OpenHarmon V3.
    發表于 06-06 16:41

    ARM啟動文件的__main, 介紹了C啟動函數的設計

    ARM啟動文件的__main, 介紹了C啟動函數的設計
    發表于 09-20 09:34 ?9次下載
    ARM啟動<b class='flag-5'>文件</b><b class='flag-5'>中</b>的__main, 介紹了C啟動<b class='flag-5'>函數</b>的設計

    JNI java調用so動態庫方法

    JNI Java調用so包相關問題總結,出現了很多問題,按照操作應該不會發生不到so包的錯誤,其實最后出現的也是說加載不到libpython2.7.x.so.1,我就納悶了,怎么和py
    發表于 11-28 13:13 ?3504次閱讀

    Android下的DEX文件SO文件梳理總結

    android逆向分析、脫殼破解分析過程免不了和android的各種文件格式打交道(so、dex、xml、art、oat等等)。
    的頭像 發表于 11-04 09:32 ?7190次閱讀

    Vivado ML版動態函數交換的技術進步

    電子發燒友網站提供《Vivado ML版動態函數交換的技術進步.pdf》資料免費下載
    發表于 09-14 09:32 ?0次下載
    Vivado ML版<b class='flag-5'>中</b><b class='flag-5'>動態函數</b>交換的技術進步

    在單片機上實現動態加載功能的函數庫介紹

    本項目是一個在單片機(如:STM32)上實現動態加載功能的函數庫,與Windows的dll,Linuxso類似,可以將代碼
    的頭像 發表于 11-09 10:55 ?1476次閱讀