首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Frida -在函数内挂钩函数

Frida -在函数内挂钩函数
EN

Stack Overflow用户
提问于 2020-08-23 02:39:16
回答 1查看 1.2K关注 0票数 0

我在Android设备上通过python脚本运行Frida,以便更改应用程序的功能。我试图去钩住一个在另一个函数内部的函数,但是我找不到这样做的方法。我在这里给出了我试图挂接的相关代码的一部分:

代码语言:javascript
复制
public class ClockInActivity extends Activity {
...

  public void onCreate(Bundle savedInstanceState) {
    ...
  }

  public void btnClockIn(View view) {
    ...
    new AsyncTask<Void, Void, Integer>() {
        public java.lang.Integer doInBackground(java.lang.Void... r14) {
        ...
        }

        public void onPostExecute(Integer result) {
        ...
        }
    } 
  }
}

(其中"...“是什么?这是一个不相关的代码)。

我想使用btnClockIn中的"onPostExecute“方法。

我现在的python代码是这样的:

代码语言:javascript
复制
import frida, sys

jscript = """
Java.perform(function() {
console.log("Injection");
    var change = Java.use('MyApplicationName.ClockInActivity');
    
    change.btnClockIn.implementation = function()
    {   
        console.log("check");
     }
   });
  """

 process = frida.get_usb_device(1).attach("MyApplicationName")
 script1 = process.create_script(jscript)
 script1.load()

 sys.stdin.read()

支票工作得很好。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2020-08-23 18:12:02

方法onPostExecute不属于类MyApplicationName.ClockInActivity,而属于一个匿名内部类。匿名内部类没有自己的名字,它们只是在类后面附加了一个数字:

因此,ClockInActivity中的第一个匿名内部类的名称为MyApplicationName.ClockInActivity$1,第二个匿名内部类的名称为MyApplicationName.ClockInActivity$2,依此类推。

如果您想获得匿名内部类的确切名称,请使用最新的Jadx不稳定版本反编译APK文件。它将在注释中显示匿名内部类的确切名称(您需要最新的不稳定版本,因为此功能是在最新版本1.1.0之后添加的)。

假设您要挂接的AsyncTask是第一个匿名内部类,则必须使用以下代码:

代码语言:javascript
复制
    var change = Java.use('MyApplicationName.ClockInActivity$1');
    
    change.onPostExecute.implementation = function()
    {   
        console.log("check");
     }
   });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63539828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档