錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
Frida使用和Hook代碼整理

作者: 藿香正氣  日期:2017-05-27 18:28:41   來源: 本站整理

 

0x0001 一些廢話
小弟最近學習Hook技術,一直使用的是substrate和xposed,這兩種框架給我的感覺功能是非常強大的,但是有一些不穩定,有的時候安裝模塊軟重啟后機器就起不來了(也可能是我的代碼寫的不叫渣,總之遇到一些坑),只能進入recovery模式刪除模塊。最近找到了一個輕量級的hook框架這幾天使用了一下感覺非常不錯,她就是Firda,她的優點就是比較輕量級,使用python和javascrip進行hook模塊的開發,缺點的話我感覺就是js我不太會,下面就上代碼吧


0x0002 安裝
安裝很簡單,需要python環境在linux、win的環境都可以,下面就是我在windwos下安裝,
1.Python環境就不用多說了 安裝后配置環境變量,我使用的是2.7.X的版本
2.安裝pip  https://pypi.python.org/pypi/pip, 到這里下載pip-9.0.1.tar.gz (md5, pgp)的安裝包,解壓后,在命令行下進入這個目錄,運行 python setup install 等一會安裝就完成了
再講
pip所在的 python\Scripts 添加到命令行,pip就可以用了
3.安裝frIDA 運行命令pip install frida 就好了
4.下載 服務端 https://github.com/frida/frida/releases 到這里找到frida-server-10.0.8-android-arm.xz  這里根據自己手機的平臺選擇就可以了 大多數是android-arm


0x0003 使用
鏈接手機usb 打開調試模式
1.adb push frida-server-10.0.8-android-arm /data/local/tmp
然后使用root 啟動就行了

2.打開另一個命令行
adb forward tcp:27042 tcp:27042
adb forward tcp 27043 tcp 27043
然后輸入 frida-ps -R
就會看到手機里所有的進程

0x0004 開始測試


先是目標應用,分為兩部分 java + ndk
[Java] 純文本查看 復制代碼
1
2
3
4
5
6
7
8
9
package com.example.hooktest.jiami;
 
public class Jiami {
 
         
        public int jiami(int i ,int j) {
                return i*10 + j*11;
        }
}


[Java] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.example.hooktest;
 
 
import com.example.hooktest.jiami.Jiami;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
 
public class MainActivity extends Activity implements OnClickListener{
 
        static {
                System.loadLibrary("test");
        }
         
        private TextView tv;
        private Button btn;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                tv = (TextView) findViewById(R.id.tv);
                btn = (Button) findViewById(R.id.btn);
                btn.setOnClickListener(this);
        }
         
        native public String getString();
 
        @Override
        public void onClick(View v) {
                // TODO Auto-generated method stub
                Jiami mi = new Jiami();
                tv.setText(getString() + mi.jiami(10, 20));
        }
         
}


下面是ndk的
[C] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <jni.h>
#include <string.h>
#include <android/log.h>
#include <unistd.h>
#include <stdarg.h>
#include <stdio.h>
 
 
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO, "hooktest", __VA_ARGS__)
 
int getInt(int i)
{
        return i+99;
}
 
JNIEXPORT jstring JNICALL
Java_com_example_hooktest_MainActivity_getString(JNIEnv* env,jobject thiz)
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#define ABI "armeabi-v7a/NEON"
#else
#define ABI "armeabi-v7a"
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__mips__)
#define ABI "mips"
#else
#define ABI "unknown"
#endif
        LOGI("[+] %d\n", getInt(1));
        return (*env)->NewStringUTF(env, ABI);
}


測試是要對jiami這個函數進行hook,也可以對這個函數進行調用生成加密后的數據,第二個是對jni這個接口函數進行調用,也可以調用getInt這個 c函數 下面是代碼
Hook_java_method.py
[Asm] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#coding=utf-8
import frida
import sys
session = frida.get_remote_device().attach("com.example.hooktest")
#print session.enumerate_modules()
 
jscode = """
Java.perform(function(){
    send("Running Script");
  
    var getString = undefined;
    exports = Module.enumerateExportsSync("libtest.so");
    for(i=0; i<exports.length; i++){
        if(exports.name == "Java_com_example_hooktest_MainActivity_getString"){
            getString = exports.address;
            send("getInt is at " + getString);
            break;
        }
    }
 
        var getInt = undefined;
    exports = Module.enumerateExportsSync("libtest.so");
    for(i=0; i<exports.length; i++){
        if(exports.name == "getInt"){
            getInt = exports.address;
            send("getInt is at " + getInt);
            break;
        }
    }
    var fungetInt = new NativeFunction(getInt, 'int', ['int']);
     
    Interceptor.attach(getString,{
        onEnter: function (args) {
                send("onEnter");
                var res = fungetInt(99999);
                send(res);
            },
            onLeave: function (retval) {
                       send("onLeave");
            }
 
         
    });
});
"""
 
