嗨玩手游网

来,教你如何破解一个 iOS APP

今天给大家来一个硬知识科普。

黑客中有一类人,注定跟程序开发者是“死对头”,是宿敌。

他们总跟开发者对着干:

开发者的日常是用一段段代码写出一个个软件,实现各种功能。

他们的日常则是把一个个完整的软件逆推,还原成一段段代码。

他们,就是传说中的“逆向工程师”。

假如让你钥匙撬开一把锁,你或许感到无从下手,但如果这把锁的外壳完全透明的,内部结构清晰可见,你便会觉得容易了许多。

在赛博世界里,逆向工程就有这种看穿一个物体的本领。

给他们一个手机APP、电脑程序,用不了多久,就能逆推出程序的运行逻辑,找到里头的关键代码,篡改、破解、发现漏洞。

人们把这种技术叫做“逆向工程”。我们在网上看到的各种破解软件,多半都跟逆向工程有关。

然鹅,

逆向的江湖有正亦有邪。

正义的逆向者只是做安全研究,而那些邪恶的逆向者却拿着这项技能四处干坏事牟利。

比如盗版软件。开发者们累死累活才写好的程序,分分钟就被人逆向破解,植入广告和木马,重新打包成盗版。拼多多变成拼夕夕,一款软件多出好几十个远方表亲。

(网曝各种山寨的彩票软件)

再比如有朋友总抢不到群红包,怀疑有人用了外挂,其实所谓的“抢红包外挂”就是有人逆向破解了微信APP,在里头添加了自动领红包的代码。

(网上流传的破解软件)

对于那些跟钱打交道的金融类APP,逆向破解更是噩梦,一旦APP被逆向,就很容易面临巨额损失。

最近我撩到一位逆向技术大牛,聊了聊手机APP的破解与反破解,今天与诸位浅友分享一下。

话说,这位大牛有点奇特,虽然他是个逆向技术高手,却不去破解别人的手机应用。相反,他的日常是带着团队专门帮 iOS 应用开发者做反破解。

来,大家认识一下这位新朋友,他就是通付盾的研发副总裁、 iOS 加固项目的总负责人,华保健。

此人灰常厉害,他是中科大的计算机学博士,做了几十年信息安全、系统渗透等方面的工作,2015年前后还在微软主导过 Office 365 和 必应搜索(Bing)的研发项目,前两年加入通付盾,负责技术研发。

话说华博士一心做技术,人比较腼腆,所以我没能拿到他的1080P高清近照,只能从他的微信头像里扣下一张画质的照片。关于他的技术故事,我相信非常精彩,不过来日方长,回头再写。

今天继续聊破解和反破解。

华保健告诉我,要破解一个苹果手机的APP,其实有一些标准套路。

第一步是脱壳。

所谓“壳”,就是原有的软件代码上再外包一层“壳代码”。机器运行程序时,先运行壳代码,这样可以保护应用的代码逻辑不容易暴露。

苹果商店会给每个上架的 iOS APP 都加一层壳。

“不过,这层自带的壳并没什么实质性作用。”

华保健说,由于苹果商店给全世界几百万个 APP 都用的同一种加壳方法,因此全世界的逆向工程师、黑客们都盯着它,老早就做出了针对这种壳的脱壳工具,开源在网上供免费下载,总之,苹果自带的壳分分钟就能脱掉。

脱壳之后,第二步是反编译。

到这一步,幺哥必须给大家先普及一个有趣的计算机知识。

各位同学请看,下图中的两个人是早期的程序员,他们正在检查代码:

也不知道是谁出的主意,早期的计算机代码就这么直接用打孔的方式记录在长长的纸带上。打孔代表0,没打孔代表1,对应着电子元件的开闭状态,以此控制机器运行。

这种原始的代码记录方式叫“机器码”,是一种二进制编码。

相信你已经发现,这种代码记录方式用起来非常麻烦。

据说,当时要编写一个程序,光是打孔就得几天几夜,还容易出错,程序员们不仅每天都在打孔、改错,还得记住一堆 0101010 这样长长的代码。

后来有人发明了一种汇编语言,这才开始用英文字符来替代一串串的二进制字符。

