iOS逆向小知识: hook框架frida的安装和使用( frida Failed to spawn 的 解决方案)

简介: iOS逆向小知识: hook框架frida的安装和使用( frida Failed to spawn 的 解决方案)

前言

逆向开发的流程:静态分析结合动态调试来实现特定功能的tweak

利用Hopper、class-dump、ios-ssl-kill-switch、Keychain-Dumper、MachOParser进行静态分析;使用CycriptTricks(Powerful private methods)、UIButton的sendActionsForControlEvents、DerekSelander LLDB(Python scripts to aid in your debugging sessions)、frida 进行动态调试分析;采用Theos、MonkeyDev进行开发调试iphone/tool、iphone/tweak。

I、Frida

Frida是一款基于python + javascript 的hook框架,通杀android\ios\linux\win\osx各平台。Frida原理是手机端安装一个server程序把手机端的端口转到PC端写的python脚本进行通信,而python脚本中采用javascript语言编写hook代码。

1.1 install frida on device

Start Cydia and add Frida's repository by navigating to Manage -> Sources -> Edit -> Add and entering https://build.frida.re

  • apt-get update
-rwxr-xr-x 1 root wheel 11292672 Dec 14 00:54 /usr/sbin/frida-server*
-rw-r--r-- 1 root wheel 779 Dec 14 00:54 /Library/LaunchDaemons/re.frida.server.plist

1.2 install frida on  mac

安装 pip, pip是python的包管理工具

$ sudo easy_install pip

安装  :$ sudo -H pip install frida升级 frida:$ sudo pip install --upgrade frida --ignore-installed six通过USB连接设备,确保Frida正常工作

-U, --usb             connect to USB device -a, --applications    list only applications -i, --installed       include all installed applications

$  frida-ps -Uai
PID  Name          Identifier                 
---  ------------  ---------------------------
904  Cydia         com.saurik.Cydia           
856  微信            com.tencent.xin            
858  邮件            com.apple.mobilemail       
App Store     com.apple.AppStore

1.3 debug

pdb.py can be invoked as a script to debug other scripts.

$ python -m pdb  ./dump.py 微信
> /Users/devzkn/Downloads/kevin-software/ios-Reverse_Engineering/frida-ios-dump-master/dump.py(7)<module>()
-> import sys

pdb 常用命令:

(Pdb) h
Documented commands (type help <topic>):
========================================
EOF    bt         cont      enable  jump  pp       run      unt   
a      c          continue  exit    l     q        s        until 
alias  cl         d         h       list  quit     step     up    
args   clear      debug     help    n     r        tbreak   w     
b      commands   disable   ignore  next  restart  u        whatis
break  condition  down      j       p     return   unalias  where

break 或b : 设置断点 设置断点

continue或c: 继续执行程序

list 或l : 查看当前行的代码段

step 或s : 进入函数

return 或r : 执行代码直到从当前函数返回

exit 或 q : 中止并退出

next 或 n : 执行下一行

pp : 打印变量的值

(Pdb) pp os.getcwd()
'/Users/devzkn/Downloads/kevin\xef\xbc\x8dsoftware/ios-Reverse_Engineering/frida-ios-dump-master'

打印汉字

(Pdb) print sys.argv
['./dump.py', '\xe5\xbe\xae\xe4\xbf\xa1']
(Pdb) print sys.argv[1]
微信

1.4 利用frida进行dump

frida-ios-dump :https://github.com/zhangkn/frida-ios-dump

  1. 安装上面步骤install frida on device and mac
  2. 使用usbmuxd 进行端口转发 本地端口2222 转发到iOS的22端口
  3. 执行dump.py
devzkndeMacBook-Pro:bin devzkn$ frida-ps -Uai
 PID  Name          Identifier                 
----  ------------  ---------------------------
1314  App Store     com.apple.AppStore         
2151  微信            com.tencent.xin            
2183  淘宝联盟          com.alimama.moon           
1309  设置            com.apple.Preferences

必须在dump.py 所在的目录下执行。即使使用ln -l 也会失败。

devzkndeMacBook-Pro:frida-ios-dump-master devzkn$ ./dump.py 驱蚊大咖
open target  app......
start dump target app......

II 常见问题

2.1 Operation not permitted

Operation not permitted: /var/folders/6t/h404bjcd5tb_4q86tpv_251rv_0h0j/T/pip-sYsqDS-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info

This is because OS X El Capitan ships with six 1.4.1 installed already and when it attempts to uninstall it (because awscli depends on botocore, botocore depends on python-dateutil, and python-dateutil depends on six >= 1.5) it doesn't have permission to do so because System Integrity Protection doesn't allow even root to modify those directories.

$ sudo -H pip install --ignore-installed six

检测frida-server 没有启动

iPhone:/usr/sbin root# killall SpringBoard
iPhone:/usr/sbin root# ps -e |grep frida-server
 2290 ttys000    0:00.01 grep frida-server

2.1  frida Failed to spawn 的替代方案

1、先使用frida-ps -Uai 查看PID 2、使用 frida -p attach

$ frida -U -p 1262
     ____
    / _  |   Frida 10.6.27 - A world-class dynamic instrumentation framework
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at http://www.frida.re/docs/home/
[iPhone::PID::1262]->

2.3  使用中文路径导致frida-ios-dump 失败

具体的问题分析过程

