IOS 联真机签名解决方案

news/2024/12/22 20:55:12/

一、目标

我们之前介绍过 IOS 某电商App签名算法解析 二 Frida RPC调用和 IOS Theos Tweak 之 HelloWorld 。 那么他们搭配起来能解决什么问题呢?

在Android联真机签名方案中,我们提到过Frida rpc方案的缺点:

  • frida不是很稳定,偶尔会崩溃出退
  • frida启动需要连PC (不过这个缺点已经被 Xcube frida脚本持久化 给解决了)

那么在Ios下有没有类似Xposed的东东?

是的,就是 Tweak。

二、步骤

GCDWebServer

GCDWebServer 是一个基于 GCD 的轻量级服务器框架,用于内嵌到 MacOS或者iOS 系统的应用中,提供 HTTP 的服务。

他的代码在这里 github.com/swisspol/GC…

我们先创建一个 Tweak工程

fenfeiNewMac:ldqtweakrpc fenfei$ nic.pl
NIC 2.0 - New Instance Creator
------------------------------[1.] iphone/activator_event[2.] iphone/activator_listener[3.] iphone/application_modern[4.] iphone/application_swift[5.] iphone/cydget[6.] iphone/flipswitch_switch[7.] iphone/framework[8.] iphone/library[9.] iphone/notification_center_widget[10.] iphone/notification_center_widget-7up[11.] iphone/preference_bundle_modern[12.] iphone/theme[13.] iphone/tool[14.] iphone/tool_swift[15.] iphone/tweak[16.] iphone/tweak_with_simple_preferences[17.] iphone/xpc_service
Choose a Template (required): 15
Project Name (required): ldqsign
Package Name [com.yourcompany.ldqsign]: 
Author/Maintainer Name [fenfei]: fenfei
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: XX4iPhone
Instantiating iphone/tweak in ldqsign/...
Done. 

然后把github上下载的代码复制到工程目录

编辑下MakeFile文件,把GCDWebServer的代码加进去