从此,像1000100111011000 这样的代码就可以用“mov ax,bx”这样的一串字母来替代,它的意思是“把b寄存器(一种机器元件)里的数据挪到a寄存器”。

再后来,程序越来越复杂,汇编语言也不够用,更高级的语言就诞生了。比如 C、C++、Java、Python、PHP、Rust、Nodejs 等等……

从此,程序员圈子里便有了“谁才是世界上最好的编程语言之争”……

所以,当今程序世界里的规则是这样的:

程序员们先用高级语言写好程序代码,编译器把它们编译成机器能读懂的机器码用来执行。

逆向工程师的工作恰恰相反,他们直接从机器里抓取机器码,然后反汇编成汇编语言,再反编译成高级语言。

到这里,恭喜你已经学会了反编译的原理,现在我们继续破解iOS应用。

“反编译工具网上有很多,但大体上方法分为两类:静态分析和动态调试。”

华保健说,所谓“静态分析”就是在程序不运行的状态直接反编译,把它从二进制的机器码转化成十六进制的编码、再到汇编代码,再到人类能直接理解的语言,一路转化。

在这个过程中,如果对方没有做任何防护措施,你就能直接找到并改掉里头的关键信息,比如版权信息、游戏数值等等,单挑 BOSS 怒刷装备。

(十六进制查看程序是这样子,图源自网络)

华保健告诉我,由于反编译涉及很多不同的语言,所以没法把机器码直接还原成源代码,但是能用伪代码的形式把源代码的逻辑还原个七七八八。

所谓动态调试,顾名思义就是让程序先运行起来,在里头输入不同的值来观察各种组件、函数的反应,从而梳理出它们之间的关系。

如果把静态分析比作翻译一本外国漫画,动态调试就是翻译一部蓝光高清有码外国大片。

在整个过程中,逆向工程师需要反复调试,并且需要给程序打上“断点”,随时暂停下来慢慢欣赏,反复把玩。

经过这两步,一个程序的运行逻辑就被完全还原。接下来,只需要找到登录验证、加密、授权等关键部位找出漏洞,篡改掉关键数据,完成破解,为所欲为。

最后,再从网上买个iOS签名,就能把代码重新打包成一个APP,安装在自己或别人的手机里。

华保健:到这一步,一个iOS应用破解的流程就讲完啦~ 其实破解很简单,就三步,脱壳、反编译、签名打包,懂了吗?

谢幺:懂了!~

华保健:好的,既然懂了,现在随便找个APP去练练手吧~不如就试试破解微信吧!

谢幺:呃……这……

搞懂了逆向破解的基本套路,自然也就能对症下药。

华保健的解决方法是,给APP做加固。

如果你玩过《植物大战僵尸》这款游戏,就能理解“APP加固”的意义。

华保健告诉我,通付盾的iOS加固第一步是“环境检测”。

他们会在 APP 的最外层布置很多探针,探针实时监测运行环境,一旦发现手机处于越狱状态,或者发现环境中有逆向分析工具,就立即进入警戒状态,告警提示,或者直接让程序崩溃。

这让我不禁脑补出一万个土豆雷围着代码的样子……

第二步,叫威胁感知。

除了检测运行环境,探针还会实时监测应用的运行状态,因为一旦程序中途中止,那就说明有人设置了“程序断点”,正在做动态调试。

第三步和第四步有些类似,分别是常量加密和符号隐藏。

代码中有一些内容永远是破解者的重点关注对象,比如一些名叫 password 的字符串,比如一些隐秘的URL。

为了防止破解者定位到这些关键位置,“常量加密”会把这些关键的字符都加密隐藏掉。“符号隐藏”类似,也是把一些类名、方法名、属性名加密隐藏起来。

总之,这两步的关键在于“打码”,保护关键部位。

第五步是“代码逻辑混淆”。

这个其实很好理解,我给大家做个比喻:

你想去超市买冈本卷纸杜蕾斯,但又是不想让人知道,于是你先去买了冈本和地瓜回来,又去操场跑两圈,再去趟超市买了卷纸和可乐,最后再去买了杜蕾斯回来。

