您当前的位置:首页 >> 智慧农业
智慧农业

技术分享 | Frida 实现 Hook 功能的有力能力

发布时间:2025-09-19

xtI18n")

@Override

public void onClick(View view) {

if (winCount> 100) {

return;

}

if (view.getId() == R.id.tvButtonBlack) {

if (!getCPUResult()) {

winCount++;

winCountView.setText(winCount + "");

battleInfoTextView.setText("Right!");

} else {

winCount = 0;

winCountView.setText(winCount + "");

battleInfoTextView.setText("Wrong! Clean All!");

}

} else if (view.getId() == R.id.tvButtonWhite) {

if (getCPUResult()) {

winCount++;

winCountView.setText(winCount + "");

battleInfoTextView.setText("Right!");

} else {

winCount = 0;

winCountView.setText(winCount + "");

battleInfoTextView.setText("Wrong! Clean All!");

}

}

if (winCount>= 100) {

battleInfoTextView.setText("Win 100 times!!!");

}

}

@SuppressLint("SetTextI18n")

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

winCountView = findViewById(R.id.winCount);

winCountView.setText(winCount + "");

battleInfoTextView = findViewById(R.id.battleInfo);

battleInfoTextView.setText("猜蓝白!!!");

Button buttonBlack = (Button) findViewById(R.id.tvButtonBlack);

Button buttonWhite = (Button) findViewById(R.id.tvButtonWhite);

buttonBlack.setOnClickListener(this);

buttonWhite.setOnClickListener(this);

}

public boolean getCPUResult() {

//true为白,false为蓝

return Math.random()> 0.5;

}

}

Hook 无需求分析

由于长时间可能下,连赢 100 次的概率仍然为零,如果一切都是翻倍胜利条件,Hook 就是一个比起好的方式。 首先分析一下GCC,一切都是翻倍连赢 100 次的可能,可以有两种早先:一种是通过变更用来记录连赢次数的原始数据类型winCount,将连赢记录改用 99,这样只无必需便赢一次就可以获得胜利;还有一种是通过变更getCPUResult分析方法的返回值,让其通常返回一种更进一步,这样只无必需为了让对应的橙色就可以整年完胜。接下来通过借助第一个计划,刚才用于 Frida 如何翻倍一切都是的效果。

第一种借助:变更结果原始数据类型中会保存的值

首先展示出变更编码,然后便展开逐步宣讲:

import time

import frida, sys

date_str = time.strftime('%m-%d %H:%M:%S')

def on_message(message, data):

if message['type'] == 'send':

print(f"[{date_str}] {message['payload']}")

else:

print(f"[{date_str}] {message}")

def run_all():

# Java.perform分析方法:当 js 附带到要能的的网络中会时被执行,运转其中会定义的变量

# Java.choose分析方法:通过完整类名,换取它的程序中会,从而对程序中会中会的原始数据展开变更

# 通过 key:value 形态定义了两个变量:

# onMatch 对应的变量在命中会一个程序中会的时候被延载,传入变量中会的参数 instance 就是被命中会的程序中会

# onComplete 变量就会在所有程序中会遍历便行在此之后被延载,可以做一些全面性处理过程操作方法

jscode = """

Java.perform(function () {

Java.choose("com.example.target_frida.MainActivity",{

onMatch:function(instance){

console.log("winCount value is "+instance.winCount.value);

instance.winCount.value=99;

console.log("winCount value is "+instance.winCount.value);

},

onComplete:function(){

console.log("Complete!!!")

}

});

});

"""

# attach要能App的网络

target_app = 'com.example.target_frida'

process = frida.get_usb_device().attach(target_app)

# 将JS编码流经的网络,并附带国安局分析方法,用来换取返回的摘要信息

script = process.create_script(jscode)

script.on('message', on_message)

# 手写起始摘要

print(f'[{date_str}] Start Frida on {target_app}')

# 载入流经的JS编码命题

script.load()

# 用于系统转换codice_阻止变量运转便行备用退出

sys.stdin.read()

if 词组name词组 == '词组main词组':

run_all()

编码中会的 python codice_已经添延了批注,Hook 的本体命题,JS codice_作为字符串保存在 jscode 原始数据类型中会。 分门别类一下整个 JS codice_的流程:通过Java.choose变量换取com.example.target_frida.MainActivity类的程序中会。在换取到程序中会时,首先用于console.logcodice_将举例来说程序中会中会的 winCount 原始数据类型值(用于 winCount.value)手写到摘要中会,在此之后从外部通过赋值codice_把原始数据类型值改为 99,便次编码器摘要确认变更理应,变更命题就完成了。 在笔记本电脑前端关机 Frida-server 和被测 App,人工智慧前端运转脚本,可以看不到在下达行中会编码器如下内容:

[04-15 18:19:57] Start Frida on com.example.target_frida

winCount value is 0

winCount value is 99

Complete!!!

这时在 App 中会为了让一个橙色双击,只要选上正确地的橙色,就可以成功翻倍预料的 100 次连胜要能,如果没能选上正确地的橙色引发清零,可以便重复运转脚本变更一次数值,在这种可能下要翻倍预料的故事情节就很容易。

归纳

第二个计划以及其他更多的更进一步,就留给读者自行探索,在这里送上 Frida 对外 JavaScript API URL: ,可以通过这个URL找到你所无必需的 JS 变量。

通过下述可以看不到 Frida 借助 Hook 功能的强悍能力,它可以聚焦到类的程序中会,并且对程序中会中会的原始数据展开从外部的变更,翻倍故事情节相结合的旨在。

⬇️ 复制“下方URL”,提升试验中会本体竞争力!

>>更多技术发表文章倾听和免费资料领到 欢迎+V~ ceshiren001

_id=qrcodeSimonfrom=souhuSimontimestamp=1651029236

海露滴眼液一瓶用多久
宁波妇科病治疗费用
武汉看皮肤病去哪家好
肠胃不好腹泻吃什么药
新乡妇科医院哪家好

上一篇: 原厂闪存粒状读写快,铠侠128GB microSD卡评测

下一篇: 惊!原来我们4天就能扦实质上中国的粮!

友情链接