ios使用theos tweak logify.pl自动hook .h头文件中所有的方法
文章目录
- 配置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头文件中所有的方法相关推荐
- iOS架构-静态库.a编译时自动导出.h头文件(24)
在使用Xcode成功编译一个静态库时,在对应的输出目录下有一个include目录,但是其中没有相关的.h头文件.由于.h文件和 .cpp文件是在同一个目录下,再加上文件数量较多,如果手动的将.h文件导 ...
- iOS系统库头文件中NS_AVAILABLE相关
原文链接: iOS系统库头文件中NS_AVAILABLE相关 简书主页:http://www.jianshu.com/users/37f2920f6848 Github主页:https://githu ...
- ios逆向- 01逆向原理Class-dump安装及获取头文件
逆向原理 动态调试 通过界面调试Cycript\Xcode LLDB! 静态分析 利用之前学习的汇编代码,分析三方APP的源码! 代码注入 注入的其实是动态库!HOOK代码 改变原来程序的执行流程! ...
- IDEA maven项目src源代码下的资源文件不自动复制到classes文件夹的解决方法
在学习spring boot的时候,书中的代码是把java文件和资源文件放到了同一个文件夹下,在idea maven项目下面运行会一直报错,因为资源文件不会自动复制到classes文件夹下,如下图: ...
- pycharm打开python文件如何自动创建项目_pycharm 怎么自动创建python头文件?
展开全部 创建方法如下: 进入File->settings->Editor->File and Code Templates->Python Script. 添加以下内容: 1 ...
- 自动加载zrx文件的四种方法
1.使用注册表 假设你的arx文件名字是aaa.arx绝对路径是c:\aaa.arx (1)Autocad:拿cad13做例子 在注册表路径下HKEY_CURRENT_USER\Software\Au ...
- shell快速将同一名称的不同类型文件自动划分到一个文件中
代码 以需要选择*.txt *.word *.exe为例 #!/bin/shcurrent_path=`pwd` input_dir1=$current_path/$1 dir_basename=`b ...
- c语言 自动包含头文件,C语言不要重复包含.h头文件和.c文件
http://blog.csdn.net/unix21/article/details/8450235 2012 1.不要重复包含头文件 --以上出自<C语言程序设计:现代方法(第2版)> ...
- 单步调试时遇到cout和cin会自动跳到ostream文件中的解决方案
[问题描述] [原因描述] cout 和cin是 ostream 类,而这个类的调试信息现在没有,所以无法调试 [解决方案] 在进行到cout或者cin语句时直接将单步调试(F11)换成逐过程调试调试 ...
- VS+QT没有自动生成.ui对应的ui_XXXX.h头文件问题
1.在qt安装包下-> qbase -> bin 目录下有对应的uic.exe用来生成 .ui对应的ui_XXXX.h头文件 所以 cmd进入bin目录,运行uic XXXX.ui ui ...
最新文章
- Java OOP(Object Oriented Programming)个人理解及总结
- 挑战蓝牙/Wi-Fi NFA争食无线音频应用大饼(转)
- 分子排列不同会导致_刘珏文: DNA寡核苷酸的冷冻定向拉伸和排列
- Ananagrams Uva 156
- [读书笔记] 代码整洁之道
- 使用Python爬虫爬取网络美女图片
- Insomni'hack teaser 2019 - Misc - echoechoechoecho
- python 申请内存_python 申请内存空间,用于创建多维数组的实例
- simulate-device测试onenet云平台
- 卷积神经网络原理详解
- 我的 Serverless 实战 — Serverless 腾讯云文字识别(OCR)详细部署过程
- 移动硬盘变成RAW,如何将其转换为NTFS
- win 11bitlocker恢复密匙一般情况的解决方式(这里指的是你现在使用的微软账户一直没有变更过)
- Tomcat和Http协议详细解析
- 技术杂谈-再谈软硬SDN(2)
- 修复ASUS in WinRE教程
- GitHub学生包申请(学生认证)教程
- 工具条(Ext.Toolbar)
- 达沃斯论坛创始人邀阿里张勇对话 谈全球数字经济未来
- java pg数据库事务回滚,基于Postgresql 事务的提交与回滚解析