虽然最后都买回来了冈本卷纸杜蕾斯,但是你隐藏了自己的行动目的。

“代码逻辑混淆”就是这样,在清晰明了的代码里加入各种多余的垃圾指令和代码,把原来的逻辑拆分成各种怪癖语法,改得连亲妈都不认识,从而防止破解。

“只要做完这几步,逆向破解的难度就会大大提高,虽然从理论上来讲没有破解不了的系统,但是只要把破解成本提高到足够高,黑客就会放弃破解,或者转向那些更容易的目标。”

华保健说。

只要做完加固就能抗住大部分破解?

是的。

听起来,反破解挺简单,就那么回事。

然鹅,现实永远比你想象得残酷。

“令我头疼的,不是扛不住逆向破解,而是开发者们都不肯用加固。”

华保健说,目前市面上只有20%左右的 iOS 应用做了加固,其中金融类的APP比例略高,但也只有50%左右,很多中小型金融机构甚至银行的APP都没做加固。

谢幺:纳尼?既然加固这么安全,为什么大家都喜欢裸奔呢?

华保健:因为裸奔更凉快呀~

谢幺:???

华保健说,以往的加固方法虽然安全,但弊端也很明显,这跟“衣服穿多了会显得臃肿”是一个道理(果然是裸奔更凉快。。。 。。。 )

首先是拖慢程序性能。

就拿代码逻辑混淆来说,原本一步能干完的活,现在非得分成好多步,为了迷惑对手还得故意磨洋工,那可不就拖慢性能了。

其次是程序体积会更大。

“一般来说,基于源码的加固方式能让程序增大20~30%的体积”,华保健直言,这一点很多开发者都接受不了,因为体积增大会降低用户的下载欲望。

不过,最令开发者受不了的是加固带来的代码泄露风险,以及兼容性问题。

“传统的 iOS 应用加固技术普遍采用的是源码编译的方式,需要开发者把程序的源代码提交给第三方加固平台,光这一点就让不少开发者打退堂鼓。”

“并且基于源码的加固过程需要反复改动代码,可能影响对机型、系统版本的兼容适配,导致程序闪退,影响用户体验。”

华保健坦言,在很长一段时间里,他不是在琢磨如何抗住更厉害的逆向破解者,而是在解决“怎么让开发者愿意用加固” 的问题。

一开始,他们试着“戴着镣铐跳舞”,牺牲一小部分安全性来提高性能,却发现解决不了多少问题,并且一味地降低加固强度显然不是个办法。

华保健带着团队研究了大半年,这才想到一个新的思路。

于是他们开始借鉴安卓应用“加壳”的技术思路,直接对 iOS 应用程序的 IPA (iOS程序安装包)进行一层专门的加壳。在此基础上,再用底层二进制代码从程序中抽取出关键部分的代码逻辑进行混淆。

如此一来,开发者就不再需要把程序源代码上传给第三方加固厂商,并且由于不用对源代码进行大量逻辑混淆和修改,加固的性能、安装包体积、兼容性也都可以兼顾。

按照华保健的说法,开发者把 IPA 安装包上传到他们的加固平台,10分钟就能直接加固完成。

通付盾的iOS加固具体的体验和强度如何,幺哥其实没来得及做详细测试,诸位有兴趣可以自己试试。

不过话说到这,我忽然发现,其实华保健遇到的“安全与体验如何平衡”的问题,大部分安全创业者都会遇到。

之前就遇到一个做安全创业的朋友很纳闷,他说自家产品明明比竞争对手的技术更好,更安全,为什么就是干不过别的竞争对手?

最后转了一大圈才发现,因为他的产品太难用了!我的这位朋友是个耿直的技术流,只想着一股脑把安全强度做到最高,却忽略了一件事:安全的本质是维护业务,技术的本质是输出实用价值。

人也好公司也好,偶尔换个视角,兴许看起来像是一种妥协,但实际上也是一种以退为进。

最后再介绍一下我自己吧,我是谢幺,科技科普作者一枚,日常是把各种高大上的技术知识、黑科技讲得通俗有趣。如果有什么有意思的科技类问题,可以加我的个人微信:dexter0。不想走丢的话,请关注【浅黑科技】!

