IOS 联真机签名解决方案

简介: 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 的服务。


他的代码在这里 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上下载的代码复制到工程目录78.png


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

ARCHS = armv7 arm64
TARGET := iphone:clang:latest:7.0
INSTALL_TARGET_PROCESSES = JD4iPhone
ADDITIONAL_OBJCFLAGS = -fobjc-arc
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = ldqsign
ldqsign_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/

79.png


熟悉的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>"];                      
    }];


好了,继续编译安装下


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

完美收工。


三、总结


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


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


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

82.png

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


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


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


相关文章
|
2月前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
84 7
|
3月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台解决方案
【9月更文挑战第27天】在移动应用开发的广阔天地中,安卓和iOS两大操作系统如同双子星座般耀眼。开发者们在这两大平台上追逐着创新的梦想,却也面临着选择的难题。如何在保持高效的同时,实现跨平台的开发?本文将带你探索跨平台开发的魅力所在,揭示其背后的技术原理,并通过实际案例展示其应用场景。无论你是安卓的忠实拥趸,还是iOS的狂热粉丝,这篇文章都将为你打开一扇通往跨平台开发新世界的大门。
|
7月前
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
219 0
|
4月前
|
测试技术 开发工具 iOS开发
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
这篇文章是iOS自动化测试方案的第三部分,介绍了在没有MacOS系统条件下,如何使用WDA(WebDriverAgent)结合Python客户端库facebook-wda和tidevice工具,在Windows系统上实现iOS应用的自动化测试,包括环境准备、问题解决和扩展应用的详细步骤。
317 1
iOS自动化测试方案(三):WDA+iOS自动化测试解决方案
|
4月前
|
前端开发 开发工具 Android开发
探索安卓与iOS应用开发:跨平台解决方案的崛起
【8月更文挑战第27天】在移动设备日益普及的今天,安卓和iOS系统占据了市场的主导地位。开发者们面临着一个重要问题:是选择专注于单一平台,还是寻找一种能够同时覆盖两大系统的解决方案?本文将探讨跨平台开发工具的优势,分析它们如何改变了移动应用的开发格局,并分享一些实用的开发技巧。无论你是新手还是资深开发者,这篇文章都将为你提供有价值的见解和建议。
|
4月前
|
前端开发 JavaScript Android开发
探索Android和iOS开发中的跨平台解决方案
【8月更文挑战第1天】随着移动应用市场的不断扩张,开发者面临一个共同的挑战——如何高效地为多个平台创建和维护应用程序。本文将深入探讨跨平台开发工具,特别是Flutter和React Native,通过比较它们的优势和限制,并辅以实际代码示例,揭示这些工具如何帮助开发者在保持高性能的同时,实现代码的最大化重用。
|
4月前
|
前端开发 JavaScript Android开发
安卓与iOS开发中的跨平台解决方案
【8月更文挑战第24天】在移动应用开发领域,安卓和iOS两大平台占据了主导地位。然而,为这两个平台分别开发和维护应用会带来额外的时间和成本。本文将探讨跨平台开发的概念、优势以及流行的跨平台框架,如React Native和Flutter,并分析它们如何解决多平台开发的挑战。
|
7月前
|
存储 Web App开发 Android开发
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
673 1
iOS不支持WebP格式图片解决方案和iPhone 7及其后硬件拍照的HEIC格式图片
|
7月前
|
程序员 定位技术 开发工具
iOS11及以上操作系统无法定位问题完美解决方案
iOS11及以上操作系统无法定位问题完美解决方案
70 1
|
6月前
|
Linux 数据库 iOS开发
超级签名源码/超级签/ios分发/签名端本地linux服务器完成签名
该系统完全在linux下运行,不存在使用第三方收费工具,市面上很多系统都是使用的是第三方收费系统,例如:某心签名工具,某测侠等,不开源而且需要每年交费,这种系统只是在这些工具的基础上套了一层壳。请需要系统的放大你们的眼睛。
43 0