当前位置: 首页 > news >正文

iOS 越狱插件 主动调用C函数和OC函数

主动调用函数,尤其在函数参数构造,内部依赖比较好修复的情况下,可以加速我们的动态调试。可以快速的触发逻辑,触发断点,进行调试。

直接上代码。

主动调用C函数 NSString *__fastcall sub_100099999():

//
//  hook_test_captain.mm
//  hook_test_captain
//
//#if TARGET_OS_SIMULATOR
#error Do not support the simulator, please use the real iPhone Device.
#endif#import <Foundation/Foundation.h>
#import "CaptainHook/CaptainHook.h"
#import <mach-o/dyld.h>
#import <mach-o/getsect.h>CHConstructor
{@autoreleasepool{// 获取主可执行文件的正确ASLR偏移量uint32_t imageCount = _dyld_image_count();NSLog(@"Image count: %d", imageCount);// 打印所有镜像的信息,找到主可执行文件intptr_t slide = 0;for (uint32_t i = 0; i < imageCount; i++) {const char* imageName = _dyld_get_image_name(i);intptr_t currentSlide = _dyld_get_image_vmaddr_slide(i);NSLog(@"[%d] Image: %s, Slide: 0x%lx", i, imageName, (unsigned long)currentSlide);// 检查是否为主可执行文件NSString *imagePath = [NSString stringWithUTF8String:imageName];if ([imagePath isEqualToString:[[NSBundle mainBundle] executablePath]]) {slide = currentSlide;NSLog(@"Found main executable at index %d with slide: 0x%lx", i, (unsigned long)slide);break;}}// 如果没有找到主可执行文件,尝试使用另一种方法if (slide == 0) {// 获取TEXT段的实际加载地址const struct mach_header* header = _dyld_get_image_header(0);uintptr_t textSegmentCmd = (uintptr_t)(header + 1);uintptr_t textVmaddr = 0;// 遍历所有load commands找到__TEXT段for (uint32_t i = 0; i < header->ncmds; i++) {const struct load_command* loadCmd = (struct load_command*)textSegmentCmd;if (loadCmd->cmd == LC_SEGMENT || loadCmd->cmd == LC_SEGMENT_64) {const struct segment_command_64* segmentCmd = (struct segment_command_64*)loadCmd;if (strncmp(segmentCmd->segname, "__TEXT", 16) == 0) {textVmaddr = segmentCmd->vmaddr;break;}}textSegmentCmd += loadCmd->cmdsize;}if (textVmaddr != 0) {// 计算slide = 实际加载地址 - 预期加载地址slide = (intptr_t)header - textVmaddr;NSLog(@"Calculated slide using TEXT segment: 0x%lx", (unsigned long)slide);}}// 计算函数的实际地址// 主动调用 NSString *__fastcall sub_100099999()void *functionAddress = (void *)(0x100099999 + slide);NSLog(@"Static function address: 0x100099999");NSLog(@"Calculated runtime function address: %p", functionAddress);// 定义函数指针类型并调用NSString * (*targetFunction)(void) = (NSString * (*)(void))functionAddress;// 调用函数并打印返回值NSString *result = targetFunction();NSLog(@"Function at 0x100099999 returned: %@", result);}
}

主动调用OC函数:

CHConstructor // code block that runs immediately upon load
{@autoreleasepool{// 主动调用这个函数 +[ClazzTarget calcKeyStr]Class ClazzTargetClass = NSClassFromString(@"ClazzTarget");if (ClazzTargetClass) {SEL calcKeyStrSelector = NSSelectorFromString(@"calcKeyStr");if ([ClazzTargetClass respondsToSelector:calcKeyStrSelector]) {NSString *result14 = [ClazzTargetClass performSelector:calcKeyStrSelector];NSLog(@"[htest] calcKeyStr返回值: %@", result14);} else {NSLog(@"[htest] Error: calcKeyStr method not found in ClazzTarget class");}} else {NSLog(@"[htest] Error: ClazzTarget class not found");}// 主动调用这个函数 +[ClazzTarget calcKeyStr2]if (ClazzTargetClass) {SEL calcKeyStr2Selector = NSSelectorFromString(@"calcKeyStr2");if ([ClazzTargetClass respondsToSelector:calcKeyStr2Selector]) {NSString *result15 = [ClazzTargetClass performSelector:calcKeyStr2Selector];NSLog(@"[htest] calcKeyStr2返回值: %@", result15);} else {NSLog(@"[htest] Error: calcKeyStr2 method not found in ClazzTarget class");}} else {NSLog(@"[htest] Error: ClazzTarget class not found");}}
}

http://www.dtcms.com/a/263731.html

相关文章:

  • DBA 命令全面指南:核心操作、语法与最佳实践
  • 【仿muduo库实现并发服务器】Channel模块
  • 大规模分布式数据库读写分离架构:一致性、可用性与性能的权衡实践
  • opencv使用 GStreamer 硬解码和 CUDA 加速的方案
  • Java ArrayList 扩容机制
  • 【MobaXterm、Vim】使用合集1
  • 结构体实战:用Rust编写矩形面积计算器
  • Electron 沙箱模式深度解析:构建更安全的桌面应用
  • Let‘s Encrypt 免费证书使用
  • 2022/7 N2 jlpt词汇
  • STM32作为主机识别鼠标键盘
  • Vue-16-前端框架Vue之应用基础集中式状态管理pinia(一)
  • SeaTunnel 社区月报(5-6 月):全新功能上线、Bug 大扫除、Merge 之星是谁?
  • 从零到一搭建远程图像生成系统:Stable Diffusion 3.5+内网穿透技术深度实战
  • 密码学(斯坦福)
  • 数字图像处理学习笔记
  • 电机控制的一些笔记
  • CentOS Stream 下 Nginx 403 权限问题解决
  • jQuery UI 安装使用教程
  • 使用Spring Boot 原始的文件下载功能,告别下载风险!
  • Python实例题:基于 Flask 的任务管理系统
  • 数据结构:递归:组合数(Combination formula)
  • vue3中实现高德地图POI搜索(附源码)
  • 主流零信任安全产品深度介绍
  • 网络的相关概念
  • 港美股证券交易系统综合解决方案:技术架构革新与跨境服务升级
  • docker windows 安装mysql:8.0.23
  • Next.js 安装使用教程
  • Zephyr RTOS 信号量 (Semaphore)
  • 基于3D卷积神经网络与多模态信息融合的医学影像肿瘤分类与可视化分析