----

让普通人读懂技术

游戏机功能越来越不纯粹,或是行业新趋势

近两年,疫情挖矿双重影响下,搭建高性能PC平台的成本一直居高不下。而越来越多的游戏党,则把目光投向了游戏主机。虽然游戏机也出现了涨价的情形,但受影响程度相比能挖矿的显卡还是要轻很多。我们都知道,大部分游戏主机,硬件方面本质上就是PC,只是装上的特定的系统,并且主要功能被人为限制为玩游戏。

当然,相应的,专门的游戏主机,相比普通PC会有一些优势,比如更高的性价比、更多的独占游戏等。实际上,尽管有种种限制,但很多游戏机产品,在玩游戏之外,仍然能发掘出不少“不务正业”的功能,这或许超出了你的想象。

最近一段时间,小雷抱着猎奇的心态,搜寻了不少游戏机上的非游戏功能,也顺便探讨下它们的实用性。

影音娱乐

游戏主机厂商经过多年应用场景的不断摸索和产品形态的演进,游戏机在游戏设备属性之外,还试图扮演家庭娱乐中心的角色。因此,大部分游戏主机,都会有些影音娱乐功能,仔细梳理下还不少。

1.除了游戏碟,还能看蓝光碟

像PS4、PS5或Xbox都有光驱版,除了插游戏碟之外,还兼容常规的蓝光碟,PS5甚至支持超高清蓝光碟(ultraHD)。当然,话说回来,现在仍然把实体蓝光碟作为观影方式的人其实相对比较少了,这种功能更符合影音发烧友的口味。另外,当前的次世代主机,都有光驱和不带光驱版,如果有这方面需求的话,还是得注意下。

更进一步深入了解后,我们发现,用游戏主机看蓝光碟,还可能会有新的问题。

首先,无论是PS还是Xbox主机,都只能兼容正版碟,观影成本还是挺高的;其次,蓝光碟本身可能会有区域限制,比如只标注了A/1区(北美、中南美、日本、韩国、中国台湾,中国香港和东南亚等)的碟片,只能在A/1区的PS主机上播放,像不属于A/1区的大陆版主机,就不能正常兼容了。

另外,如果是用海外版的蓝光碟,可能会面临字幕的问题,如果碟片内本身没有中文字幕,想用外挂字幕的话,就没有电脑那么方便了。PS主机目前是不支持字幕外挂,Xbox倒是可以安装KODI,实现字幕外挂,甚至还能访问NAS、电脑硬盘,直接利用外部的影视资源库。从这个层面来说,虽然Xbox的UWP应用比较鸡肋,但相比索尼阵营还是实用不少。

2.流媒体也盯上了这块蛋糕

既然是需要连接大屏的设备,那么游戏机自然也能成为视频播放的媒介,相比日渐式微的碟片和本地播放,在线视频和流媒体风头正盛,它们也盯上了家用游戏机设备。网飞、迪士尼+、YouTube均上线了Xbox和PS5,甚至Apple TV+还上了PS5。

相对而言,国产视频App在主机平台上就没那么常见了。毕竟目前国行游戏主机的存量相对没那么大,小雷个人的经验来看,这方面可能还是B站的云视听做得还不错,不同于常规的电视版,PS5版的B站客户端可以直接用手机会员,不需要额外再买个TV会员,这点算是一个小福利。

还有一个小彩蛋就是国行Switch是可以安装腾讯视频App的,而且非会员观看在线视频也没有广告,海外版就没有这个福利了。不过,Switch的屏幕是720P,显示效果自然比不了智能手机。

游戏主机平台上也有不少流媒体音乐应用,比如Spotify就支持Xbox和PS平台,Apple Music则登陆了PS5,还可以提供背景音乐功能。

挖矿赚钱?

前面说的影音娱乐功能,基本还在正常游戏主机厂商允许的范围内。而挖矿则是游走在灰色地带的“邪典”操作了。首先要说明的是,目前次世代游戏主机均未遭实质破解,已经有成熟破解机制的主要是PS4系列。但一般来说,游戏主机破解是基本上是为了玩免费盗版游戏,用作它用的并不多。以PS4来说,截止目前也没有出现成熟的自制系统,让游戏主机秒变的操作,理论上可能,但实际上并没有实现。

