IOS - 某段子APP分析

这篇具有很好参考价值的文章主要介绍了IOS - 某段子APP分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

抓包走起:
我这边习惯用vpn转发方式;
IOS - 某段子APP分析

直接抓出来2.0协议了;
IOS - 某段子APP分析

上trace url定位吧;

frida-trace -UF -m "+[NSURL URLWithString:]"

IOS - 某段子APP分析

 11891 ms  堆栈 from:
0x101b67038 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYURLRequest obtainMostSuitableRequest]
0x101b69044 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYURLRequest currentRequest]
0x101b69828 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYURLSession dataTaskWithRequest:]
0x101b6bc50 tieba!0xdd7c50 (0x100dd7c50)
0x101b6bbec tieba!0xdd7bec (0x100dd7bec)
0x101b6b9b8 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYURLSessionManager dataTaskWithRequest:responseBlock:uploadProgress:downloadProgress:dataBlock:completionHandler:]
0x101b5d9dc /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYRequest zy_sendRequestWithURL:parameters:userInfo:isOrginalResponse:type:constructingBodyWithBlock:progress:success:retry:failure:addressTypeInfo:]
0x101b5f2e4 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYRequest _postWithURL:parameters:userInfo:isOrginalResponse:progress:success:retry:failure:]
0x101b5f144 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYRequest postWithURL:parameters:userInfo:isOrginalResponse:progress:success:retry:failure:]
0x101b5eecc /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYRequest postWithURL:parameters:userInfo:progress:success:retry:failure:]
0x101b5ee34 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYRequest postWithPath:parameters:userInfo:progress:success:retry:failure:]
0x101ce5520 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!+[ZYNetWorkManager postWithPath:parameters:userInfo:progress:success:retry:failure:]
0x101a6e23c /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[XCAccountManager xcVerifyCodeRegisterOrLogin:verifyCode:gender:nickName:birth:sign:invite:success:failure:]
0x101a6dd20 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[XCAccountManager xcVerifyCodeLogin:verifyCode:invite:success:failure:]
0x101ad829c /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYSigninManager verifyCodeSigninWithPhoneNumberStr:verifyCode:inviteCode:]
0x101ae02f0 /var/containers/Bundle/Application/72A10900-034F-400A-A822-6F5BB4FE6933/tieba.app/tieba!-[ZYSigninViewController signWithVerifyCode]

我们砸壳搜一下,第一个地方;
IOS - 某段子APP分析
-[ZYURLRequest obtainMostSuitableRequest]

在OC中 方法前面的-代表实例方法,+代表类方法(static)

IOS - 某段子APP分析

看到一个sign的关键部位:
IOS - 某段子APP分析
IOS - 某段子APP分析
最后都归于v222;

IOS - 某段子APP分析
IOS - 某段子APP分析
这样就看到了,v220 是来自于 encode_aes;
IOS - 某段子APP分析
IOS - 某段子APP分析
encode_aes来自于导入库,我们需要拿到 TDProtocol 去看下;
IOS - 某段子APP分析
IOS - 某段子APP分析
追随到 a3, a3为传入的值;
上钩子,hook:

frida -UF -l C:\Users\Codeooo\Desktop\hook_aes.js

IOS - 某段子APP分析
IOS - 某段子APP分析
这里看出来,密文就是经过这个方法得出来的;

IOS - 某段子APP分析
IOS - 某段子APP分析
key 0x10 为16个字节,这也符合aes key长度;
进入cipher_encode_aes((const char *)aes_key, a1, a2, v2);
IOS - 某段子APP分析

就看到了 标准的OpenSSL库了;

EVP_EncryptInit_ex(&a, v17, 0LL, (const unsigned __int8 *)a1, v10);

IOS - 某段子APP分析

v17 = EVP_aes_128_cbc();

(const unsigned __int8 *)a1 则为key;

v10为iv,

rand_vector(15);
LOBYTE(a.cipher) = v9 - v4 + 16;
std::vector::insert((int)v28, (void *)(v28[0] + 1));
v10 = (const unsigned __int8 *)v28[0];
IOS - 某段子APP分析
直接hook key 和 iv;

var EVP_EncryptInit_ex = Module.findExportByName("TDProtocol", "EVP_EncryptInit_ex");
Interceptor.attach(EVP_EncryptInit_ex, {
    onEnter: function (args) {
        console.log('EVP_EncryptInit_ex() key:', hexdump(args[3]));
        console.log('EVP_EncryptInit_ex() iv: ', hexdump(args[4]));
    },   onLeave: function () {

    }
});

