记一次失败平衡车破解提速之旅

记录为期一天的失败破解之旅.

缘起

最近突然觉得手头的 Ninebot 平衡车速度是确实有几分慢了,想起了刚买到手的时候似乎在论坛看到过一篇帖子是讲如何破解速度上限的,拼着几丝印象找到了当时的帖子:传送门


帖子里描述的方法是使用 JLink V8 之类的 ARM模拟器把网友编写的固件刷入主板,对于我一个手残来说,首先是硬件成本,从 JLink ,到铜线、引脚,再到电烙铁和焊锡全都要新买,另外虽然不用担心刷固件把车子搞坏,但是万一手残把主板焊坏,那就死定了。
向下翻打算借鉴一下经验看要买哪一款模拟器的时候,发现了一位坛友的分享:

咦,居然还有这么清真的方式?虽然不算便宜,但是两百以内也完全可以接受,关键是,不用拆机,省了不少事儿,就顺着这条线继续往下查,找到了这篇帖子:

简单看了一下,安卓软件,需要购买 License ,三十刀,界面相当简洁。

To change the model, you need an activation code, you can get it from me, you need to send a screenshot of the program screen on the example as in the screenshot below.

看来 License 是根据读取了设备的三个 key 和 Sn 经由某种算法计算出来的,一台设备对应一个 License。
遂安装到手机试了试,交互十分简单,点击 Set Model 的时候会触发授权码校验。

至此,突然萌生了一丝侥幸,这么简陋,我是不是可以自学一下安卓逆向,把它破解掉呢?

准备工作

首先测试了一下交互,校验失败会直接弹出提示,内容里会包含文本框里的内容。

然后抓包尝试了一下,发现校验完全是本地操作,并无在线校验。

学习

之前在学校的时候简单研究过一些逆向分析的知识,对 .NET 的逆向分析研究多一些,当时学习主要是在吾爱破解,现在想要学安卓逆向,同样也是到吾爱找了一套教程,大佬为兄弟写的一套教程《教我兄弟学Android逆向》

实战

祭出 Android Killer :

分析主界面的代码 FMXNativeActivity.smali :

1
2
3
4
5
6
7
.field private mStartupGCM:Landroid/os/Bundle;

.field private mTextView:Lcom/embarcadero/firemonkey/text/FMXTextEditorProxy;

.field private mViewGroup:Landroid/view/ViewGroup;

.field private mViewStack:Lcom/embarcadero/firemonkey/ViewStack;

1
.method public surfaceCreated(Landroid/view/SurfaceHolder;)V
1
.method public surfaceDestroyed(Landroid/view/SurfaceHolder;)V

噗~~~

我的天。。。
界面的代码里根本没有控件的渲染和事件,有种不祥的预感,再一看 lib 文件夹下:

祭出 IDA :

字符串窗口来看,控件逻辑果然是在 so 文件中,再看到处窗口:

只有两个校验失败的方法。。。

至此。。我大概意识到我的半吊子功夫是搞不定了,也意识到看似简单的界面,实则是作者早有防备。