gpt4 book ai didi

android - 如何使用 Frida 获取 Java 方法的返回值

转载 作者:行者123 更新时间:2023-11-29 23:41:39 24 4
gpt4 key购买 nike

TLDR 我希望使用 Frida 调用 Android 应用程序中未使用的方法并取回其值。目前,我的脚本输出没有得到任何返回。

Android 应用代码:

package securisec.com.methods;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

public static String strings(){
return "This is a string method";
}

}

如您所见,从未使用过 strings 方法。我希望能够使用 Frida 调用此方法并取回返回值。

这是我的 python 脚本,它不起作用。

import frida
from time import sleep

call_back_message = ''

def on_message(message, payload):
global call_back_message
if message['type'] == 'send':
call_back_message = message['payload']
return call_back_message

def object_hooking(comName, className, method):
process = frida.get_usb_device()
pid = process.spawn([comName])
process.resume(pid)
sleep(1)
js = """
Java.perform(function()
{
var getVal = Java.use('%s.%s');
console.log(getVal)
var cons = getVal.$new();
console.log(cons)
var solution = cons.%s;
var send_it = solution.toString();
send(send_it);
});""" % (comName, className, method)
session = process.attach(pid)
script = session.create_script(js)
script.on('message', on_message)
script.load()
return call_back_message

print(object_hooking(
comName='securisec.com.methods',
className='MainActivity',
method='strings()'
))

最佳答案

你不需要创建新的实例,你有几个错字,但总的来说你明白了。

如果方法存在于

Object.getOwnPropertyNames(Java.use('securisec.com.methods.MainActivity').__proto__).join('\n\t')

并且编译器没有排除它,下面的代码应该可以完成工作

def main():
device = frida.get_usb_device()
script = device.attach(device.spawn([APP])).create_script("""
Java.perform(function(){
console.log(
Java.use('securisec.com.methods.MainActivity')['strings']()
);
});
""")
script.load()
device.resume(APP)
sys.stdin.read()

if __name__ == "__main__":
main()

我更喜欢保持干净的风格:)

function Main() {
var retVal = Java.use("securisec.com.methods.MainActivity")["strings"]();
console.log("retVal", retVal);
}
Java.perform(Main);

您也可以使用 REPL 进行测试

$ frida -U com.app -e 'console.log(Java.use("securisec.com.methods.MainActivity")["strings"]())' --no-pause

关于android - 如何使用 Frida 获取 Java 方法的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51797080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com