Qin 1s+ 玩机研究 – MlgmXyysd's Cat Nest |
您所在的位置:网站首页 › 多亲qin1s刷机包 › Qin 1s+ 玩机研究 – MlgmXyysd's Cat Nest |
阅读时长 ≈5 分, 36 秒 最近看见了这个多亲 1s+ 按键机,心血来潮弄个玩玩,第三天的下午快递送来了 ![]() 开机速度很快,让我想起了 AIPC(雾),也没有开机音乐 ![]() 比几年前的挪鸡鸭按键机开机快 ![]() 进系统设置里随便看看,Mocor 系统,还行 ![]() 随便翻翻,有个浏览器 ![]() 进去一看我就懵了,这 tmd 不就是安卓么? ![]() 好吧那就装个酷安耍耍#(滑稽) 连网,下载,一气呵成 点击安装包安装。。。 你 tm 在逗我??? ![]() 这 SDK 版本是有多低啊。。 还好我保留了老版本的酷市场 apk,放进 SD 卡,插入手机,准备安装 结果。。。 这玩意特么的连文件管理都没有?? 开启 USB 调试彳亍,我用 ADB,不过这玩意咋开 USB 调试来着?设置里几个版本号按了半天也没见弹出来开发者选项啊 查了一番资料得知这手机是展讯的处理器 展讯工程模式代码 *#*#83781#*#* ![]() ![]() ![]() 翻了一下发现第二个 tab 里有个 Allow Debug,有些可疑,打开瞅瞅 再回去关于手机界面发现多了一堆东西,点击版本号也出现了开发者选项 ![]() ![]() ![]() 调试整开,通知栏出来了调试的图标 ![]() ![]() ![]() 看这图标。。KitKat?怪不得装不上。 ![]() Windows 没有自带展讯设备的驱动,还得自己去找 驱动安装找了半天之后,点击安装,吃口月饼,差点喷出来 ![]() 全 员 失 败 看安装日志发现是 catalog 签名问题 ![]() 那就好办了,把驱动签名禁用就行 进入 设置 - 更新和安全 - 恢复 - 高级启动 - 立即重新启动,点击 疑难解答 - 高级选项 - 启动设置 - 重启,按下 F7 或 7 ![]() ![]() ![]() ![]() ![]() ![]() 开机后,重新安装驱动 ![]() ![]() 再次查看设备列表,已经显示出来了,尝试安装 ![]() INSTALL_FAILED_APK_RESTRICTED 系统里某个软件拒绝了安装 看来想安装软件得先破解系统的限制 一次失败的尝试用 adb 把 build.prop 扒到本地 $ adb pull /system/build.prop通过翻阅 build.prop,找到了一处可疑点:第 72 行,ro.sys.appinstallwhitelist,app 安装白名单,应该就是这个东西了 ![]() 我们给他改成 false,再通过 Recovery 刷进去试试(万一没有签名验证岂不是美滋滋?) ![]() 写一个刷机脚本,放在 META-INF/com/google/android/updater-script mount("ext4", "EMMC", "/dev/block/platform/soc/by-name/system", "/system"); package_exrtact_file("build.prop", "/system/build.prop"); unmount("/system");最后和 build.prop 一起压缩进 zip,重启进入 Recovery 模式 $ adb reboot recovery![]() ![]() ![]() 这。。是出错了么。。 对着按键随便按了一通之后,发现按下数字键盘的「8」键可以显示 欸,这 rec 有 sideload 模式(apply update from ADB),安装试试 $ adb sideload update.zip发现无论如何都连接不上设备,还是老老实实扔进sd卡吧 欧豁,有签名验证,我们要先破解下Recovery ![]() 破解 Recovery 首先需要获取 recovery.img,一般是在系统更新全量包里 用 Fiddler 抓一下系统更新 打开 Fiddler,勾选 Tools - Options - Connections - Allow remote computers to connect ![]() ![]() 弹出对话框,点确定,然后重启 Fiddler,手机连接 WiFi,代理填 ipconfig 获取到的电脑局域网 IP,端口填默认的 8888 输入 IP 的时候注意把输入法切换为英文模式(通知栏显示为 ab),按 # 切换 ![]() 然后打开系统更新,这时电脑上抓到了一条数据,点开一看,WTF???版本非法??我机子可刚拆封啊 ![]() 修改下发送的数据,再发送到服务器,试了好多版本(1.2.1 1.1.x)都提示非法。最后试出来了1.0.6提示最新版本,但是不给你全量包下载地址 ![]() 1.0.4 是最后一个给你下载地址(升级到1.0.6)的版本 ![]() 大小只有几 M 可还行,看来通过抓包的方式是抓不到全量包了,不过我们至少知道了多亲 OTA 服务器的目录结构 通过一顿操作成功获取到了全量包,不过是 1.0.4 版本的,但是这并不影响,因为我们还获取到了 1.0.4 后续版本的增量包,只需要挨个版本更新进去就行了(具体操作方法这里先略过,偷了下多亲 OTA 服务器的文件删除记录和 SQL 数据库) ![]() 之前查询提示1.2.1版本非法可能是个bug 看一下全量包的目录结构 package.zip ├─> md5sum # update.zip 的 MD5 校验文件 └─> update.zip # 软件包本体 ├─> META-INF # 刷机脚本和签名文件 │ └─> ... ├─> recovery # recovery 差分文件 │ └─> ... ├─> system # system 分区文件 │ └─> ... ├─> boot.img # boot 分区镜像 └─> ...并没有完整的 recovery 分区镜像,但是有差分文件,我们可以通过 boot.img 来生成,因为这是 1.0.4 版本的系统包,我们需要先获取到最新版的 boot.img 再看一下增量包的目录结构 package.zip ├─> md5sum # update.zip 的 MD5 校验文件 └─> update.zip # 软件包本体 ├─> META-INF # 刷机脚本和签名文件 │ └─> ... ├─> recovery # recovery 差分文件 │ └─> ... └─> patch # 差分文件 ├─> system # system 分区差分文件 │ └─> ... ├─> boot.img.p # boot 分区镜像差分文件 └─> ...我们把boot.img和boot.img.p解压出来 除此之外还需要 META-INF/com/google/android/updater-script 里的内容 找到boot.img的那一行,把前面三个参数复制下来(选中的和前面两个) ![]() 在 WSL 中执行指令 $ ApplyPatch boot.img boot_new.img 前面的参数(boot_new.img 的预期 SHA1) 中间的参数(boot_new.img 的预期大小) 选中的参数(boot.img 的 SHA1) boot.img.p执行成功后,把 boot.img 和 boot.img.p 删除,boot_new.img 重命名为 boot.img,对下一个版本重复以上步骤,直到最后一个版本 最终我们得到了一个最新版的 boot.img,接下来找到同版本增量包里的 recovery/recovery-from-boot.p,复制过来 ![]() 用文本编辑器打开,查看文件头,通常有两种情况,这里一起介绍下 如果为 BSDIFF,直接执行下面的指令即可$ bspatch boot.img recovery.img recovery-from-boot.p如果为 IMGDIFF2(如本教程)![]() 需要继续提取 /recovery/etc/install-recovery.sh 和 /system/etc/recovery-resource.dat (在全量包或系统中都可以找到)用文本编辑器打开 install-recovery.sh找到 applypatch 开头的一行,复制下来 ![]() 把不需要的内容都扔掉,留下有用的三个值,它们从左往右分别代表 recovery 的预期 SHA1,recovery 的预期文件大小,原文件的 SHA1 0a13745ae8d85762a03a0cddca7feb3c1aebce58 10479616 821bffe9268699430aece61933229132f882f1e9在 WSL 中执行 $ ApplyPatch boot.img recovery.img 0a13745ae8d85762a03a0cddca7feb3c1aebce58 10479616 821bffe9268699430aece61933229132f882f1e9 recovery-from-boot.p recovery-resource.dat顺利获取到 recovery.img,这就是我们需要的,这时候可以删除其他文件 破解Recovery签名验证用 bootimg 工具解包 recovery.img $ rename recovery.img boot.img # 因为工具只认boot.img,所以重命名一下 $ bootimg --unpack-bootimg一切顺利,你会看到类似如下的输出,文件夹下多出来一堆文件 ![]() 我们要修改的是 /initrd/sbin/recovery 这个文件 用 IDA Pro (32-bit) 打开(64-bit 无法保存 32 位的 elf) 等待 IDA 分析文件 ![]() 点击左上角的 Search for text 按钮,搜索 signature ![]() ![]() 顺着箭头往上翻,找到最近的 CMP,看到下面有个 BEQ,这句就是跳转代码 ![]() 科普一下 arm 指令集 BNE: 标志寄存器中 Z 标志位不等于零时, 跳转到BNE后标签处 BEQ(D0): 标志寄存器中 Z 标志位等于零时, 跳转到BEQ后标签处 B(E7):无条件跳转,一旦遇到一个 B 指令,ARM 处理器将立即跳转到给定的地址,从那里继续执行我们可以把 BEQ 修改为 BNE,但是这样如果签名验证通过就会挂掉(官方包无法安装),所以我们最好是修改为无条件跳转指令 B右键 BEQ,切换到汇编文本窗口 ![]() 找到刚才的 BEQ ![]() 右键,勾选 Synchronize with - Hex View 1 (如已勾选,请跳过该步骤) ![]() 点击 Hex View 标签栏,选中 D0 ![]() 点击左上角 Edit - Patch program - Change byte ![]() 将 D0 改成 E7 ![]() 返回 Text View 标签栏发现 BEQ 变成了 B 同理,再次查询 signature,继续修改没有改过的地方,不再赘述 ![]() 点击左上角 Edit - Patch program - Apply patches to input file ![]() 点击 OK 保存文件 ![]() 最后关闭窗口,勾选 DON'T SAVE the database 后点击 OK ![]() 最后将更改打包进img $ bootimg --repack-bootimg $ rename boot-new.img recovery.img(76.png) 刷入修改后的Recovery4.4 的设备大多数没有 BootLoader 锁,跳过解锁步骤,手机连接电脑,执行指令,刷入成功 $ adb reboot bootloader $ fastboot flash recovery recovery.img这里直接刷入,按理说是应该先执行 boot 指令测试 img 的,但是因为是展讯的处理器,所以 boot 指令是废的(参考资料) 需要注意,刷入成功后并不能直接重启,因为 system 里还存在 install-recovery.sh,一重启就会恢复为原版 rec,一起执行下面的指令 $ fastboot reboot $ adb wait-for-device reboot recovery成功开机,但正当我兴高采烈地去刷的时候,发现它炸了…… E:failed to set up expected mounts for install; aborting Installation aborted.![]() 多次尝试之后,发现这只是个 bug,多刷几次或者拔掉数据线就好了 Install from sdcard complete.![]() 大功告成,破解成功,重启进入系统安装试试水 $ adb install Coolapk.apk![]() 安装成功! ![]() ![]() 至此,破解安装应用已完成,需要注意的是每次进入rec都需要遵循以下步骤: $ adb reboot bootloader $ fastboot flash recovery recovery.img $ fastboot reboot $ adb wait-for-device reboot recovery或者也可以直接把 install-recovery.sh 干掉,我懒的搞 也可以刷个 Magisk 或者 SuperSU 来 root 什么的,建议是最好不要直接修改 system 分区,因为炸了不好整 刷机包呢,也可以使用 bsdiff 来让破解变得更加优雅(大雾) 资源下载驱动(请禁用驱动签名)工具打包(不含驱动,手机打开adb模式连接电脑,运行crack.cmd) 友情提示:玩机有风险,刷机需谨慎,由刷机带来的一切后果本人概不负责 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |