安全矩阵

 找回密码
 立即注册
搜索
查看: 242|回复: 0

frida 入门及几种 hook 思路

[复制链接]

81

主题

82

帖子

341

积分

中级会员

Rank: 3Rank: 3

积分
341
发表于 2022-6-23 23:18:37 | 显示全部楼层 |阅读模式
本帖最后由 wangqiang 于 2022-6-23 23:22 编辑

frida 入门及几种 hook 思路
pic4xiu 衡阳信安
2022-06-23 07:00 发表于山东
转载地址:frida 入门及几种 hook 思路

前言
frida Xposed简单对比
那时学hook导入的X将X放在现役和安卓服务器平台上,X摆在了脑袋里看,在云里云里很容易用教程和师傅反着来,然后用frida的文章和师傅反着来,
然后用frida的文章中的(实战链接文章,不来发了),而且之前花生师傅也发过了。
而是更多比较大的,说出来,Xposed走是那种直接的工作方式,直接写出来,用,可以说是再重新写一份工作, 它的方式是把代码带到的简单
但也很明显的方式就是很好地处理实际应用程序的使用

环境生态本机实验环境
  1. python3.7夜神模拟器Android5.1.1Windows10
复制代码

frida 安装
  1. pip install fridapip install frida-tools
复制代码

frida-server 安装运行
看看自己的平台,首先是x86的
  1. λ adb shell getprop ro.product.cpu.abix86
复制代码

我这个x86的,到frida-releases进行这个找到版本下载,把它用推到手机中,然后转向到本机端口adb,frida-server
  1. adb push frida-server /data/local/tmpadb forward tcp:27042 tcp:27042adb shell /data/local/tmp/frida-server
复制代码

已经起来了,可以用查看frida-ps -U进程

hook实战测试
实战链接在最早上
拿师傅的程序写组件的方式写了

解锁码
先装到手机上测试,发现进去后要一个钥匙进行解锁。

使用(我用的jadx)打开apk测试,第一个是要一个小程序反编译到工具下,发现有两个处码与出来的挑战完全一致。

进入加密函数一探究竟,就可以看到进行了加密。

程序使用后是否有使用权限的鉴定程序(在此之前有权限解锁和解锁我们未执行的函数,但条件不执行)。

了解后进行打钩打印的方式,一种是把等量的电话号码打印出来(这种思路等流程用下挂机方式,是挂机打印方式和系统下挂方式),
偷鸡的方式就是直接直接加密函数返回一个我们修改控制的值,然后在输入的时候输给我们的值就好了。
插入js代码的时候有一种方式,分别是js直接加载和使用的方式,python在最下边把js代码的把代码放在python里面,python在最下边的角色代码,本篇用是python的方式。
  1. console.log("Script loaded successfully ");Java.perform(function x() {
  2.     var String = Java.use('java.lang.String')//定位到要hook的类名
  3.     String.equals.implementation = function (arg1) {//equals就是我们要hook的函数
  4.     console.log("your input : " + this.toString());
  5.     console.log("I'm the real key : " + arg1);//打印出来真实的解锁码
  6.     var ret = this.equals(arg1);
  7.     return ret;//返回值
  8.     }
  9.     var Show_key = Java.use("com.hfdcxy.android.by.a.a");
  10.     Show_key.a.overload("java.lang.String").implementation = function (args1) {
  11.     console.log("Your_key_is" + args1);//打印解锁码
  12.     }
  13.     var my_class = Java.use("com.hfdcxy.android.by.test.a");
  14.     my_class.a.implementation = function () {
  15.         return "123456789";//使用"123456789"当返回值
  16.     }});
复制代码

挂钩方法完成一个钩子,使用python注入一下看看效果


看到了输入的123和真正的比较 成功了,进入下一个。
点金币,开宝箱
点金币的这个执行的函数后加简单的i(原本的程序很简单,就是点击一下,点击一次)

开宝箱按钮鉴定就是你的硬币大小,比9999就完成挑战

这里再介绍另一种姿势,就是修改函数的参数完成参数调用,frida实现起来也很简单,见js:
  1. console.log("Script loaded successfully ");
  2. Java.perform(function x() {
  3.     var coin = Java.use("com.hfdcxy.android.by.test.b");
  4.     coin.a.overload("android.content.SharedPreferences", "android.widget.TextView", "int").implementation = function (args1,args2,args3) {//overload后接的参数都是这个a函数的参数
  5.         return this.a(args1,args2,9999)//把参数改成9999,这样一次就能加9999个了
  6.     }
  7. });
复制代码


点了满足,硬币就很大了,直接条件

总结 & python loader
可以看到frida在hook时真的方便,代码也不难,本篇js太过简单,有好多很nb的模板都可以拿来练练并测试,官方文档也是深入学习的好去处
  1. import time
  2. import frida
  3. device = frida.get_remote_device()
  4. pid = device.spawn(["com.ss.android.ugc.aweme"])#程序名
  5. device.resume(pid)
  6. time.sleep(1)
  7. session = device.attach(pid)
  8. with open("s1.js") as f:
  9.     script = session.create_script(f.read())
  10. script.load()
  11. input()

复制代码

来源:先知(https://xz.aliyun.com/t/8211#toc-0)





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2022-8-13 14:19 , Processed in 0.010637 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表