在这个地方可以查看明文及密文
IOS - 某段子APP分析

IOS - 某段子APP分析
我们看到 iv : ab 07 23 dd c6 c6 af 98 98 98 81 81 81 6a 6a 6a

IOS - 某段子APP分析
也证明了 iv是随机的, 所以请求头将 iv放在了 最前面 ;

IOS - 某段子APP分析
而且这个key是全局申明的,且是app一打开就生成的;

我们点开交叉引用的,aes_key
IOS - 某段子APP分析
发现是随机生成的,然后通过rsa进行认证;

x-xc-proto-req: 就是通过key进行rsa签名
IOS - 某段子APP分析
返回的响应头:x-xc-proto-res: 进行后续验证处理;

IOS - 某段子APP分析
hook这个rsa:
IOS - 某段子APP分析

IOS - 某段子APP分析

var cipher_encode_rsa = Module.findBaseAddress("TDProtocol").add(0x87FC);
Interceptor.attach(cipher_encode_rsa, {
   onEnter: function (args) {
        this.args0 = args[0];
        this.args1 = args[1];
        console.log('cipher_encode_rsa() this.args0 onEnter:', hexdump(this.args0, {length: this.args1.toInt32()}));
   }, onLeave: function (retval) {

    }
});

这个得 -f spwan去启动,不能用-F 附加了;

frida-ps -Ua 查看包名

frida -U -f 包名 --no-pause -l C:\Users\Codeooo\Desktop\hook_aes.js

IOS - 某段子APP分析
而且我们看这个也是 base64编码的;

x-xc-proto-req: duck-1679471514-HgqiT7R2iq346VHkieSE6dsowbiBMJBCpy/Op3noDVXwxSCvmVTAEjgl84TBeOGBUT4IqmT43jBA81ZrzHsOtOEALwMb3RTme5D0AR8YFJw=

IOS - 某段子APP分析
IOS - 某段子APP分析
IOS - 某段子APP分析


var Base64Encode = Module.findBaseAddress("TDProtocol").add(0xDCE8);
Interceptor.attach(Base64Encode, {
    onEnter: function (args) {
        this.args1 = args[1];
    }, onLeave: function (retval) {
        console.log('Base64Encode() this.args1 onLeave:', (this.args1.readPointer().readCString()));
    }
});

IOS - 某段子APP分析
IOS - 某段子APP分析
与抓包一致;
IOS - 某段子APP分析
我们拿一些rsa的秘钥;

进入 IOS - 某段子APP分析
IOS - 某段子APP分析

IOS - 某段子APP分析

IOS - 某段子APP分析

var get_pubic_key = Module.findBaseAddress("TDProtocol").add(0x7F7C);
Interceptor.attach(get_pubic_key, {
    onEnter: function (args) {

    }, onLeave: function (retval) {
        console.log('get_pubic_key() this.args0 onLeave:', retval.readCString());
    }
});

好的,饶了一圈回到原点,看下最早我们 sign 怎么生成的吧;

跳回最早界面:-[ZYURLRequest obtainMostSuitableRequest]

IOS - 某段子APP分析
IOS - 某段子APP分析

IOS - 某段子APP分析

好像只有个MD5;

IOS - 某段子APP分析


var sign_data = ObjC.classes.libProtocol['+ sign_data:'].implementation;
Interceptor.attach(sign_data, {
    onEnter: function (args) {
        console.log('sign_data() onEnter:', ObjC.Object(args[2]));
    },   onLeave: function (retval) {
        console.log('sign_data() retval:', ObjC.Object(retval));
    }
});

IOS - 某段子APP分析
v2-c8ef477a8be55d9fd63671ea29dbb2ae

IOS - 某段子APP分析
这里面操作了 md5sum ,可能进行了魔改,盲猜一般是更改初始化变量;
详见: https://codeooo.blog.csdn.net/article/details/119811015

接下来我们干分析一波MD5,在上面看到是 MD5sum这个位置发现变动,点进来看一波;

IOS - 某段子APP分析

这个地方,我们知道,参数1为data, 参数2为 长度, 参数3为返回值也就是常说的buffer;

IOS - 某段子APP分析

转化为字符串 v5 ,a1, a2 都是已知的;

MD5Update 中 第一个传入了 v7地址,和刚刚经过string的v5;

那看下 v7 是什么???

IOS - 某段子APP分析
这不就是要魔改的初始化变量;文章来源地址https://www.toymoban.com/news/detail-432865.html