(Pdb) l
108    script = loadJsFile(session, APP_JS);
109    name = target.decode('utf8');
110    script.post(name);
111    opened.wait();
112    session.detach();
113  ->  createDir(os.getcwd()+"/"+OUTPUT)
114    print "start dump target app......"
115    session = device.attach(name);
116    script = loadJsFile(session, DUMP_JS);
117    script.post("dump");
118    finished.wait();
(Pdb) s
--Return--
> /Users/devzkn/Downloads/kevin-software/ios-Reverse_Engineering/frida-ios-dump-master/dump.py(113)main()->None
-> createDir(os.getcwd()+"/"+OUTPUT)
(Pdb) l
108    script = loadJsFile(session, APP_JS);
109    name = target.decode('utf8');
110    script.post(name);
111    opened.wait();
112    session.detach();
113  ->  createDir(os.getcwd()+"/"+OUTPUT)
114    print "start dump target app......"
115    session = device.attach(name);
116    script = loadJsFile(session, DUMP_JS);
117    script.post("dump");
118    finished.wait();
(Pdb) s
UnicodeDecodeError: UnicodeD...ge(128)')
> /Users/devzkn/Downloads/kevin-software/ios-Reverse_Engineering/frida-ios-dump-master/dump.py(127)<module>()
-> main(sys.argv[1])
(Pdb) l
122    if len(sys.argv) < 2:
123     print "usage: ./dump.py 微信"
124     sys.exit(0)
125    else:
126     try:
127  ->    main(sys.argv[1])
128     except KeyboardInterrupt:
129      if session:
130       session.detach()
131      sys.exit()
132     except:
(Pdb) s
> /Users/devzkn/Downloads/kevin-software/ios-Reverse_Engineering/frida-ios-dump-master/dump.py(128)<module>()
-> except KeyboardInterrupt:
(Pdb) pp UnicodeDecodeError
<type 'exceptions.UnicodeDecodeError'>

创建目录命名最好使用英文,否则脚本不支持中文路径的话,就容易出问题;比如frida-ios-dump就不支持存储路径是中文的。

see also

目录
相关文章
|
2月前
|
物联网 区块链 vr&ar
未来已来:探索区块链、物联网与虚拟现实技术的融合与应用安卓与iOS开发中的跨平台框架选择
【8月更文挑战第30天】在科技的巨轮下,新技术不断涌现,引领着社会进步。本文将聚焦于当前最前沿的技术——区块链、物联网和虚拟现实,探讨它们各自的发展趋势及其在未来可能的应用场景。我们将从这些技术的基本定义出发,逐步深入到它们的相互作用和集成应用,最后展望它们如何共同塑造一个全新的数字生态系统。
|
6天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
24 7
|
10天前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
|
10天前
|
iOS开发 开发者 UED
探索iOS应用开发中的SwiftUI框架
【9月更文挑战第26天】 在iOS开发的海洋中,SwiftUI犹如一艘现代的快艇,引领着开发者们驶向更加高效与直观的编程体验。本文将带你领略SwiftUI的魅力,从其设计理念到实际应用,我们将一步步揭开它如何简化界面构建过程的面纱。通过对比传统方式,你将看到SwiftUI如何让代码变得像诗一样优美,同时保持强大的功能性和灵活性。准备好让你的iOS开发技能加速升级,一起驾驭这股新潮流吧!
|
16天前
|
前端开发 iOS开发 开发者
探索iOS开发中的SwiftUI框架
【9月更文挑战第21天】在iOS应用开发的广阔天地中,SwiftUI框架如一股清新之风,为开发者带来了声明式语法的便捷与高效。本文将深入探讨SwiftUI的核心概念、布局方式及数据绑定机制,同时通过实例演示如何运用SwiftUI构建用户界面,旨在引领读者领略SwiftUI的魅力,并激发其对iOS开发新趋势的思考与实践。
33 6
|
2月前
|
机器学习/深度学习 搜索推荐 数据处理
探索iOS应用开发的新趋势:SwiftUI和Combine框架
【8月更文挑战第6天】随着Apple不断推动其操作系统的进化,iOS开发领域也迎来了新的变革。本文将深入探讨SwiftUI和Combine框架如何革新iOS应用开发流程,提升开发者的工作效率,并改善最终用户的体验。我们将从这两个框架的基本概念出发,分析它们的核心优势,并预测它们将如何塑造iOS开发的未来。
|
2月前
|
测试技术 Linux 虚拟化
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
详细的VMware虚拟机安装macOS Big Sur的保姆级教程,包括下载VMware和macOS镜像、图解安装步骤和遇到问题时的解决方案,旨在帮助读者顺利搭建macOS虚拟机环境。
62 3
iOS自动化测试方案(五):保姆级VMware虚拟机安装MacOS
|
2月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
84 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
1月前
|
开发工具 Swift iOS开发
探索iOS开发中的SwiftUI框架
【9月更文挑战第1天】在本文中,我们将一起潜入iOS开发的海洋,特别聚焦于SwiftUI这一现代且富有表现力的框架。SwiftUI不仅简化了界面设计流程,还为开发者提供了声明式Swift语法的便利。通过这篇文章,你将学会如何利用SwiftUI构建灵活且响应式的用户界面,并理解其背后的原理。无论你是刚入门的新手还是寻求进阶的开发者,本文都将为你提供有价值的指导和启示。
|
2月前
|
设计模式 Java Android开发
探索安卓应用开发:从新手到专家的旅程探索iOS开发中的SwiftUI框架
【8月更文挑战第29天】本文旨在通过一个易于理解的旅程比喻,带领读者深入探讨安卓应用开发的各个方面。我们将从基础概念入手,逐步过渡到高级技术,最后讨论如何维护和推广你的应用。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供有价值的见解和实用的代码示例。让我们一起开始这段激动人心的旅程吧!