前言
frida Xposed简单对比
那时学hook导入的X将X放在现役和安卓服务器平台上,X摆在了脑袋里看,在云里云里很容易用教程和师傅反着来,然后用frida的文章和师傅反着来,然后用frida的文章中的(实战链接文章,不来发了),而且之前花生师傅也发过了。
而是更多比较大的,说出来,Xposed走是那种直接的工作方式,直接写出来,用,可以说是再重新写一份工作, 它的方式是把代码带到的简单但也很明显的方式就是很好地处理实际应用程序的使用
python3.7夜神模拟器Android5.1.1Windows10
pip install fridapip install frida-tools
看看自己的平台,首先是x86的
λ adb shell getprop ro.product.cpu.abix86
我这个x86的,到frida-releases进行这个找到版本下载,把它用推到手机中,然后转向到本机端口adb,frida-server
adb push frida-server /data/local/tmpadb forward tcp:27042 tcp:27042adb shell /data/local/tmp/frida-server
已经起来了,可以用查看frida-ps -U
进程
实战链接在最早上
拿师傅的程序写组件的方式写了
先装到手机上测试,发现进去后要一个钥匙进行解锁。
使用(我用的jadx)打开apk测试,第一个是要一个小程序反编译到工具下,发现有两个处码与出来的挑战完全一致。
进入加密函数一探究竟,就可以看到进行了加密。
程序使用后是否有使用权限的鉴定程序(在此之前有权限解锁和解锁我们未执行的函数,但条件不执行)。
了解后进行打钩打印的方式,一种是把等量的电话号码打印出来(这种思路等流程用下挂机方式,是挂机打印方式和系统下挂方式),偷鸡的方式就是直接直接加密函数返回一个我们修改控制的值,然后在输入的时候输给我们的值就好了。
插入js代码的时候有一种方式,分别是js直接加载和使用的方式,python在最下边把js代码的把代码放在python里面,python在最下边的角色代码,本篇用是python的方式。
console.log("Script loaded successfully ");Java.perform(function x() {
var String = Java.use('java.lang.String')//定位到要hook的类名
String.equals.implementation = function (arg1) {//equals就是我们要hook的函数
console.log("your input : " + this.toString());
console.log("I'm the real key : " + arg1);//打印出来真实的解锁码
var ret = this.equals(arg1);
return ret;//返回值
}
var Show_key = Java.use("com.hfdcxy.android.by.a.a");
Show_key.a.overload("java.lang.String").implementation = function (args1) {
console.log("Your_key_is" + args1);//打印解锁码
}
var my_class = Java.use("com.hfdcxy.android.by.test.a");
my_class.a.implementation = function () {
return "123456789";//使用"123456789"当返回值
}});
挂钩方法完成一个钩子,使用python注入一下看看效果
看到了输入的123和真正的比较 成功了,进入下一个。
点金币的这个执行的函数后加简单的i(原本的程序很简单,就是点击一下,点击一次)
开宝箱按钮鉴定就是你的硬币大小,比9999就完成挑战
这里再介绍另一种姿势,就是修改函数的参数完成参数调用,frida实现起来也很简单,见js:
console.log("Script loaded successfully ");
Java.perform(function x() {
var coin = Java.use("com.hfdcxy.android.by.test.b");
coin.a.overload("android.content.SharedPreferences", "android.widget.TextView", "int").implementation = function (args1,args2,args3) {//overload后接的参数都是这个a函数的参数
return this.a(args1,args2,9999)//把参数改成9999,这样一次就能加9999个了
}
});
点了满足,硬币就很大了,直接条件
可以看到frida在hook时真的方便,代码也不难,本篇js太过简单,有好多很nb的模板都可以拿来练练并测试,官方文档也是深入学习的好去处
import time
import frida
device = frida.get_remote_device()
pid = device.spawn(["com.ss.android.ugc.aweme"])#程序名
device.resume(pid)
time.sleep(1)
session = device.attach(pid)
with open("s1.js") as f:
script = session.create_script(f.read())
script.load()
input()
来源:先知(https://xz.aliyun.com/t/8211#toc-0)
如有侵权,请联系删除
推荐阅读