Frida Hook 快速开始

前言

我也不知道我多久没更新博客了

官网:frida.re

frida 是我用过最好用的hook框架没有之一,最喜欢的就是不需要重启手机,而且不会造成想xp框架那样手机开机很慢,因为frida在你手机上只运行了一个服务

屁话就少说点吧,进入正题

E-mail:zckuna@163.com

正文

一、安装Frida

install.png

1、这是官网给的快速开始教程,就像安装一个python模块一样安装就好,安装就不多说了,这个没法自己解决不需要看下去了。

2、然后你还需要去Frida Github官方开源项目处下载最新的 frida-server,这个玩意儿是关键,用来连接手机的一个服务,点我下载,打开页面有很多包,目前我看到的最新版本是12.6.5的版本

frida-server-install.png

你需要找到 frida-server-2.6.5-<system>-<version>.xz,其中

  • system 是指你手机的系统,比如Android、IOS,没错,frida支持ios,这个以后等我有ios手机再说(逃;、linux、windows。

  • version 代表你手机处理器架构:

    • IOS有 armarm64

    • Android有 x86x86_64armarm64

    • Linux有 8686_64

    • Windows有 8686_64

3、下载好了后用adb或者其他方式弄到手机的 /data/local/tmp/ 目录下,然后运行(别说你不解压直接运行)

二、运行

下载好了,也运行了后打开终端使用命令 frida-ps -U 获取手机进程来测试是否正常,这一切的前提都是你运行了frida-server并且手机打开了开发者模式连接上了电脑,如果输出了进程信息就说明成功了,如果提示说frida没有连接(英文大概这么说:not connected,大概就这样,自己翻译吧)那就说明你下载的架构与你的手机不相符,或者你没有用数据线连接手机,再或者就是你没有打开开发者模式等等,实在没法解决可以百度、google,当然你也可以把问题已邮件的方式发给我(小声逼逼:我大概能帮你解决)。

frida命令行有很多工具可以用,这些我都不会,因为我用不到。。。给你们个网站吧: www.frida.re,自己看文档,虽然文档不咋地

三、Example

bb了那么多贼鸡儿聊,不弄点东西说的那些跟放屁一样,首先献上官网的一个例子:我是例子,直接 Ctrl C-V 完事...

我这里用mt管理器来示范一下,我来告诉你们为什么要用mt,因为mt的混淆看得我特么要把bin拖出来打一顿,mt目前就我所知,用了代码混淆、res混淆、字符串加密、id加密(这就是字符串加密),而且其中的字符串加密还特么用了好几种方式,我***。既然你要加密字符串,那我就非要把你字符串hook出来,虽然hook了也没什么屌用,因为你还是找不到是哪里加密的。

不管你怎么加密,你总得用到 Stirng、StringBuilder、getString 等这些方法,怎么干,直接hook,新建一个py脚本,如下是我的项目结构:

➜ Mt tree
.
├── mt.py # py脚本
└── script.js # js 脚本

0 directories, 2 files
➜ Mt

输入如下代码(我有注释来解释每一句代码的作用):

mt.py

import frida
import sys
​
​
PACKAGE = 'bin.mt.plus'
​
​
if __name__ == '__main__':
 jscode = open('script.js', 'r').read() # 获取js脚本内容
 # get_usb_device获取设备(就是你手机)
 # attach(翻译:链接)我所理解是连接给定包名的app的进程,为什么是我所理解,因为官网没有写
 process = frida.get_usb_device().attach(PACKAGE) # 获取给定包名的app进程
 print(process) # 打印看看是嘛玩意儿
 script = process.create_script(jscode) # 这里是把你的js脚本给塞进了process,源码在这https://github.com/frida/frida-python/blob/master/frida/core.py#L147
 # script.on('message', on_message)
 print('[*] Running CTF')
 script.load() # 加载脚本,https://github.com/frida/frida-python/blob/master/frida/core.py#L191
 sys.stdin.read()

script.js

// 这个方法是为了辅助我输出用的,和python的字符串.format差不多的用法
String.prototype.format = function () {
 var values = arguments;
 return this.replace(/\{(\d+)\}/g, function (match, index) {
 if (values.length > index) {
 return values[index];
 } else {
 return "";
 }
 });
};
​
​
// Resources 类hook
Java.perform(function() {
 var Resources = Java.use('android.content.res.Resources'); // 获取Resources类
 // 因为getString方法重载,有几个我也没数,我只知道我需要用到的是接收一个id作为参数的方法
 //.overload填上你要hook的方法的参数类型,如果不知道直接不写,frida会报错提示你
 Resources['getString'].overload('int').implementation = function(id) { // id是接收到的参数
 console.log('\n----- [Resources.getString] -----');
 var str = this.getText(id); // 这里通过this调用了Resources类中的getText方法
 console.log('resId:{0} => string:{1}'.format(id,str)); // 输出
 return str // 返回
 }
});
​
​
// Toast 类hook,和上面一样
Java.perform(function() {
 var Toast = Java.use('android.widget.Toast');
 Toast['makeText'].overload('android.content.Context', 'java.lang.CharSequence', 'int').implementation = function(context, text, duration) { // 三个参数
 console.log('\n----- [Toast.makeText] -----');
 console.log('[Context]');
 console.log('\n\tContext:', context);
 console.log('\n\tClass:', context.getClass());
 var clazz = String(context.getClass()).split('.');
 console.log('\n\t\tClass Package:', clazz[0]);
 console.log('\n\t\tClass Name:', clazz[1]);
 console.log('Text:', text);
 console.log('Duration:', duration);
 return this.makeText(context, null, text, duration);
 }
});

运行

➜  Mt python3 mt.py
Traceback (most recent call last):
 File "mt.py", line 10, in <module>
 process = frida.get_usb_device().attach(PACKAGE)
 File "/usr/local/lib/python3.7/site-packages/frida/__init__.py", line 83, in get_usb_device
 return get_device_matching(lambda device: device.type == 'usb', timeout)
 File "/usr/local/lib/python3.7/site-packages/frida/__init__.py", line 113, in get_device_matching
 raise InvalidArgumentError("device not found")
frida.InvalidArgumentError: device not found
➜  Mt

报错,没找到设备,数据线连上电脑后把mt软件给打开,不然又要报错,我就不演示了,正常运行:

run.jpg

如果没东西输出,就检查代码,百分之99是你的问题

总结

总结就算了,就到这吧,饿死我了

下篇预定:frida使用技巧

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容