文章目录

  • 配置theos环境变量
  • 手动在tweak里打印一个函数的信息
  • 使用logify.pl自动生成一个.h文件中的所有函数的打印信息
  • 只打印函数名
  • 修改报错
    • error: unknown type name 'xxx'
    • error: no type or protocol named 'xxxDelgate'
    • error: ARC __weak lifetime qualifier on return type is ignored [-Werror,-Wignored-qualifiers]
      • error: interface type 'xxxType' cannot be passed by value; did you forget * in 'xxxType'?
      • error: unknown type name 'inout'; did you mean 'ino_t'?
      • error: expected selector for Objective-C method
      • error: cast from pointer to smaller type 'unsigned int' loses information .

配置theos环境变量

theos文件夹下的bin,下有一个logify.pl
把这个 theos/bin添加到系统环境变量里,就可以在任意位置使用这个pl文件
执行命令

open ~/.zshrc

添加一行:

export PATH="theos的路径/theos/bin:$PATH"

然后让环境变量生效

source ~/.zshrc

手动在tweak里打印一个函数的信息

找到我们已经脱壳,并且已经使用class-dump导出了一个app包的.h头文件.
因为这些头文件里面方法太多,想要实验某个方法被执行需要如下操作:

%hook ViewController
- (id)testFunc:(id)arg1  {%log;  //打印信息
id r = %orig; //执行原来的方法过程
NSLog(@" = %@", r);  //打印返回值
return r; //返回原来的值
}

这样在xcode里面 Window->Devices and Simulators->Open Console->开始 可以看到控制台的信息,如果testFunc被执行,%log
就会打印出来testFunc的函数名和参数

但是如果一个.h文件中有几十个方法,那么每个方法都这样写,太麻烦了.

使用logify.pl自动生成一个.h文件中的所有函数的打印信息

在终端进入.h文件的目录下执行下列命令.>一个大于号,是覆盖,就是重新生成.xm文件

logify.pl 文件名.h > 文件名.xm

只打印函数名

使用

NSLog(@"%@", NSStringFromSelector(_cmd));

代替%log;
可以只打印函数名,这样在控制台查看打印信息可以简洁点,因为%log还会输出frame和参数等信息

修改报错

因为是自动生成的,make编译以后会报错

error: unknown type name ‘xxx’

  • 修改方法1:
    是没有找到类名
    解决方法:
    @class 类名
    @protocol 协议名
    建议直接把原来用class-dump导出的.h里面的 @class 和 @protocol 里面的所有类名协议名字都赋值到 .xm 或者.x文件里
  • 修改方法2(推荐):
    把类指针改成void *
    例如 error: unknown type name ‘xxView’
就全文查找  xxView *
替换成  void *

注意中间的空格,后面要加*,否则不是类指针的变量也被替换

error: no type or protocol named ‘xxxDelgate’

找不到某某协议
解决方法
在xxx协议两边添加尖括号,搜索替换成空,例如 xxxDelegate

搜索: <xxxDelegate>
替换成空

error: ARC __weak lifetime qualifier on return type is ignored [-Werror,-Wignored-qualifiers]

直接 cmd+ shift+f 替换 __weak 为空

error: interface type ‘xxxType’ cannot be passed by value; did you forget * in ‘xxxType’?

这个是没找到这个类型的定义,可以把这个类型替换成id类型

error: unknown type name ‘inout’; did you mean ‘ino_t’?

把inout直接替换为空

error: expected selector for Objective-C method

  • (void).cxx_destruct
    这种.点开头的方法直接删掉

error: cast from pointer to smaller type ‘unsigned int’ loses information .

  • 这种unsigned 如果是在 NSLog(@" = 0x%x", (unsigned int)r) 里面 ,搜索
NSLog(@" = 0x%x", (unsigned int)r)

替换成下面,因为 r是对象类型用%@可以打印

NSLog(@"%@",r);
  • 如果不是因为 NSLog(@" = 0x%x", (unsigned int)r) 出错,而是 xxxDelegate方法里面带<协议>的,后面%log会出错
    解决方法1:去掉 <协议>
    解决方法2:把%log去掉换成 NSLog(@"%@", NSStringFromSelector(_cmd)); 只打印方法名
    例如下面的会报错
(void)setM_delegate:( id <BaseMsgContentDelgate> )m_delegate { %log; %orig; }

修改方法1 去掉协议:

- (void)setM_delegate:( id )m_delegate { %log; %orig; }

修改方法2 去掉%log ,去掉NSLog(@" = 0x%x", (unsigned int)r); ,改成用 NSLog(@"%@", NSStringFromSelector(_cmd)); 来打印
例如下面:

- (void)setM_delegate:( id <BaseMsgContentDelgate> )m_delegate { NSLog(@"%@", NSStringFromSelector(_cmd)); %orig; }
用下面代码来打印信息
NSLog(@"%@", NSStringFromSelector(_cmd));

