吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10636|回复: 31
收起左侧

[Android 原创] frida 入门及几种 hook 思路

  [复制链接]
Li1y 发表于 2020-9-1 11:32

本文首发于先知

前言

frida Xposed简单对比

学安卓hook入门的时候纠结于选用哪个平台,Xposed和frida看了看,都在脑子里云了一下觉得都好好用,于是干脆和教程反着来,看着师傅Xposed的文章后用frida复现一遍(实战链接也在文章中,就不发出来了),而且之前Peanuts师傅也发过Xposed的了.

其实两者差别还是比较大的,就拿工作方式来说,Xposed走的是开发那一套,,重新写组件后再打包用,可以说是一劳永逸,以后直接拿apk就能用;frida则不然,它的方式是把js代码注入到进程的方式,简单但是缺点也很明显就是不好用到实际app的使用中

环境搭建

本机实验环境

python3.7
夜神模拟器Android5.1.1
Windows10

frida 安装

pip install frida
pip install frida-tools

frida-server 安装运行

先看看自己模拟器平台,一般模拟器架构都是x86的

λ adb shell getprop ro.product.cpu.abi
x86

我这边是x86的,到frida-releases这找到对应版本进行下载,之后用adb把它push到手机中,转发到本机端口,起frida-server

adb push frida-server /data/local/tmp
adb forward tcp:27042 tcp:27042
adb shell /data/local/tmp/frida-server

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

hook实战测试

实战链接在最上方

就直接拿师傅的程序搞了,师傅用写xposed组件的方式写的,我就拿frida复现一遍,同时实现几个别的思路,开始吧

解锁码

先装到手机上测试,发现进去后要一个key进行解锁.

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

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

之后程序使用equals函数判断和我们输入的是否相等(在此之前程序有一处输出解锁码的函数,即a.a,不过因为条件不满足未执行).

了解流程后进行打hook绕过,思路有两种,一种是把真实的解锁码打印出来(这思路等下用两种方式实现,分别是hook掉打印函数a.a和系统函数equals的方式),还有偷鸡的方式就是直接修改加密函数return一个我们控制的值,之后在输入的时候直接输我们的值就好了.

在注入js代码的时候有两种方式,分别是js直接加载和使用python的方式,python当作一个loader的角色把js代码注入进去,python代码在最下侧,本篇用的是python的方式.下面是js代码(这代码不用纠结,和pwntools一样用多了就熟练了):

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"当返回值
    }
});

三种方法都能完成步骤一的hook,使用python注入一下看看效果


看到了输入的123和真正的作比较

成功了,进入下一个界面.本质上是两种方法,一种是hook自实现函数,一种就是hook系统函数

点金币,开宝箱

点金币的这个onclick执行的函数很简单,就是点击一次后coin加i(原本程序i等于1)

开宝箱按钮就是判断你的coin值大小,大于等于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个了
    }
});


点了几次coin就很大了,直接满足条件

总结 & python loader

可以看到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()

免费评分

参与人数 12威望 +1 吾爱币 +31 热心值 +11 收起 理由
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zhuzhuxia111 + 1 + 1 我很赞同!
Lruc + 1 + 1 谢谢@Thanks!
alexkaer + 1 + 1 谢谢@Thanks!
2595453382 + 1 谢谢@Thanks!
简单メ传说 + 1 + 1 用心讨论,共获提升!
cherubines + 1 + 1 新手很友好!
不懂就问小小白 + 1 + 1 我很赞同!
luoxiao + 1 谢谢@Thanks!
夜步城 + 1 + 1 不错,对新手很友好,今天的评分就给你啦
topcookie + 1 + 1 谢谢@Thanks!
正己 + 2 + 1 赞一个

查看全部评分

本帖被以下淘专辑推荐:

  • · 好帖|主题: 550, 订阅: 86

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

NSYGHIHI 发表于 2020-9-15 13:41
楼主我在手机端erver跑的起来。同时电脑 frida -ps -U也能列出进程,但是我一用frida -p [进程PID] -U 这个命令想进去读取内存。永远都是失败连接关闭。换了python版本和frida也不管用。你出现过这个问题吗。
sansha 发表于 2020-9-6 23:00
作为小白,在实践中再给小白补充一点
执行完adb shell /data/local/tmp/frida-server后,在新cmd执行frida-ps -U
02.jpg
正己 发表于 2020-9-1 11:41
huahaiYa 发表于 2020-9-1 13:41
感谢楼主分享,两种姿势都很有用,谢谢
 楼主| Li1y 发表于 2020-9-1 13:43
正己 发表于 2020-9-1 11:41
安利了,学起来,感谢楼主分享

感谢支持
 楼主| Li1y 发表于 2020-9-1 13:44
huahaiYa 发表于 2020-9-1 13:41
感谢楼主分享,两种姿势都很有用,谢谢

多谢支持,师傅加油
翩若惊鸿少年游 发表于 2020-9-1 15:19
安利了,学起来,感谢楼主分享
夜步城 发表于 2020-9-1 15:39
对新手很友好,学起来
 楼主| Li1y 发表于 2020-9-1 22:11
翩若惊鸿少年游 发表于 2020-9-1 15:19
安利了,学起来,感谢楼主分享

本文初衷
 楼主| Li1y 发表于 2020-9-1 22:12
夜步城 发表于 2020-9-1 15:39
对新手很友好,学起来

师傅加油
zhangyou198712 发表于 2020-9-1 23:11
我来看看看看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 00:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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