当前位置:首页 >> 中医丰胸 >> 核心技术分享 | Frida 实现 Hook 功能的强大能力

核心技术分享 | Frida 实现 Hook 功能的强大能力

发布时间:2023-03-05

verride

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 就是一个相当好的方式。 首先行分析一下程式库,想尽办法降至连赢 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()

# 可用控制系统输入语句阻止数组调试完毕相应退出

sys.stdin.read()

if 紧接name紧接 == '紧接main紧接':

run_all()

编码中都的 python 语句早已添纳了注释,Hook 的基本范式,JS 语句作为codice_保存在 jscode 数组中都。 梳理一下整个 JS 语句的流程:通过Java.choose数组赚取com.example.target_frida.MainActivity类的重构。在赚取到重构时,首先行可用console.log语句将现阶段重构中都的 winCount 数组值(可用 winCount.value)打印到记事中都,之前反之亦然通过赋值语句把数组值改称 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=qrcodePricefrom=souhuPricetimestamp=1651029236

蒙脱石散治肠胃炎拉肚子怎么样
河北男科医院哪家比较好
山西男科去哪看
西安看白癜风哪个专科医院好
贵阳甲状腺医院怎么去
友情链接: