关于 exagear 的破解(其实是原理解析)

Nov 11 2018

介绍介绍如何破解 exagear

通篇没有代码没有图,因为手机写的,iOS 搞 git 很坑的

What is exagear

我觉得这个可以自己搜吧,就是一个能在 arm linux 上跑起来 i486 linux 的一个东西,原理用脚后跟都能想得到,binfmt 呗

既然如此,为何还要破解,自己搭建一下不就行了

话虽如此,重点在于 exagear 官方魔改了 wine,让其能够跑外 3G/1G 内存分配的内核上,而树莓派就是这么玩的。虽然,这个魔改版本是开源的,但是人都是懒惰的

Internal of exagear

其实我自己用 debootstrap 搭建了一个 i386 ubuntu xenial 环境,但是如上所说,wine 用不了,这很难受的

But 当我决定破解 exagear 并安装好以后,我所有的 i386 二进制都提示需要激活了!WTF,这一下就让我知道,它是靠着 binfmt 这一层做的拦截

于是查看 binfmt misc 分区,发现 i386 的 magic 解释器并没有被更改,还是 qemu-i386-static,但是注意到有一个 register 的设备文件,同时发现了 exagear 的服务,通过读这段 shell 知道他原来是通过服务动态向 register 注册解释说,来实现的拦截

所以嘛,关闭并移除服务,写了段 chroot 的脚本,顺利跑起来了一切,知道原理一切都很简单

About X11

这个比较坑,因为我都是 ssh 连进去的,其实也简单,首先在当前 X session 下执行 xhost + 让所有会话都能连接进来,然后在 ssh 环境 export DISPLAY 设置一下就好了

至于其他 exagear 的服务,其实我并不是很关心,反正关键的都跑起来了

Summary

其实最后我失败了,有了 wine 也不能满足我的需求,因为 exagear 跑的是基于 wine 1.8 的魔改版本,有一些 Win32 的 EX 接口没有实现,是关于 IO 的,而我跑的这个东西,是 rust 写的,大量运用了这个接口,所以凉凉

查了下 wine 论坛,这个接口直到 wine 3 才有被实现,想哭

这里涉及到的技术点,大概就是 wine, binfmt, qemu-user-static, debootstrap 以及 chroot 这一坨,上文都是顺道提到了,感兴趣的可以靠自己 Google,我只是记录下我搞这个的心路历程

感兴趣的也可以 email 我私下里交流

crack, exagear, raspberry pi