到了这里,关于IOS - 某段子APP分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python 抓包tcp数据拷贝转发

    在Python中,你可以使用 scapy 库进行抓包,使用 shutil 或 io 库进行数据的拷贝,以及使用 socket 库进行数据转发。下面是一个简单的示例,展示了如何进行这些操作: 首先,你需要安装必要的库。你可以使用pip来安装它们: 然后,你可以使用以下代码进行抓包、拷贝数据和转

    2024年01月25日
    浏览(37)
  • 【软件测试】APP 上架指南:iOS App Store 首次上架被拒原因分析与解决方案

    目录 一、前言 二、APP 审核备案新规 (1)iOS 上架审核申请被拒  (2)苹果应用商店重大调整  (3)首次备案流程 ① 阿里云备案   ② 华为云备案 ③ 腾讯云备案 三、iOS 首次上架拒审原因分析 (1)首次拒审:iOS 17 兼容性 ① 拒审原文 ② 拒审译文  ③ 拒审原因分析  ④

    2024年02月03日
    浏览(48)
  • python scapy抓包获取udp并转发

    要使用Python的Scapy库抓取UDP数据包并转发,您可以按照以下步骤进行操作: 安装Scapy库:首先,您需要在您的Python环境中安装Scapy库。您可以使用pip命令来安装它,如下所示: 导入必要的模块:在您的Python脚本中,导入Scapy库和必要的模块。 定义抓包函数:创建一个函数来抓

    2024年01月24日
    浏览(93)
  • 自动转发短信安卓转iOS

    安装软件 配置 安卓安装《短信转发器》 下载地址(如果某个链接不能用,就试试别的) 短信转发器 Github:https://github.com/pppscn/SmsForwarder 短信转发器 酷安: https://www.coolapk.com/apk/com.idormy.sms.forwarder 开源地址https://github.com/pppscn/SmsForwarder SmsForwarder: 短信转发器——监控Android手

    2024年02月14日
    浏览(47)
  • 【iOS】消息传递与消息转发

    Objective-C是一门非常动态的语言,以至于确定调用哪个方法被推迟到了运行时,而非编译时。与之相反,C语言使用静态绑定,也就是说在编译期就能决定程序运行时所应该调用的函数,所以在C语言中, 如果某个函数没有实现,编译时是不能通过的。而Objective-C是相对动态的语

    2024年02月16日
    浏览(39)
  • ios抓包工具stream抓包教程

    1.首先在应用商店搜索并下载stream。 2.安装后打开app 3.准备安装证书 4.选择安装证书,允许应用添加vpn配置。 5.这时app会自动跳转至浏览器下载证书文件,允许即可 6.下载完成后在描述与文件中安装证书 7.安装完成后会提示信任证书点击信任证书,或者直接在设置中搜索信任

    2024年02月11日
    浏览(37)
  • 【iOS逆向与安全】sms短信转发插件开发

    经过之前的分享,相信大家已经掌握了用户级的插件开发。勤奋好学的你是否对系统级的插件也有着浓厚的性趣,本篇文章将和大家一起学习如何分析并编写一款系统级的插件。 一步步分析并编写一个短信自动转发的deb插件 mac系统 已越狱iOS设备:脱壳及frida调试 IDA Pro:静态

    2024年02月10日
    浏览(42)
  • 跨平台应用开发进阶(五十)uni-app ios web-view嵌套H5项目白屏问题分析及解决

    应用 uni-app 框架开发好APP上架使用过程中,发现应用经过长时间由后台切换至前台时,通过 webview 方式嵌套的H5页面发生白屏现象。 任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃

    2024年02月14日
    浏览(55)
  • JD抓包 | 安卓app抓包

    去年11月份左右搞过一次安卓抓包, 搞了很久试了很多方法, 才弄好. 时隔半年, 安卓抓包依然是令我头疼的问题 这次简单记录一下过程(细节太多我也说不清) JD的有效信息接口通常是以下这样的, 其他的接口并没有返回太多\\\"有用\\\"的信息 使用工具: 雷电模拟器9.0.69(9) (Android 9)

    2024年04月15日
    浏览(29)
  • IOS字节系列Tiktok通杀抓包方案

    环境搭建 可越狱的苹果手机(ios11.0-ios14.8)系统。 Charles抓包工具(v4.6.5) 可以打开tiktok的工具,自备 操作流程 苹果手机插上电脑, 下载爱思助手, 点到 工具箱–更多工具–一键越狱(我这里是选择的是unc0ver的工具进行越狱, 看好版本) 手机端, 直接可以开始就好了, 我这里因为是已

    2024年04月25日
    浏览(82)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包