样本链接: https://pan.baidu.com/s/11fzO6Zlgsk8FOa24yZ4b0w?pwd=k3su 提取码: k3su
安装好apk并打开。需要输入数字,点击提交,不正确的话会提示“Try again”
mobsf扫描一下apk(如果没有搭建,可以利用fofa等搜title="mobsf",注意事项自行分析),并搜索“Try again”查看MainActivity:
在MainActivity.class的 onCreate方法中,有一个button的点击监听:
关键代码:
MainActivity
.this
.check
(
i
,
Integer
.parseInt
(
obj
));
这里传进去的i在onCreate方法中已经声明了:
final
int
i = get_random();
而get_random()方法,返回的是一个0-99随机的整数。:
int
get_random
(
)
{
return
new
Random().nextInt(
100
);
}
并将用户输入的数一并传入check方法:
void
check
(
int
i,
int
i2
)
{
if
((i *
2
) +
4
== i2) {
Toast.makeText(getApplicationContext(),
"Yey you guessed it right"
,
1
).show();
StringBuilder sb =
new
StringBuilder();
for
(
int
i3 =
0
; i3 <
20
; i3++) {
char
charAt =
"AMDYV{WVWT_CJJF_0s1}"
.charAt(i3);
if
(charAt <
'a'
|| charAt >
'z'
) {
if
(charAt >=
'A'
) {
if
(charAt <=
'Z'
) {
charAt = (
char
) (charAt -
21
);
if
(charAt >=
'A'
) {
}
charAt = (
char
) (charAt +
26
);
}
}
sb.append(charAt);
}
else
{
charAt = (
char
) (charAt -
21
);
if
(charAt >=
'a'
) {
sb.append(charAt);
}
charAt = (
char
) (charAt +
26
);
sb.append(charAt);
}
}
this
.t1.setText(sb.toString());
return
;
}
Toast.makeText(getApplicationContext(),
"Try again"
,
1
).show();
}
在check方法中可以看到app输入错误时弹出的Toast,这里i就是随机0-99的整数,i2就是用户输入的数,将这两个数进行比对,当:
(i * 2) + 4 == i2
就会弹出“Yey you guessed it right”的字符串。
因此,在这里有2个思路去实现这个功能,一个思路是,先知道i的值是多少,再将i乘以2加4得出的结果就是要输入的结果;另一个思路是通过对check进行重载,固定传进去让(i * 2) + 4 与i2相等的值,使得输入什么都将返回“Yey you guessed it right”。
思路一:
Java.perform(
function
(
)
{
var
a = Java.use(
"com.ad2001.frida0x1.MainActivity"
);
a.get_random.implementation =
function
(
)
{
console
.log(
"成功Hook获取0-99随机整数的方法"
);
var
ret_val =
this
.get_random();
console
.log(
"随机数为:"
+ ret_val);
return
ret_val;
}
});
frida -U -f com.ad2001.frida0x1 -l hook_getrandom.js
输入67*2+4的值138:
成功弹出:Yey you guessed it right
可以继续完善这个脚本,让它自己计算好直接告诉我们需要输入多少即可:
Java.perform(
function
(
)
{
var
a = Java.use(
"com.ad2001.frida0x1.MainActivity"
);
a.get_random.implementation =
function
(
)
{
console
.log(
"成功Hook获取0-99随机整数的方法"
);
var
ret_val =
this
.get_random();
console
.log(
"随机数为:"
+ ret_val);
console
.log(
"答案是:"
+ (ret_val *
2
+
4
))
//TO bypass the check
return
ret_val;
}
});
思路二:
Java.perform(
function
(
)
{
var
a = Java.use(
"com.ad2001.frida0x1.MainActivity"
);
a.check.overload(
'int'
,
'int'
).implementation =
function
(
a, b
)
{
console
.log(
"你输入的是:"
+ b);
this
.check(
8
,
20
);
}
});
原文始发于微信公众号(赛哈文):Frida Hook Android method(一)
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论