我正在学习Frida,并试图挂钩一个方法checkFlag
,并试图将布尔标志从true修改为false。
下面是demo app code
在正常情况下,会显示带有Flag is True
的吐司。我想挂接checkFlag
方法并将flag
值修改为false
,以便显示Warning! Flag is compromised
。我首先尝试通过简单地添加一个日志条目来确保该方法被挂起,但我认为.implementation
根本没有被执行。
下面是我的Frida片段:
import frida
device = frida.get_usb_device()
pid = device.spawn(["com.example.hookme"])
device.resume(pid)
import time
time.sleep(1)
session = device.attach(pid)
script = session.create_script('''
Java.perform(function() {
console.log("Running Script -- ");
var MainActivity = Java.use('com.example.hookme.MainActivity');
console.log(MainActivity);
MainActivity.checkFlag.implementation = function(x) { // x is the "flag" param
// change the value of x to False, so that else condition is fired.
console.log("Inside checkFlag Implementation.");
}
console.log("Post Implementation");
});
''')
script.load()
运行脚本后,应用程序完美地生成,但方法没有挂钩。这意味着我看不到MainActivity.checkFlag.implementation...
内部实现的日志
有人能指出我在这里错过了什么吗?
1条答案
按热度按时间txu3uszq1#
你的主要问题是当你的钩子代码被安装时,
MainActivity.onCreate()
方法已经被调用了,因此你的钩子永远不会被调用。这是因为您的python代码首先调用
device.resume(pid)
,然后调用device.attach(pid)
和加载Frida JavaScript的代码。当您想要执行早期检测时,例如要在应用程序启动时执行的代码中挂钩某些内容,您必须首先附加到应用程序并加载Frida JavaScript代码,然后恢复应用程序进程。
这样,Frida就有机会在
checkFlag
方法被调用之前将其挂起。