ios使用theos tweak logify.pl自动hook .h头文件中所有的方法相关推荐

  1. iOS架构-静态库.a编译时自动导出.h头文件(24)

    在使用Xcode成功编译一个静态库时,在对应的输出目录下有一个include目录,但是其中没有相关的.h头文件.由于.h文件和 .cpp文件是在同一个目录下,再加上文件数量较多,如果手动的将.h文件导 ...

  2. iOS系统库头文件中NS_AVAILABLE相关

    原文链接: iOS系统库头文件中NS_AVAILABLE相关 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://githu ...

  3. ios逆向- 01逆向原理Class-dump安装及获取头文件

    逆向原理 动态调试 通过界面调试Cycript\Xcode LLDB! 静态分析 利用之前学习的汇编代码,分析三方APP的源码! 代码注入 注入的其实是动态库!HOOK代码 改变原来程序的执行流程! ...

  4. IDEA maven项目src源代码下的资源文件不自动复制到classes文件夹的解决方法

    在学习spring boot的时候,书中的代码是把java文件和资源文件放到了同一个文件夹下,在idea maven项目下面运行会一直报错,因为资源文件不会自动复制到classes文件夹下,如下图: ...

  5. pycharm打开python文件如何自动创建项目_pycharm 怎么自动创建python头文件?

    展开全部 创建方法如下: 进入File->settings->Editor->File and Code Templates->Python Script. 添加以下内容: 1 ...

  6. 自动加载zrx文件的四种方法

    1.使用注册表 假设你的arx文件名字是aaa.arx绝对路径是c:\aaa.arx (1)Autocad:拿cad13做例子 在注册表路径下HKEY_CURRENT_USER\Software\Au ...

  7. shell快速将同一名称的不同类型文件自动划分到一个文件中

    代码 以需要选择*.txt *.word *.exe为例 #!/bin/shcurrent_path=`pwd` input_dir1=$current_path/$1 dir_basename=`b ...

  8. c语言 自动包含头文件,C语言不要重复包含.h头文件和.c文件

    http://blog.csdn.net/unix21/article/details/8450235 2012 1.不要重复包含头文件 --以上出自<C语言程序设计:现代方法(第2版)> ...

  9. 单步调试时遇到cout和cin会自动跳到ostream文件中的解决方案

    [问题描述] [原因描述] cout 和cin是 ostream 类,而这个类的调试信息现在没有,所以无法调试 [解决方案] 在进行到cout或者cin语句时直接将单步调试(F11)换成逐过程调试调试 ...

  10. VS+QT没有自动生成.ui对应的ui_XXXX.h头文件问题

    1.在qt安装包下-> qbase -> bin 目录下有对应的uic.exe用来生成 .ui对应的ui_XXXX.h头文件  所以 cmd进入bin目录,运行uic XXXX.ui ui ...

最新文章

  1. Java OOP(Object Oriented Programming)个人理解及总结
  2. 挑战蓝牙/Wi-Fi NFA争食无线音频应用大饼(转)
  3. 分子排列不同会导致_刘珏文: DNA寡核苷酸的冷冻定向拉伸和排列
  4. Ananagrams Uva 156
  5. [读书笔记] 代码整洁之道
  6. 使用Python爬虫爬取网络美女图片
  7. Insomni'hack teaser 2019 - Misc - echoechoechoecho
  8. python 申请内存_python 申请内存空间,用于创建多维数组的实例
  9. simulate-device测试onenet云平台
  10. 卷积神经网络原理详解
  11. 我的 Serverless 实战 — Serverless 腾讯云文字识别(OCR)详细部署过程
  12. 移动硬盘变成RAW,如何将其转换为NTFS
  13. win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)
  14. Tomcat和Http协议详细解析
  15. 技术杂谈-再谈软硬SDN(2)
  16. 修复ASUS in WinRE教程
  17. GitHub学生包申请(学生认证)教程
  18. 工具条(Ext.Toolbar)
  19. 达沃斯论坛创始人邀阿里张勇对话 谈全球数字经济未来
  20. java pg数据库事务回滚,基于Postgresql 事务的提交与回滚解析

热门文章

  1. Elasticsearch 的内存优化
  2. 苹果 App Clip 技术详解
  3. 抽象与具体,形而上者谓之道,形而下者谓之器
  4. cent ultraiso_园丁cent vs千足的web ai应用
  5. matlab编写的程序输入参数怎么写,MATLAB|标准参数输入对话框创建
  6. android 图片编辑工具,照片编辑器:Photo Editor
  7. Quill富文本编辑器-图片上传-可编辑图片大小、排版
  8. mac hdmi 外接显示器没声音
  9. 第2次作业——时事点评
  10. 判断四个点是否可以构成矩形(优雅的解法!!!)