涉及:
-
Hook Objective-C类
-
UILabel
一.分析
在 iOS 平台中,应用界面(View Hierarchy)中绝大多数用于展示的静态或动态纯文本内容,均由 UIKit 框架提供的 UILabel(或基于 UILabel 的自定义子类)负责实例化、布局管理与最终的文本渲染。
这是 UILabel 的.h声明文件,在源码中#import <UIKit/UIKitt.h>即可使用。

使用示例如下, initWithFrame 初始化 UILabel 的实例,设置 text 文本内容,设置 textColor 文字颜色,设置 font 字体大小,设置 textAlignment 文字水平对其方式,设置 backgroundColor 背景颜色,最后添加到 view 中显示。

从代码示例中可以看到 text 属性设置了文本内容,从声明文件中可以看到 text 属性是@property(nullable, nonatomic,copy)其中 copy 修饰符会让编译器生成 setter 方法,也就是- (void)setText:(NSString *)text,传入的参数名不一定得是 text 。编译器只处理方法名是 setText: 和 参数类型 是 NSString *,参数的名字随便是个正常的变量名字都行。
确定目标 Hook UILabel 类的 setText 方法。
二.修改
创建一个 Theos 的 Tweak 项目。
用 if 判断一下 text 参数的内容,修改对应的文本,再使用 %orig 调用原始方法就可以实现修改文本内容,实现汉化。

三.后记
市面上绝大多数的类似修改弹窗文字,修改引流文字,都是 hook 了 UIlabel 类的 text 方法,再怎么把文本静态加密,最后的明文都会调用 setText 设置文字,要防止被修改,可以 hook 方法交换的函数。
本作品采用 知识共享署名 4.0 国际许可协议 进行许可
文章评论