1. 准备:

  • mac电脑
  • 越狱好的手机
  • 一个待分析的app

2. app砸壳

文章参考https://www.jianshu.com/p/80c1311530c3

3. 反编译出头文件

文章参考https://www.jianshu.com/p/c4272fce6703

4. frida安装

电脑直接运行以下命令

pip install frida-tools

参考官方
https://frida.re/docs/ios/
手机端打开Cydia搜索frida安装

5. frida-ps使用

# 将Frida通过USB连接到iPad,并列出正在运行的进程
frida-ps -U# 运行中的应用程序列表
frida-ps -Ua# 已安装的应用程序列表
frida-ps -Uai# 把Frida连接到特定的设备上
frida-ps -D 0216027d1d6d3a03

6. 分析砸壳之后导出的头文件

这一步只能靠日常经验去猜,比如接口请求一般都是request、response等关键字。
或者结合android端的命名(前提分析了android的APP)

7. 结合frida-trace去分析

官方文档https://frida.re/docs/frida-trace/
比如下面的命令

frida-trace -m "+[JDYUserContextManager sharedInstance]" -U 千牛

追踪JDYUserContextManager类,sharedInstance方法的调用
也可以使用*模糊追踪,比如
-m 包含指定方法
-M 排除指定方法
-U usb连接

frida-trace -m "+[JDYUserContextManager shared*]" -U 千牛

8. frida代码的编写

新建两个文件
qianniu.py

import frida, sys #导入frida模块
script = 'qianniu.js' #准备执行的frida javaScript脚本
bundle = 'com.taobao.sellerplatform' #准备hook的app的bundleIdf = open(script, "r") #打开frida脚本
s = f.read() #读取frida脚本device = frida.get_usb_device(1000) #连接usb设备 1000表示超时
pid = device.spawn([bundle]) #启动指定bundleId的app
session = device.attach(pid) #附加到app
script = session.create_script(s) #创建frida javaScript脚本
script.load() #load脚本到app进程中 这样即注入成功
device.resume(pid) #恢复app运行
sys.stdin.read()#读取打印日志

qianniu.js

if(ObjC.available){ //判断Object-C类方法是否已经加载进来console.log('hello world!')
}

9. hook指定方法

