源海拾贝 | hooker自动化生成frida脚本

 

背景需求

使用frida逆向的同学免不了写frida脚本,相关frida语法肯定是要熟悉的。懒点的同学直接用objection生成。

 

objection生成的脚本有如下缺点

1、方法调用采用apply(this, arguments)语法,让开发人员难以二次修改
2、方法内部没有堆栈打印
3、没有辅助方法
4、脚本输出在命令行,需要手动复制到本地文件
5、生成的脚本没有版本注释,难以维护

 

hooker自动化生成frida脚本

https://github.com/CreditTone/hooker

下面以某音app为例我们要生成com.bytedance.frameworks.core.encrypt.RequestEncryptUtils这个类的frida脚本

 

快速开始

1. 查看可调试进程

stephen@ubuntu:~/hooker$ ./hooker 
  PID  Name                           Identifier                                                   
-----  -----------------------------  -------------------------------------------------------------
 2857  Android Auto                                              
14403  信息                             com.google.android.apps.messaging                            
12073  存储已屏蔽的号码                       com.android.providers.blockednumber                          
 1574  实时数据壁纸                         com.ustwo.lwp                                                
15637  抖音                             com.ss.android.ugc.aweme                                     
 2480  搜狗输入法                          com.sohu.inputmethod.sogou                                   
12073  用户字典                           com.android.providers.userdictionary                         
13362  电话                             com.google.android.dialer                                    
 1704  电话和短信存储                        com.android.providers.telephony                              
 1704  电话服务                           com.android.phone                                            
11818  知乎                             com.zhihu.android                                                                                     
Enter the need to attach package.
:

2. attach应用

stephen@ubuntu:~/hooker$ ./hooker
  PID  Name                           Identifier                                                   
-----  -----------------------------  -------------------------------------------------------------
15637  抖音                             com.ss.android.ugc.aweme                                     
 2480  搜狗输入法                          com.sohu.inputmethod.sogou                                   
12073  用户字典                           com.android.providers.userdictionary                         
13362  电话                             com.google.android.dialer                                    
 1704  电话和短信存储                        com.android.providers.telephony                              
 1704  电话服务                           com.android.phone                                            
11818  知乎                             com.zhihu.android                                            
 1451  系统界面                           com.android.systemui                                         
12424  紧急警报                           com.android.cellbroadcastreceiver                            
12073  联系人存储                          com.android.providers.contacts                               
 1431  蓝牙                             com.android.bluetooth                                        
  929  设置存储                           com.android.providers.settings                               
10149  运营商设置                          com.google.android.wfcactivation                             
14376  通讯录                            com.google.android.contacts                                  
  929  通话管理                           com.android.server.telecom                                   
14807  阿里巴巴                           com.alibaba.wireless                                         
Enter the need to attach package.
: com.ss.android.ugc.aweme  #在此处输入某音进程的Identifier回车即可调试应用
:
提示1: 第一次调试你的应用时hooker将在当前目录生成以进程Identifier命名的应用专有工作目录,并初始化生成一些你可能会用到的通杀脚本。
提示2: 成功attach一个应用时,命令将pause在等待输入调试指令的阶段。pause状态下使用命令进行高级调试请直接跳到

j – 生成指定类的hook脚本

在命令行输入j com.bytedance.frameworks.core.encrypt.RequestEncryptUtils -o com.bytedance.frameworks.core.encrypt.RequestEncryptUtils.js 就会生成指定类名称的hook脚本,也是hooker最核心的功能之一。相比objection,hooker生成的脚本有标注生产脚本的apk版本和类名。并且每个方法内部已经具备打印堆栈的功能,包括调用时间、线程id、线程名、调用对象的hashcode,调用方法用时都有很详细的描述。

此脚本源码参考RequestEncryptUtils.js

objection生成的脚本就不贴了,给objection留点面子!!!

 

hooker生成脚本和objection生成脚本优势对比

项目 生成脚本命令 能否打印堆栈 包含辅助方法 脚本版本信息注释 脚本可定制性
hooker j [class_name] -o [outputpath].js 包含 带apk version和生成命令
objection android hooking generate simple [class_name] 不能(白纸一张) 不包含 不带 一般

开源这个项目的目的是让大家把精力放在逆向思路上,不要去纠结语法上的问题啦。了解原理就ok了,后面让代码去生成代码岂不美哉!

https://github.com/CreditTone/hooker

(完)