结构体是一种集合,它里面包含了多个变量或数组,它们的类型可以相同,也可以不同,每个这样的变量或数组都称为结构体的成员(Member) 像 int、float、char 等是由C语言本身提供的数据类型,不能再进行分拆,我们称之为基本数据类型;而结构体可以包含多个基本类型的数据,也可以包含其他的结构体,我们将它称为复杂数据类型或构造数据类型。 结构体的定义 /** * 定义一个结构体, 结构体本质上也是一种数据类型 * 类型是Books的结构体 */ struct Books { char title[50]; cha…

2021年8月24日 0条评论 78点热度 0人点赞 帮助教程 阅读全文

前言 本文会介绍一个自己写的工具,能够把第三方iOS应用转成动态库,并加载到自己的App中,文章最后会以支付宝为例,展示如何调用其中的C函数和OC方法。 工具开源地址: https://github.com/tobefuturer/app2dylib https://gitea.yiem.net/BangZhuJiaoCheng/app2dylib 有什么用 为什么要把第三方应用转成动态库呢?与一般的注入动态库+重签名打包的手段有什么不一样呢? 好处主要有下面几点: 可以直接调用别人的算法逆向分析别人的应用时,可能…

2021年6月4日 0条评论 276点热度 0人点赞 帮助教程 阅读全文

大型app应对苹果官方代码段大小限制的小伎俩… 背景 苹果官方文档 对二进制 __TEXT 段大小有限制:   代码实在瘦不下去怎么办?   解决方案 利用 rename_section 过审核,在Xcode中向 “Other Linker Flags” 中添加 -Wl,-rename_section,__TEXT,__cstring,__RODATA,__cstring -Wl,-rename_section,__TEXT,__const,__RODATA,__const -Wl,-renam…

2021年6月4日 0条评论 283点热度 0人点赞 帮助教程 阅读全文

为了能够第一时间发现程序问题,应用程序需要实现自己的崩溃日志收集服务,成熟的开源项目很多,如 KSCrash,plcrashreporter,CrashKit 等。追求方便省心,对于保密性要求不高的程序来说,也可以选择各种一条龙Crash统计产品,如 Crashlytics,Hockeyapp ,友盟,Bugly 等等。 是否集成越多的Crash日志收集服务就越保险? 自己收集的Crash日志和系统生成的Crash日志有分歧,应该相信谁? 为什么有大量Crash日志显示崩在main函数里,但函数栈中却没有一行自己的…

2021年6月4日 0条评论 153点热度 0人点赞 帮助教程 阅读全文

从app store下载的app和app extension是加过密的,可以通过otool查看: $ otool -l binary_name | grep crypt cryptoff 16384 cryptsize 294912 cryptid 1 iPhone applications的解密办法 dumpdecrypted 是个出色的app脱壳开源工具,它的原理是:将应用程序运行起来(iOS系统会先解密程序再启动),然后将内存中的解密结果dump写入文件中,得到一个新的可执行程序。 iPhone app ex…

2021年6月4日 0条评论 212点热度 0人点赞 帮助教程 阅读全文

一个编译成功的可执行程序,其中已初始化的字符串都是完整可见的。 针对于iOS的Mach-O二进制通常可获得以下几种字符串信息: 资源文件名 可见的函数符号名 SQL语句 format 通知名 对称加密算法的key 攻击者如何利用字符串 资源文件名通常用来快速定位逆向分析的入口点。 想要知道判断购买金币成功与否的代码位置?只要确定购买成功时播放的音频文件名字或者背景图名字就可以顺藤摸瓜了。 kLoginSuccessNotification类似这种通知名称格外炸眼,利用Cycript发个此通知试试,也许会有什么意外收…

2021年6月4日 0条评论 226点热度 0人点赞 帮助教程 阅读全文

攻易防难,唯有缜密、多层的防护网络才能可靠的保护我们iOS应用程序的安全。那么,一个完善的iOS应用安全防护框架都要写哪些东西呢? 首先,先梳理一下常见的逆向及攻击工具。 iOS应用逆向常用工具 Reveal Cycript Class-dump Keychain-Dumper gdb iNalyzer introspy Fishhook removePIE IDA pro or Hopper snoop-it iDB  Charles SSL Kill Switch 裸奔app的安全隐患 一部越狱的iOS设备,外…

2021年6月4日 0条评论 251点热度 0人点赞 帮助教程 阅读全文

当单继承不够用,很难为问题域建模时,我们通常都会直接想到多继承。多继承是从多余一个直接基类派生类的能力,可以更加直接地为应用程序建模。但是Objective-C不支持多继承,由于消息机制名字查找发生在运行时而非编译时,很难解决多个基类可能导致的二义性问题。 不过其实 Objective-C 也无需支持多继承,我们可以找到如下几种间接实现多继承目的的方法: 消息转发 delegate和protocol 类别 消息转发 当向someObject发送某消息,但runtime system在当前类和父类中都找不到对应方法的…

2021年6月4日 0条评论 202点热度 0人点赞 帮助教程 阅读全文

前言 符号表历来是逆向工程中的“必争之地”,而iOS应用在上线前都会裁去符号表,以避免被逆向分析。 本文会介绍一个自己写的工具,用于恢复iOS应用的符号表。 直接看效果,支付宝恢复符号表后的样子: 文章有点长,请耐心看到最后,亮点在最后。   为什么要恢复符号表 逆向工程中,调试器的动态分析是必不可少的,而 Xcode + lldb 确实是非常好的调试利器, 比如我们在Xcode里可以很方便的查看调用堆栈,如上面那张图可以很清晰的看到支付宝登录的RPC调用过程。 实际上,如果我们不恢复符号表的话,你看到的…

2021年6月2日 0条评论 286点热度 0人点赞 帮助教程 阅读全文

Mercurial是一个使用Python编写的分布式版本管理系统,其具有良好的跨平台性,并且带有一个简单易用的Web界面。在平时我经常使用Mercurial来管理源代码。 Mercurial Queue是它的一个非常强大的插件,其可以用来解决源代码管理中经常碰到的一些问题,例如: 有时候我们需要在代码中试验一些新的想法,但是这些想法不大成熟,甚至可能是完全行不通的,我们不想这些不成熟的修改“污染”版本库的历史。由于版本库的历史是不可变更的,一旦commit之后就无法把它们从历史记录中删除。 使用patch系统是一个…

2020年12月3日 0条评论 644点热度 1人点赞 帮助教程 阅读全文
12