// 普通参数
function hook01(){let class_name = 'JDYUserContextManager'let method = '+ sharedInstance'let sharedInstance = ObjC.classes[class_name][method]let oldImpl = sharedInstance.implementationsharedInstance.implementation = ObjC.implement(sharedInstance,function(handle,selector,arg1,arg2){ // 如果有参数的话,就是第三个参数为该方法的第一个参数:args[n-2]// 查看值console.log("arg1",new ObjC.Object(arg1))let result = oldImpl(handle,selector,arg1,arg2)return result})
}// 参数类型为NSStackBlock
let method = '+ autoLogin:session:callBack:'let impl = ObjC.classes.ALBBSessionRpcService[method]const oldImpl = impl.implementation;impl.implementation = ObjC.implement(impl, function(handle,selector,arg1,arg2,arg3) {try{console.log("arg1",new ObjC.Object(arg1))console.log("arg2",arg2,JSON.stringify(new ObjC.Object(arg2)))console.log("arg3",arg3,new ObjC.Object(arg3)) //此参数为NSStackBlockvar block = new ObjC.Block(arg3);const appCallback = block.implementation;block.implementation = function (resp)  {console.log(resp) // ALBBResponseconst result = appCallback(resp);return result;};var ret = oldImpl(handle,selector,arg1,arg2,arg3);// console.log(ret)}catch(err){console.log(err)}return ret});

设置属性@property

let obj = ObjC.classes.ALBBRPCInfo['new']()
obj.token(); // 获取属性
obj['setToken:']('token值') // 设置属性

创建String类型

let arg1 = ObjC.classes.NSString['alloc']()['initWithString:']('我的字符串参数')

创建Block

const pendingBlocks = new Set();
let newReplyBlock = new ObjC.Block({// 类型签名,可以通过hook指定方法的block参数打印new ObjC.Block(resultCallback).typestypes:'v12@?0B8', implementation: function () {pendingBlocks.delete(newReplyBlock);}
});

获取指定类型的签名

ObjC.classes.Foo['- connection:didReceiveResponse:'].types
// 或
new ObjC.Block(resultCallback).types

获取指定对象的参数列表

obj.$ivars

###10. 调用指定方法

  • 代码1

需要调用类的头文件

@interface ALBBSessionModel : NSObject
{
}
+ (id)getUserId;

调用代码

let userid = new ObjC.Object(ObjC.classes.ALBBSessionModel['+ getUserId']())
  • 代码2

需要调用类的头文件

@interface JDYLoginCenterProtocolIMP : NSObject <JDYLoginCenterProtocol, JDYILoginService>
{
}
- (void)fastSwitchUserWithUserId:(id)arg1 resultCallback:(CDUnknownBlockType)arg2;

调用代码

let userid = ObjC.classes.NSString['alloc']()['initWithString:']('3109007973')
const pendingBlocks = new Set();var newReplyBlock = new ObjC.Block({types:'v12@?0B8',implementation: function () {pendingBlocks.delete(newReplyBlock);}
});let obj = ObjC.classes.JDYLoginCenterProtocolIMP['new']()
obj['- fastSwitchUserWithUserId:resultCallback:'](userid,newReplyBlock)

11. 日志查看

安装

brew install libimobiledevice

idevicesyslog日志查看工具
查看帮助

idevicesyslog --help

匹配关键字

idevicesyslog -m JDYLoginCenterProtocolIMP

更多关于frida的学习,可以参考
https://codeshare.frida.re/

ios逆向之frida简单教程相关推荐

  1. IOS逆向之frida安装

    首先手机要越狱,这个就不说了,博主就是咸鱼搞了个160的苹果6, 自己刷到苹果6支持最新的12.5.7版本后越狱: 谁让他低版本,不支持 CrackerXI砸壳呢,当时你要是使用 frida-ios- ...

  2. ios逆向,tweak简洁使用教程

    准备工作: .爱思助手 .一台已越狱的iphone,并已安装cydia . 安装Theos,安装教程就忽略了,Theos安装起来比较麻烦,主要是网络原因,这里提供一份绿色版本 https://down ...

  3. 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像

    2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程--使用theos tweak 注入hook修改游戏执行代码上传动态头像 开篇 需求&最终效果 环境要求与即将使用的 ...

  4. iOS逆向之脱壳工具creakerXI+,最简单、最适合新手的脱壳工具

    在学习iOS逆向中,脱壳是必备技能之一,在网上看教程有使用 Clutch 和 dumpdecrypted  但是,不知道 是我操作问题,还是手机版本,以及APP版本更新问题 尝试了几次,都无法成功脱壳 ...

  5. ios逆向傻瓜入门教程(一)

    1.准备工作: (1)一台越狱手机,并装有以下软件:cycript,openssh (2)下载工具库,内容列表: (3)在越狱手机上,从appstore上,下载WeChat(微信). 2.ssh到手机 ...

  6. app反爬测试之apk逆向分析-frida

    前言: 目前为止,很多app的防护基本也还是用的ssl pinning检测证书. 因为,目前的app要么不用ssl,要么用就是一般的ssl,基本就是在手机上装个相关软件 的代理即可,而且这个代理基本就 ...

  7. 【iOS逆向与安全】iOS插件开发光速入门

    前言 经过之前的学习,相信你已经能熟练的使用Frida-trace.IDA Pro等逆向工具.不过,仅仅到这肯定是不够的.接下来,学会把你逆向的结果打包成插件并运行,那iOS逆向,你也就真正的入门了. ...

  8. 精品连载丨安卓 App 逆向课程之二逆向神器 frida 的介绍

    " 阅读本文大概需要 8 分钟. " 前面我们介绍了精品连载丨安卓 App 逆向课程一之环境配置,下面我们来接着介绍一个安卓 App 逆向大杀器-- frida. 前阵子受< ...

  9. app逆向(8)| frida和frida-rpc

    文章目录 一.frida和frida-rpc 1.简单介绍 2.安装frida 二.了解app的hook 1.hook能干嘛 2.frida中使用implementation进行hook 3.hook ...

最新文章

  1. 详解深度学习中的Normalization,不只是BN(1)
  2. 问题清空easyui required=true的提示信息所在位置不对。乱跑的解决办法
  3. Java多线程编程那些事:volatile解惑--转
  4. Java(发布/订阅模式)
  5. 广播多路访问链路上的OSPF
  6. Scala学习笔记04:内建控制结构
  7. 【扫盲系列】网络术语
  8. 学车考试技巧(图解)
  9. 南充计算机职业学校有哪些专业,南充旅游计算机职业中专学校2020年招生简介...
  10. 滴滴Uber神州易到,共享出行四国军棋沙盘推演
  11. 2012服务器系统下怎么分区,Windows Server 2012之更改系统分区
  12. 1602实现计算机实验报告,LCD1602液晶显示实验报告
  13. HTML5期末大作业:体育网页设计——篮球专题6页(代码质量好) 学生DW网页设计作业源码 web课程设计网页规划与设计
  14. 区块链 Fisco bcos 智能合约(22)-全面的性能分析工具
  15. 沐神《动手学深度学习》使用笔记
  16. 抖音中的搞笑BGM如何提取,MP3转换器怎么使用
  17. unity塔防游戏怪物转向_家园保卫战红包版下载,家园保卫战赚钱游戏红包版 v1.0.5...
  18. 嵌入式 win7下配置开发环境和VS2010联合使用
  19. 教育技术学习《基于设计的研究与教育游戏设计应用》笔记
  20. Cadence原理图前期规范性检查步骤

热门文章

  1. 详谈静态库和动态库的区别
  2. 美团点评高性能跨平台动态化框架-Picasso
  3. 废旧锂电池湿法回收酸浸料液除氟
  4. goip设备的特点_架设通讯网络设备为境外诈骗集团服务 3男子被田东警方抓获...
  5. java Swing 鼠标图标的改变及移入按钮改变
  6. 4月第2周业务风控关注 |互联网信息服务投诉平台正式上线试运行
  7. 3年经验双非进oppo ,分享心得与面试技巧
  8. WorkNC配置与MAKINO牧野 MCC2013 6轴加工中心
  9. 配置linux开发板ssh登录
  10. Android转AndroidX