def on_message(message, data):
        print message
script = session.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()



這個是調用jiami函數
call_java_method
[Java] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
#coding=utf-8
import frida
import sys
session = frida.get_remote_device().attach("com.example.hooktest")
#print session.enumerate_modules()
 
jscode = """
Java.perform(function () {
    var jiami = Java.use("com.example.hooktest.jiami.Jiami");
    var instance = jiami.$new();
    var res = instance.jiami(100,200);
    send(res);
});
"""
 
def on_message(message, data):
        print message
 
script = session.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()



這個是調用getInt函數
[Python] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#coding=utf-8
import frida
import sys
session = frida.get_remote_device().attach("com.example.hooktest")
#print session.enumerate_modules()
 
jscode = """
Java.perform(function(){
    send("Running Script");
  
    var getString = undefined;
    exports = Module.enumerateExportsSync("libtest.so");
    for(i=0; i<exports.length; i++){
        if(exports.name == "Java_com_example_hooktest_MainActivity_getString"){
            getString = exports.address;
            send("getInt is at " + getString);
            break;
        }
    }
 
        var getInt = undefined;
    exports = Module.enumerateExportsSync("libtest.so");
    for(i=0; i<exports.length; i++){
        if(exports.name == "getInt"){
            getInt = exports.address;
            send("getInt is at " + getInt);
            break;
        }
    }
    var fungetInt = new NativeFunction(getInt, 'int', ['int']);
     
    Interceptor.attach(getString,{
        onEnter: function (args) {
                send("onEnter");
                var res = fungetInt(99999);
                send(res);
            },
            onLeave: function (retval) {
                       send("onLeave");
            }
 
         
    });
});
"""
 
def on_message(message, data):
        print message
script = session.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()


先看一下正常結果

小弟最后一個問題就是 沒法hook住 getInt這個函數,只能對他進行調用,不是哪位老大可以對這個很熟進行hook。
有不對的地方也請各位老大斧正







Screenshot_20170527-150214.png (43.72 KB, 下載次數: 0)

Screenshot_20170527-150214.png

Screenshot_20170527-150540.png (43.3 KB, 下載次數: 0)

Screenshot_20170527-150540.png

新建位圖圖像.bmp (239.85 KB, 下載次數: 0)

新建位圖圖像.bmp


熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 无码中文人妻在线一区二区三区 | 亚洲av极品无码专区在线观看| 国产成人无码AV在线播放无广告 | 无码人妻精品一区二区三18禁| 久久午夜福利无码1000合集| 亚洲国产综合无码一区二区二三区 | 天堂无码在线观看| 中文字幕日韩精品无码内射| 亚洲大尺度无码无码专线一区| 13小箩利洗澡无码视频网站免费 | 无码熟妇人妻av| 无码精品一区二区三区免费视频| 免费无码不卡视频在线观看| 无码国内精品久久人妻蜜桃| 久久久人妻精品无码一区| 无码人妻品一区二区三区精99| 亚洲AV无码一区二区乱子仑| 亚洲av中文无码乱人伦在线咪咕 | 久久精品无码一区二区无码| 国产精品无码无卡无需播放器| 性色av极品无码专区亚洲| 无码人妻少妇久久中文字幕蜜桃| 亚洲色偷拍另类无码专区| 人妻少妇无码视频在线| 亚洲AV无码一区二区三区网址| 亚洲大尺度无码专区尤物| 亚洲熟妇无码另类久久久| 久久国产三级无码一区二区| 永久免费无码网站在线观看| 久久久久无码精品国产app| 亚洲av永久无码天堂网| 精品人妻系列无码天堂| 免费无码又爽又刺激高潮视频 | 在线观看成人无码中文av天堂| 无码人妻熟妇AV又粗又大| 人妻少妇偷人精品无码 | 亚洲爆乳无码一区二区三区| av无码人妻一区二区三区牛牛| 亚洲精品无码乱码成人| 国精品无码一区二区三区在线 | 四虎成人精品无码|