IOS 联真机签名解决方案

一、目标

我们之前介绍过 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 的服务。

他的代码在这里 https://github.com/swisspol/GCDWebServer

我们先创建一个 Tweak工程

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

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

code.png

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

1ARCHS = armv7 arm64 2TARGET := iphone:clang:latest:7.0 3INSTALL_TARGET_PROCESSES = JD4iPhone 4 5ADDITIONAL_OBJCFLAGS = -fobjc-arc 6include $(THEOS)/makefiles/common.mk 7 8TWEAK_NAME = ldqsign 9 10ldqsign_FILES = Tweak.x $(wildcard ./GCDWebServer/Core/*.m) $(wildcard ./GCDWebServer/Requests/*.m) $(wildcard ./GCDWebServer/Responses/*.m) 11ldqsign_CFLAGS += -I./GCDWebServer/Core -I./GCDWebServer/Requests -I./GCDWebServer/Responses 12ldqsign_LDFLAGS += -lz.1.2.5 -lc++ -framework CFNetwork -framework Security -framework MobileCoreServices -weak_framework UIKit 13 14include $(THEOS_MAKE_PATH)/tweak.mk

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

1void RunWebServer() 2{ 3 NSLog(@"zytc: ======================== Run MyServerXX"); 4 GCDWebServer* _webServer; 5 _webServer = [[GCDWebServer alloc] init]; 6 7 NSLog(@"zytc: ======================== Run MyServerXX 2"); 8 // Add a handler to respond to GET requests on any URL 9 [_webServer addDefaultHandlerForMethod:@"GET" 10 requestClass:[GCDWebServerRequest class] 11 processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { 12 13 return [GCDWebServerDataResponse responseWithHTML:@"<html><body><p>Hello World</p></body></html>"]; 14 15 }]; 16 17 // Start server on port 8181 18 [_webServer startWithPort:8181 bonjourName:nil]; 19 NSLog(@"zytc: xx Visit %@ in your web browser", _webServer.serverURL); 20 21} 22 23 24 25%ctor { 26 NSLog(@"zytc: xxDev !!!"); 27 RunWebServer(); 28 %init(_ungrouped); 29}

编译下

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/

hello.png

熟悉的HelloWorld出现了,没问题

主动调用 getSignWithDic

先申明要调用的类和函数

1@interface XXSignService : NSObject 2{ 3 4} 5 6+ (id)getSignWithDic:(NSDictionary*)arg1 keys:(NSArray*)arg2; 7@end

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

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

1 // @"POST" 2[_webServer addHandlerForMethod:@"GET" 3 path:@"/sign" 4 requestClass:[GCDWebServerURLEncodedFormRequest class] 5 processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) { 6 7 // NSString* body = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"body"]; 8 // NSString* functionId = [[(GCDWebServerURLEncodedFormRequest*)request arguments] objectForKey:@"functionId"]; 9 10 NSString* body = @"{\"api-version\":\"1.1.0\"}"; 11 NSString* client = @"apple"; 12 NSString* clientVersion = @"10.0.1"; 13 NSString* functionId = @"xview2Config"; 14 NSString* openudid = @"078593ee2fda3d54aae5879cb841b2faa62a4985"; 15 16 NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 17 [dict setObject:body forKey:@"body"]; 18 [dict setObject:client forKey:@"client"]; 19 [dict setObject:clientVersion forKey:@"clientVersion"]; 20 [dict setObject:functionId forKey:@"functionId"]; 21 [dict setObject:openudid forKey:@"openudid"]; 22 23 NSMutableArray * array =[[NSMutableArray alloc] initWithObjects:@"body",@"client",@"clientVersion",@"functionId" ,@"openudid",nil]; 24 25 NSString* strRc = [%c(XXSignService) getSignWithDic: dict keys:array]; 26 27 NSLog(@"zytc: xx sign %@",strRc); 28 29 NSString* html = [NSString stringWithFormat:@"{\"rc\":\"0\",\"sign\":\"%@\"}", strRc]; 30 return [GCDWebServerDataResponse responseWithHTML:html]; 31 32 // return [GCDWebServerDataResponse responseWithHTML:@"<html><body><p>error!!!</p></body></html>"]; 33 34 }]; 35

好了,继续编译安装下

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

rc.png

完美收工。

三、总结

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

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

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

ffshow.jpeg

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

手把手教你搭个Frida + Sekiro Rpc框架

一、目标联手机签名是个比较取巧的方案,之前我们介绍过android连真机签名公网ip更新方案SekiroXposed签名解决方案现在frida用的比较多,并且Sekiro也升级了新版本,我们今天就来手把手教你搭个FridaSekiroRpc框架。二、步骤我们以这个手机号加密算法为例先运行服务器端官网在这里gitclone下来;在Li