由於微信搖骰子的功能在本地進行隨機后在發送,所以存在可以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