ARCHS = armv7 arm64
TARGET := iphone:clang:latest:7.0
INSTALL_TARGET_PROCESSES = JD4iPhoneADDITIONAL_OBJCFLAGS = -fobjc-arc
include $(THEOS)/makefiles/common.mkTWEAK_NAME = ldqsignldqsign_FILES = Tweak.x $(wildcard ./GCDWebServer/Core/*.m) $(wildcard ./GCDWebServer/Requests/*.m) $(wildcard ./GCDWebServer/Responses/*.m)
ldqsign_CFLAGS += -I./GCDWebServer/Core -I./GCDWebServer/Requests -I./GCDWebServer/Responses
ldqsign_LDFLAGS += -lz.1.2.5 -lc++ -framework CFNetwork -framework Security -framework MobileCoreServices -weak_framework UIKit include $(THEOS_MAKE_PATH)/tweak.mk 

然后编辑 Tweak.x 文件,创建一个基本框架,启动web服务

void RunWebServer()
{NSLog(@"zytc: ======================== Run MyServerXX");GCDWebServer* _webServer;_webServer = [[GCDWebServer alloc] init];NSLog(@"zytc: ======================== Run MyServerXX 2");// Add a handler to respond to GET requests on any URL[_webServer addDefaultHandlerForMethod:@"GET"requestClass:[GCDWebServerRequest class]processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {return [GCDWebServerDataResponse responseWithHTML:@"<html><body><p>Hello World</p></body></html>"];}];// Start server on port 8181[_webServer startWithPort:8181 bonjourName:nil];NSLog(@"zytc: xx Visit %@ in your web browser", _webServer.serverURL);}%ctor {NSLog(@"zytc: xxDev !!!");RunWebServer();%init(_ungrouped);
} 

编译下

make package install 

我的mac是 10.14.6 Xcode是 11.3.1 编译时会遇到

ld: warning: building for iOS, but linking in .tbd file (/opt/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd) built for iOS Simulator 

这时候 把/opt/env/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd文件用文本打开,删除 两处 archs后面的i386, x86_64,就可以编译成功了。

运行

先启动 控制台

再启动某电商App

从 控制台的消息里面可以看到

zytc: xx Visit http://192.168.2.108:8181/ in your web browser 

的日志输出,说明web服务启动成功。从浏览器里面访问下 http://192.168.2.108:8181/

熟悉的HelloWorld出现了,没问题

主动调用 getSignWithDic

先申明要调用的类和函数

@interface XXSignService : NSObject
{}+ (id)getSignWithDic:(NSDictionary*)arg1 keys:(NSArray*)arg2;
@end 

然后创建一个sign接口来调用他,(正常应该是创建POST接口,把参数post进来,这里为了方便Demo还是用GET)

具体参数分析可以参照 IOS 某电商App签名算法解析(二) Frida RPC调用

 // @"POST"
[_webServer addHandlerForMethod:@"GET" path:@"/sign" requestClass:[GCDWebServerURLEncodedFormRequest class] processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {// NSString* body = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"body"];// NSString* functionId = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"functionId"];NSString* body = @"{\"api-version\":\"1.1.0\"}";NSString* client = @"apple";NSString* clientVersion = @"10.0.1";NSString* functionId = @"xview2Config";NSString* openudid = @"078593ee2fda3d54aae5879cb841b2faa62a4985";NSMutableDictionary *dict = [NSMutableDictionary dictionary];[dict setObject:body forKey:@"body"];[dict setObject:client forKey:@"client"];[dict setObject:clientVersion forKey:@"clientVersion"];[dict setObject:functionId forKey:@"functionId"];[dict setObject:openudid forKey:@"openudid"];NSMutableArray * array =[[NSMutableArray alloc] initWithObjects:@"body",@"client",@"clientVersion",@"functionId" ,@"openudid",nil];NSString* strRc =[%c(XXSignService) getSignWithDic: dict keys:array];NSLog(@"zytc: xx sign %@",strRc);NSString* html = [NSString stringWithFormat:@"{\"rc\":\"0\",\"sign\":\"%@\"}", strRc];return [GCDWebServerDataResponse responseWithHTML:html];// return [GCDWebServerDataResponse responseWithHTML:@"<html><body><p>error!!!</p></body></html>"]; }]; 

好了,继续编译安装下

然后访问一下我们的新接口

完美收工。

三、总结

勿在浮沙筑高台,我们之前介绍的基础知识都是有用的,叠加一下就可以搞定复杂的项目了。

原理都是有相通性的,Frida、xposed、Tweak的开发都可以相互印证。

跨平台的开发,不如原生开发上手快,之前搞Frida的 NSDictionary NSArray等ObjectC对象的构造和使用,搞了老半天,其实ObjectC的代码也就几行而已。

人们总觉得自己生活在骗局中,他们关心的不是真相,他们只是需要一个与他们从前所见不同,而又合情合理的解释。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享
视频配套资料&国内外网安书籍、文档&工具
当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。
在这里插入图片描述
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享


http://www.ppmy.cn/news/146939.html

相关文章

iOS-NFC

iPhone6以上设备内置了NFC功能&#xff0c;但是iOS8系统里还没有开放出NFC的api供开发者调用&#xff0c;目前只限于Apple Pay。 NFC可能的用途&#xff1a; 传名片、适配相机、分享文件、读写NFC卡、支付、门禁、启动汽车…… NFC门禁原理&#xff1a;支持NFC手机开门的读写器…

iphone如何使用CoreNFC

由于本人的工作和移动支付有关&#xff0c;所以一直对NFC技术比较关注。看到WWDC会议IOS 11开放了CoreNFC&#xff0c;赶紧了解一下。 使用NFC前需要注意一下几点&#xff1a; 需要开启一个session&#xff0c;与其他session类似&#xff0c;同时只能开启一个 需要App完全在前…

趣谈 iOS Universal Link

作者&#xff1a;iHTCboy 本文对 iOS Universal Link&#xff08;通用链接&#xff09;的浅入浅出介绍&#xff0c;从产品的角度来了解其发展历程。 1、了解 Universal Link 背后的故事 2、学习 Universal Link 功能的使用 3、总结 Universal Link 产品的思考 一、前言 说起 U…

【软件测试】软件测试理论总结笔记(一)

软件测试理论总结 1.Introduction1.1 What is Software Bug1.3 Tester的职责和目标其他概念 2.软件开发生命周期Software Development ProcessSoftware Development Lifecycle Models2.1 TDD - Test-Driven Development测试驱动开发&#xff08;一种敏捷开发&#xff09;Softwa…

STM32F4_LCD/OLED在线取字模软件

在进行&#xff08;单片机&#xff09;嵌入式开发的时候&#xff0c;我们为了调试方便&#xff0c;通常会使用 OLED / LCD / 串口助手 等去帮助我们调试程序&#xff0c;常常会使用到 LCD 或 OLED 点阵字模&#xff0c;下面是搜集到的几个在线取字模的软件&#xff0c;希望能对…

C语言判断队列满or空

1 静态数组队列 循环队列通常使用数组来实现&#xff0c;判别循环队列是否满或空&#xff0c;可以借助两个变量front和rear。 判空&#xff1a;当front和rear相等时&#xff0c;队列为空。 判满&#xff1a;当(front 1) % n rear时&#xff0c;队列为满&#xff0c;其中n为…

前端-赶集网(五)

第四行第二列部分 代码展示 html <!DOCTYPE html > <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content…

传智播客实战taotao项目页面菜单栏Tree的Java实现方法

1.controller查询方法 package com.taotao.manage.controller.api;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.C…