本周的Big Bugs podcast结合了我最喜欢的三样东西: 游戏、移动设备的攻击和网络安全。在这篇文章中,我将简单介绍一下Pokemon Go,并且回顾一下这款游戏存在的一些技术问题,我还会介绍一些对游戏进行逆向工程的方法和技巧,希望能为你们提供帮助。
这篇文章比以往的要长,但我觉得这是值得的, 毕竟Pokemon Go的火爆有目共睹。在文章最后,我整理了一些笔记,还附上了一些供你们参考的资源。
存在的技术问题:
•一个自称为“PoodleCorp”的黑客组织造成了游戏的运行中断,他们声称使用了DDoS攻击。之后,John Hanke 在2016年的国际漫展上就服务器问题发表了道歉,并说“我们没有准备好预防措施。“
•早期的用户在iOS上安装Pokémon Go时,会被要求向应用程序提供完整的访问谷歌账户的权限,进而让程序访问他们的邮件, Dan Guido发现,这会允许Niantic在无意中访问人们的电子邮件地址和电话号码。
逆向工程:
1. 客户端:
•游戏使用c语言进行编码,使用unity框架
•游戏使用剥离级别2的unity代码。这意味着所有的.NET网络字节码都被编辑进了本地汇编代码中,并与其他使用了IL2CPP的部分一起打包。当然了,这也让反向变得更加漫长,这比将.dll输送到ILSpy或dotnetReflector更加乏味。简而言之,这意味着你将没法找到Unity脚本文件,除非一些包含它的调试版本自动弹出了这些东西。”
•Current state of reverse engineering(逆向工程的当前状态)
•Reverse-engineer of the Android app(面向Android应用程序的逆向工程)
•What we know so far(迄今为止我们了解到的内容)
•Does anyone know where the compiled Unity script assemblies can be found?( 有谁知道编译过的Unity脚本组件可以在哪里找到吗?)
•Decoded GAME_MASTER protobuf file v0.1 – all Pokemon, move, item stats(解码的GAME_MASTER protobuf文件v0.1——Pokémon项目统计)
•Unbundling Pokémon Go(拆分Pokémon Go)
•Reversed/reflection pastebin(反向的pastebin)
•Looks like Niantic forgot to clear a few scripts on evolution(看样子Niantic忘了清除一些进展中的脚本)
•Pokemon GO App Assets and Images(Pokémon Go应用的asset和图像)
•Using proxy libraries to intercept JNI and Unity<->Native code calls.(使用代理库拦截JNI和Unity < – >本地代码调用)
•F# scripts to unsplit & split Unity asset files. (F#脚本不可分离和可分离的Unity asset文件)
后续的研究:
•Unity博客: An Introduction to IL2CPP Internals
•Unity 文档: Optimizing the Size of the Built iOS Player
•Alan Zucconi: A practical tutorial to hack (and protect) Unity games
•Pyromuffin: Reverse Engineering Unity Games
• .NET反编译工具是一个神奇的程序 ,它可以将.NET 聚集起来,并将其转化为C语言代码。
•Pen Test Partners: Tearning down and reverse engineering Android (toys)
2. 网络:
•大多数流量不是SSL。PoGo使用的是Protobuff,Protobuf是谷歌的一个二进制对象压缩协议,它的构造很难解释。你得到的全是编号字段,因此你需要.proto文件(一种地图)。
•有一部分流量实际上是加密的, 它们有可能是反作弊或反分析的,这仍有待观察。
•Guide to Pokémon Go Server Responses(Pokémon Go服务器响应指南)
• How was the RPC binary protocol determined?(RPC二进制协议如何确定?)
• Protocol Buffer reverse engineering(协议缓冲区逆向工程)
•PokemonGo Decoder For BurpSuite (BurpSuite的PokemonGo解码器)
3. 第三方开发:
•mila42 制作出了第一个API解析器,AHAAAAAAA提供了当前最复杂的Pokemon地图。
•Pokevison等网站正在使用核心算法
4. 打过补丁或挂机的客户端:
•正如之前提到的,几个打过补丁的客户端仍然存在。
•为IOS提供的、来自于某些企业应用程序的旁加载应用程序。
• 来自于android上某些隐蔽apk的旁荷载。
•OwnedCore forum on Pokemon Go
PokemonGo的未来和安全性:
• RPC / Protobuff可能会改变, 很多项目可能会消失
• 由于bots的存在,交易可能会受到巨大的影响。也许Niantic需要用数据阈值来抵御bots。
•昨天速率限制降低了,Pokemaps不准确。
•可以使用更多SSL定位,但是这些东西最终会被绕过。
•猫鼠游戏。
游戏技巧:
•低级:找个离三个站很近的地方,引诱并抓住PIdgeys、Weedles和Caterpies(只需12个糖果就可以进化到下一个阶段,它们也是最容易遇到的)。
•更多实用的小技巧在这里:
Hi, I just hit level 25 and wrote a comprehensive guide to everything I know so far.
•在进化之前进行命名,你就可以强制一个Eevee进化:
Sparky = Jolteon
Rainer = Vaporeon
Pyro = Flareon.
•Overall stats of Pokemon (Pokémon Go的整体统计)
•已经总结出来但未经证实的数据:
o Trainer等级上限是40
o蛋的等级上限是20级,所以,如果你在37级的时候得到一个蛋,孵化结果和你在20级时没什么两样。
o野生Pokemon等级上限是30级,这意味着30级后,每个人都能找到相同的最大CP 的Pokemon,这也取决于糖果和星尘的使用,你需要升级它们到你的等级上限。
o扔球的准确性已被公认为是捕获机率的重要指标。
未来的孵化器可能会减少孵化之前所需的公里数。
o动作拥有准确性和命中率指标。
o每个Pokemon都有它自己的捕获率和逃跑率。
o随着Trainer等级提高,损害值也会提高。
o升级之后,Pokemon更难以捕捉。
o Mewtwo、Moltres、Zapdos和Articuno存在于传说中。
o Mew是神级的。
o从39 级到40级需要五百万点经验,从1级到40级需要二千万点。我一天最多可以得到十万经验,这相当于从39 级到40级需要3到4个月。
o Pokemon有基础攻击、防御和精力(HP)。
O在传说级以下,Dragonite拥有最强的基础攻击,为250。
o MewTwo的基础攻击为284。
o Moltres是三种传说级鸟类中基础攻击最高的。
o Articuno是其中基础防御最高的。
o Zapdos的基础攻击几乎和Moltres一样高。
o Pokemon有一个进化调节器和一个HP调节器,CP和HP在进化时都遵循一组乘数。
o防守型Pokemon在健身房中每1.5秒攻击你一次。
o Master Ball位于游戏中,但是没人知道应该上哪找。
o传说级的神奇宝贝有一个产卵率,他们没有捕获率。
o游戏中有STAB, 会为攻击提供25%的奖励。STAB代表着“相同类型攻击奖励”。