声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!如有侵权烦请告知,我会立即删除并致歉。谢谢!
文章有疑问的,可以公众号发消息问我,或者留言。我每天都会看的。
字数 724,阅读大约需 4 分钟
前言
本文介绍了frida对Android Java层的操作
-
• 如何主动调用静态方法 -
• 如何修改静态变量
Challenge 0x2
APP说明
安装
adb install "Challenge 0x2.apk"
打开APK,提示
目的:获取flag
反编译分析
查看包名与当前最顶层的Activity是哪一个
adb shell dumpsys window | grep CurrentFocus // linux
adb shell dumpsys window | findstr CurrentFocus // windows
或者,我们可以通过frida-ps获取当前运行的APP的包名
frida-ps -Uai
jadx反编译apk
可以看到MainActivity中存在一个方法get_flag
get_flag方法分析:
将加密的字符串解密,然后将flag显示在界面上,也就是替换上面的HOOK ME!
的位置。
在方法上按x,查看引用
没有引用,那么久需要主动调用。
public static void get_flag(int a)
它对应的是静态方法,也就是需要frida 主动调用静态方法。
frida 主动调用静态方法的模板
Java.perform(function() {
var <变量1> = Java.use("<包名>.<类名>");
<变量1>.<静态方法名>();
})
借助大模型,生成脚本
你是一个安卓逆向工程师,frida主动调用一个静态方法,传入参数a为4919
public static void get_flag(int a)
代码如下:
function call_static_method() {
Java.perform(function () {
// 替换为实际的类名
var targetClass = Java.use('com.ad2001.frida0x2.MainActivity');
// 调用静态方法 get_flag 并传入参数 4919
targetClass.get_flag(4919);
console.log("成功调用 get_flag 方法,参数为 4919");
});
}
-
• 因为传入的参数是int类型,所以可以直接传入。
frida注入js代码
frida -U -f com.ad2001.frida0x2 -l main.js
注入后,输入方法call_static_method()
调用。如果注入成功,输入call的时候,就会给出提示。
执行
结果:
Challenge 0x3
APP说明
目的:获取flag
安装
adb install "Challenge 0x3.apk"
启动APP,
页面显示flag{xxx},点击按钮,提示try again!
反编译
jadx反编译
直接看MainActivity,分析
按住 Ctrl + 左键点击Checker.code的code,或者双击code,即可跳转到指定方法
可以看到code是静态变量,默认值为0。
有一个方法increase可以增加code的值。
我们这里有两种思路,一种是直接修改code值,另一种是主动调用increase 256次。
frida代码
先说第一种,直接修改静态变量code
参考模板
function change_static_field() {
Java.perform(function() {
var <变量1> = Java.use("<包名>.<类名>");
<变量1>.<静态变量名>.value = <要修改的值>;
})
}
修改后的frida脚本
function change_static_field() {
Java.perform(function () {
var targetClass = Java.use('com.ad2001.frida0x3.Checker');
targetClass.code.value = 512;
})
}
// 立即执行xx函数
setImmediate(change_static_field)
// frida -U -f com.ad2001.frida0x3 -l main.js
结果:
主动调用increase方法256次
function call_static_method() {
Java.perform(function () {
// 替换为实际的类名
var targetClass = Java.use('com.ad2001.frida0x3.Checker');
for (let i=0; i < 256; i++){
targetClass.increase();
}
console.log("成功调用 increase 方法 256 次");
});
}
低版本的frida如果报错,将 let 换成 var
结果
免费知识星球,每日推送安全文章,欢迎加入。
原文始发于微信公众号(进击的HACK):Frida零基础学习 0x03
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论