Frida HOOK微信實現骰子作弊


由於微信搖骰子的功能在本地進行隨機后在發送,所以存在可以hook掉判斷骰子數的方法進行修改作弊。

1.frida實現hook java層函數
1)寫個用來測試的demo,當我們點擊按鈕的時候會彈出窗口顯示數字。代碼中我是傳進的參數是4,顯示為8。

package com.example.fridatest;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends Activity {

    Button myButton1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);

        myButton1 = (Button) findViewById(R.id.button1);
        myButton1.setOnClickListener( new ButtonClick());
    }

    class ButtonClick implements OnClickListener {
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.button1:
                int nRet = test(4);
                String strRet = nRet + "";
                Toast.makeText(MainActivity.this, strRet,Toast.LENGTH_LONG).show();
                break;
            default:
                break;
            }
        }

    }
    public int test(int num)
    {
        int nRet = num*2;
        return nRet;
    }
}

2)運行結果。

2.連接手機,運行腳本。
1)啟動frida-server
2)adb forward tcp:27042 tcp:27042
3)執行腳本。

import frida
import sys


scr = """
Java.perform(function () {
var be= Java.use("com.example.fridatest.MainActivity");
send(typeof(be));
send(typeof(be.test));
send("start")
be.test.implementation = function(){
    var type = arguments[0];
    send("start")
    send("type="+type);
    if (type == 4)
    {
        return this.test(5);
    }
    else
    {
        return 5;
    }

};
send("end")
});
"""

rdev = frida.get_usb_device(20)
session = rdev.attach("com.example.fridatest")
script = session.create_script(scr)

fp = open("D:/log.txt","w") 


def on_message(message, data):
    type = message["type"]
    msg = message
    if type == "send":
        msg = message["payload"]
    elif type == 'error':
        msg = message['stack']    
    print(msg)        

    
script.on('message', on_message)
script.load()
sys.stdin.read()

4)再次點擊,可以看到hook成功,能獲取到傳入的參數以及修改后界面顯示成我們hook修改過后的數值。

 

3.修改微信骰子的判斷函數。

參考網上的文章定位最新版的判斷函數為com.tencent.mm.sdk.platformtools.be類的tx函數。(Randon函數)

1)編寫hook代碼修改實現作弊每次骰子都是6。

主要函數

 

scr = """
Java.perform(function () {
var be= Java.use("com.tencent.mm.sdk.platformtools.be");
send(typeof(be));
send(typeof(be.tx));
send("start")
be.tx.implementation = function(){
    var type = arguments[0];
    send("start")
    send("type="+type);
    return 5;
};
send("end")
});
"""

 

2)實現每次都能獲取到6的結果。

ps:試過了的手機,發現4.x版本的root的最為穩定。(紅米note,華為3c),坑爹三星系列的都不成功。

參考:http://www.voidcn.com/blog/autohacker/article/p-4979253.html
      :https://github.com/JAYAndroid/WeChatHook

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM