錦州市廣廈電腦維修|上門(mén)維修電腦|上門(mén)做系統(tǒng)|0416-3905144熱誠(chéng)服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁(yè)
topFlag3 收藏本站
 
maojin003 首 頁(yè) 公司介紹 服務(wù)項(xiàng)目 服務(wù)報(bào)價(jià) 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見(jiàn)故障
錦州市廣廈電腦維修|上門(mén)維修電腦|上門(mén)做系統(tǒng)|0416-3905144熱誠(chéng)服務(wù)技術(shù)文章
Frida使用和Hook代碼整理

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

 

0x0001 一些廢話
小弟最近學(xué)習(xí)Hook技術(shù),一直使用的是substrate和xposed,這兩種框架給我的感覺(jué)功能是非常強(qiáng)大的,但是有一些不穩(wěn)定,有的時(shí)候安裝模塊軟重啟后機(jī)器就起不來(lái)了(也可能是我的代碼寫(xiě)的不叫渣,總之遇到一些坑),只能進(jìn)入recovery模式刪除模塊。最近找到了一個(gè)輕量級(jí)的hook框架這幾天使用了一下感覺(jué)非常不錯(cuò),她就是Firda,她的優(yōu)點(diǎn)就是比較輕量級(jí),使用python和javascrip進(jìn)行hook模塊的開(kāi)發(fā),缺點(diǎn)的話我感覺(jué)就是js我不太會(huì),下面就上代碼吧


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


0x0003 使用
鏈接手機(jī)usb 打開(kāi)調(diào)試模式
1.adb push frida-server-10.0.8-android-arm /data/local/tmp
然后使用root 啟動(dòng)就行了

2.打開(kāi)另一個(gè)命令行
adb forward tcp:27042 tcp:27042
adb forward tcp 27043 tcp 27043
然后輸入 frida-ps -R
就會(huì)看到手機(jī)里所有的進(jìn)程

0x0004 開(kāi)始測(cè)試


先是目標(biāo)應(yīng)用,分為兩部分 java + ndk
[Java] 純文本查看 復(fù)制代碼
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] 純文本查看 復(fù)制代碼
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] 純文本查看 復(fù)制代碼
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);
}


測(cè)試是要對(duì)jiami這個(gè)函數(shù)進(jìn)行hook,也可以對(duì)這個(gè)函數(shù)進(jìn)行調(diào)用生成加密后的數(shù)據(jù),第二個(gè)是對(duì)jni這個(gè)接口函數(shù)進(jìn)行調(diào)用,也可以調(diào)用getInt這個(gè) c函數(shù) 下面是代碼
Hook_java_method.py
[Asm] 純文本查看 復(fù)制代碼
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()



這個(gè)是調(diào)用jiami函數(shù)
call_java_method
[Java] 純文本查看 復(fù)制代碼
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()



這個(gè)是調(diào)用getInt函數(shù)
[Python] 純文本查看 復(fù)制代碼
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()


先看一下正常結(jié)果

小弟最后一個(gè)問(wèn)題就是 沒(méi)法hook住 getInt這個(gè)函數(shù),只能對(duì)他進(jìn)行調(diào)用,不是哪位老大可以對(duì)這個(gè)很熟進(jìn)行hook。
有不對(duì)的地方也請(qǐng)各位老大斧正







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

Screenshot_20170527-150214.png

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

Screenshot_20170527-150540.png

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

新建位圖圖像.bmp


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

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

    技術(shù)支持:微軟等
    主站蜘蛛池模板: 久99久无码精品视频免费播放| 亚洲最大av无码网址| 亚洲精品无码99在线观看| av无码精品一区二区三区四区| 无码人妻丰满熟妇区五十路百度| 亚洲av永久无码精品三区在线4 | 无码一区二区波多野结衣播放搜索 | 最新无码人妻在线不卡| 亚洲精品无码成人片在线观看| 人妻丰满熟妇无码区免费| 久久久精品天堂无码中文字幕| 亚洲国产精品无码久久久秋霞2 | 久久久精品人妻无码专区不卡| 无码国产精品一区二区免费模式| 嫩草影院无码av| 亚洲av无码成人影院一区 | 国产色无码精品视频国产| 久久久久亚洲av无码专区喷水| 国产亚洲美日韩AV中文字幕无码成人| 一本大道无码av天堂| 人妻少妇偷人精品无码| 亚洲熟妇无码八AV在线播放| 亚洲精品无码av天堂| 国产精品无码无片在线观看3D | 亚洲最大av资源站无码av网址| 国产50部艳色禁片无码| 日韩人妻无码一区二区三区久久99 | 国产AⅤ无码专区亚洲AV| 亚洲人成无码网WWW| av无码aV天天aV天天爽| 色欲aⅴ亚洲情无码AV| 无码天堂亚洲国产AV| h无码动漫在线观看| 好硬~好爽~别进去~动态图, 69式真人无码视频免 | 亚洲av无码国产综合专区| 亚洲AV无码乱码麻豆精品国产| 无码人妻少妇色欲AV一区二区| 少妇无码AV无码专区在线观看| 亚洲Av永久无码精品三区在线 | 97在线视频人妻无码| 无码色AV一二区在线播放|