前言

前提是你的电脑和手机都已经安装了frida并运行正常。 如果你还没安装frida,请参考文章 Android逆向_使用frida 安装frida环境。
这里使用国外大佬写的js脚本,来追踪app的方法调用,首先看一下效果:

  1. *** entered com.test.flyer.MainActivity.test
  2. arg[0]: Jack
  3. *** entered com.test.flyer.MainActivity.gainAge
  4. arg[0]: 16
  5. retval: 26
  6. *** exiting com.test.flyer.MainActivity.gainAge
  7. retval: OK
  8. *** exiting com.test.flyer.MainActivity.test
  9. [LGE Nexus 5::com.example.king.testappsflyer]->
  10. 复制代码

可以看到test方法有一个参数”Jack”,返回值是”OK”,test内部调用了gainAge方法,gainAge方法有一个参数”16”并返回”26”。这些打印信息对于逆向app来说非常的重要。

创建android测试项目

我这里创建了一个简单的安卓测试项目,MainActivity.java中的主要代码如下:

  1. public String test(String name) {
  2. Log.d("test", "do--test");
  3. int age = gainAge( 16 );
  4. Toast toast=Toast.makeText(MainActivity.this, "do--test--success--"+name+"--age="+age, Toast.LENGTH_LONG);
  5. //显示toast信息
  6. toast.show();
  7. return "OK";
  8. }
  9. private int gainAge(int age) {
  10. Log.d("test", "do--gainAge--age= "+age);
  11. return age+10;
  12. }
  13. 复制代码

我们一会用frida追踪test和gainAge这两个方法的调用。
使用真机运行这个android项目,以便手机上安装这个app。

修改脚本

即将使用的js脚本是raptor_frida_android_trace.js如下,脚本内容较长,只展示需要我们手动修改的部分:

  1. setTimeout(function() {
  2. Java.perform(function() {
  3. trace("com.test.flyer.MainActivity.test");
  4. trace("com.test.flyer.MainActivity.gainAge");
  5. });
  6. }, 0);
  7. 复制代码

我们在js脚本的setTimeout处添加了两行代码:

  1. trace("com.test.flyer.MainActivity.test");
  2. trace("com.test.flyer.MainActivity.gainAge");
  3. 复制代码

表示追踪test和gainAge这两个方法。

追踪调试

打开终端,输入如下的命令启动app并加载这个我们修改后的js脚本:

  1. frida -U -f com.example.king.testappsflyer --no-pause -l raptor_frida_android_trace.js
  2. 复制代码

“com.example.king.testappsflyer”是我们的app包名,”raptor_frida_android_trace.js”是脚本文件。
看到终端打印信息:

  1. $ frida -U -f com.example.king.testappsflyer --no-pause -l raptor_frida_android_trace.js
  2. ____
  3. / _ | Frida 12.1.2 - A world-class dynamic instrumentation toolkit
  4. | (_| |
  5. > _ | Commands:
  6. /_/ |_| help -> Displays the help system
  7. . . . . object? -> Display information about 'object'
  8. . . . . exit/quit -> Exit
  9. . . . .
  10. . . . . More info at http://www.frida.re/docs/home/
  11. Spawned `com.example.king.testappsflyer`. Resuming main thread!
  12. [LGE Nexus 5::com.example.king.testappsflyer]-> Tracing com.test.flyer.MainActivity.test [1 overload(s)]
  13. Tracing com.test.flyer.MainActivity.gainAge [1 overload(s)]
  14. 复制代码

app的界面如下:
【20200208】Android   Frida - 图1
当点击”测试”按钮,执行test方法,终端打印如下:
【20200208】Android   Frida - 图2
能清晰地看到方法的参数和返回值以及方法之间的嵌套关系。

结束

国外大佬的github地址 frida-scripts。该项目中还有其他好用脚本,对用iOS和android的调试很有帮助。等待各位大佬一起探索。
如需获取本文涉及到的android工程和js文件,可关注公众号”逆向APP“,回复”frida追踪方法01”获取下载地址。

作者:逆向APP
链接:https://juejin.im/post/5d0ca6c8e51d45777b1a3db2
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。