关于游戏主机批量破解挖矿的传闻,实际上是个洋葱新闻。乌克兰查获的3800台PS4,虽然看起来阵仗很大,很像地下矿场,但其实是用来刷FIFA游戏币的。而且,PS4的浮点算力和GTX 1050显卡大致相当,用它来挖矿可能收益还抵不上电费。

还有这些骚操作

理论上来说,游戏主机上的商店,本质上和一般的应用商店没有太大区别,开发者开发的应用,只要通过审核就能上架。只是,主机商店自然以游戏为主,但这并不意味着非游戏软件就不能出现。正是因为它们的存在,游戏机也能做很多看起来匪夷所思的事情。

1.计算器

虽然不知道为什么游戏机上要计算器,但Switch上就是这么一款,价格不算贵,大概10来块钱。功能嘛,它就是一款熟悉的科学计算器,学校里很多人都用过的那种。

只是,大部分手机都会自带计算器,想要买到高级计算器也很容易。不过,还是有网友给我们解释了这款计算器的妙用,它在Switch上可以快速开启,不需要选择用户(游戏通常无法省略这一步骤),堪称是办公室摸鱼的利器。

(图源:Jump)

2.视频剪辑

将自己的游戏过程剪成视频片段,已经是游戏场景中的重要需求。游戏主机一般也会提供这一功能,受限于机能,Switch只提供30秒录屏,次世代主机PS5和Xbox S系列对它的支持也要好得多,最长可录制1小时。

PS5中还免费提供了ShareFactory Studio用于视频剪辑,支持4K HDR,还能通过外部存储设备导入图片、视频、音频等素材,可以增加解说和特效,虽然不像真正的视频生产力工具那样样样俱全,但满足一般需求肯定是够了的。

3.闹钟

这款名为“AAA Clock”的软件感觉更像是个插件,装上之后Switch就能在屏幕上实时显示翻页时钟,把Switch放在床头就能当闹钟用了,算是把Switch OLED的新款屏幕和支架利用到极致了。1.99美元的价格在Switch上不算贵,但小雷同样感觉它是个比较鸡肋的软件,毕竟这么多电子设备上都有闹钟,没必要游戏机上再装一个。

游戏机“不纯粹”是大势所趋?

前面我们提到过,游戏机在硬件上和PC没有本质区别,只是特有的商业模式把它们的功能和使用场景做了限制。至于限制的幅度大小,通常取决于主机厂商的商业利益考量。如果只专注于游戏场景能让商业利益最大化,那么厂商自然会限制其他功能;如果变身全能娱乐设备、占据家庭娱乐中心能带来更多的收入,索尼微软们也不会排斥改变。

游戏主机的盈利模式和App Store本质上是一样的,即通过构建封闭的围墙花园让用户为内容付费来源源不断地攫取利润。至于这个内容是不是游戏,其实没那么重要。

而且,随着游戏主机群体规模的逐渐扩大,他们也从小众变得更加大众,那么就能吸引越来越多的开发者,包括游戏之外的软件开发者。那么,既然是一个开放的平台,则各种看起来奇葩的软件就会逐渐增多,让游戏机可以实现很多“不务正业”的功能。早年间App Store中的电子秤、西瓜鉴定器等奇奇怪怪的App也曾引发过热烈讨论,但很快大家就习惯了。

其实,放眼整个消费者电子市场,我们发现专门类的电子产品,都在逐渐全能化。从功能机向智能机转变的手机就是个最经典的例子,而像相对小众的音乐播放器,越来越多装上了安卓系统、增强了拓展性;智能汽车的车机运行大型游戏,似乎也不再是新闻。

在这个过程中,智能设备之间的品类界限在逐渐模糊。前阵子,就有爆料称苹果在研发游戏机产品,它就很可能与现有的iOS设备有千丝万缕的联系,同时和传统游戏主机有很不一样的地方。游戏机的“不纯粹”,或许就是未来智能设备发展趋势中的一个缩影。

更多攻略
游戏推荐
更多+