由于微信摇骰子的功能在本地进行随机后在发送,所以存在可以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

Frida HOOK微信实现骰子作弊的更多相关文章

  1. 史上最全面 Android逆向培训之__实战(hook微信)

    我的CSDN博客:https://blog.csdn.net/gfg156196   by--qihao 书接上文,上回说到了xposed,接下来就用一下,体验一下商业项目的赶脚…… 上一篇:史上最全 ...

  2. frida(hook工具)的环境搭建

    一.简介 frida 是一款基于 python+javascript 的 hook 框架,可运行在 android.ios.linux.win等各个平台,主要使用的动态二进制插桩技术. Frida官网 ...

  3. 关于如何使用xposed来hook微信软件

     安卓端  难点有两个  收款码的生成和到帐监听   需要源码加 2442982910

  4. hook框架frida的安装以及简单实用案例

    1.下载地址 https://github.co/frida/frida/releases 2.另外两种安装方法 1.Install from prebuilt binaries This is th ...

  5. 【转】编写微信聊天机器人4《聊天精灵WeChatGenius》:实时获取到微信聊天消息,hook数据库插入操作。

    接上篇,使用Xposed来hook微信,找到微信进程:https://blog.csdn.net/weixin_42127613/article/details/81839537 既然已经找到了微信进 ...

  6. 基于frida框架Hook native中的函数(1)

    作者:H01mes撰写的这篇关于frida框架hook native函数的文章很不错,值得推荐和学习,也感谢原作者. 0x01 前言 关于android的hook以前一直用的xposed来hook j ...

  7. Frida高级逆向-Hook Native(Java So)2

    Frida Hook So 一些操作说明 Native方法第一个参数是 JNIEnv *env 如何在Frida中获取 JNIEnv 对象呢? Java.vm.getEnv(); 如何将string类 ...

  8. Frida高级逆向-Hook Native(Java So)

    Frida Hook Native Frida Hook Java Jni demo: function hook_java() { Java.perform(function () { const ...

  9. Frida高级逆向-Hook Java

    Frida Hook Java 层 Frida两种启动方式的区别 span 模式:frida 重新打开一个进程 frida -U -f 包名 -l js路径 --no-pause attch 模式: ...

随机推荐

  1. 前端css框架SASS使用教程(转)

    一.什么是SASS SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一 ...

  2. Android将应用调试log信息保存在SD卡

    转载:http://blog.csdn.net/way_ping_li/article/details/8487866 把自己应用的调试信息写入到SD卡中. package com.sdmc.hote ...

  3. ButterKnife Zelezny从配置到使用

    插件介绍:ButterKnife是一个专注于Android系统的View注入框架,可以减少大量的findViewById以及setOnClickListener代码,可视化一键生成.又一神器,完美告别 ...

  4. 原创 C++作用域 (一)

    1概述 在所有的计算机程序中,一个基本的目标是操作一些数据,然后获得一些结果.为了操作这些数据,需要为这些数据分配一段内存,我们可以将这段内存称为变量.为了方便操作,以及程序可读性方面的考虑,需要使用 ...

  5. mysql想要别人远程能连接

    mysql -u root -pvmware mysql>use mysql; mysql>update user set host = '%' where user = 'root'; ...

  6. PHP语法(三):控制结构(For循环/If/Switch/While)

    相关链接: PHP语法(一):基础和变量 PHP语法(二):数据类型.运算符和函数 PHP语法(三):控制结构(For循环/If/Switch/While) 本文我来总结几个PHP常用的控制结构,先来 ...

  7. Oracle学习笔记十一 游标

    游标的简介 游标的概念 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中的数据进行各种操作 ...

  8. Nodejs安装

    1 下载NodeJS   https://nodejs.org/download/ 最新版下载地址 # wget https://nodejs.org/dist/v0.12.7/node-v0.12. ...

  9. Java程序设计之算出一年第多少天

    可以直接拷贝运行. package year; import java.util.Scanner; public class year { public static void main(String ...

  10. AC日记——楼房 codevs 2995

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 地平线(x轴)上有n个矩(lou ...