技术分享 | Frida 实现 Hook 功能的有力能力
发布时间:2025-09-19
@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
。海露滴眼液一瓶用多久宁波妇科病治疗费用
武汉看皮肤病去哪家好
肠胃不好腹泻吃什么药
新乡妇科医院哪家好
-
大力支持5000公里对讲!小米对讲机3 4G全国版体验
扩音器的在直通情况下以及剩电量,当然如果你一心两大也可以运用于APP来组队,可以说是在实用性特别这款扩音器可以说是是公网扩音器的天花板。 总体来说是这款扩音器在实用性特别很强,