本文已获好兄弟(作者)授权。
时隔了五年的失踪人口回归,这五年作者也在打磨自身,沉浸在网络安全行业,一直想写下这篇文章,却又不知如何起笔,明知道这篇文章可能触碰到了国内这些改装店的利益,但是无论是早些年的wooyun还是现在的52pojie,互联网的精髓在于share,我承认这是一个知识付费的时代,但是利用开源项目赚取大量的车主改装费,实在是令人作呕,况且这个固件的作者明确声明禁止商用。
好了,废话就不多说了,下面开始Porsche 971 帕拉梅拉的全屏carplay开通教程新款保时捷帕拉梅拉的carplay设计的比较恶心,他只会在中控屏幕中显示一半的位置,看起来特别不协调。
那么我们怎么样才能让他变成全屏显示呢,首先,我们要确定我们的车机固件版本
就比如笔者这辆,软件版本 MHI2_CN_POG24_P0822 ,其中MHI2 代表的是 MIB2 High车机 CN代表中国 POG24代表宽屏触控车机(同理POG11就代表早期PCM4.0及以前的车机版本) P0822就是软件版本号
我们用MIB helper去查询我们的版本信息
这是国外大神制作的MIB查询工具,可以帮我们根据版本号寻找对应的补丁
如作者这辆,最新的版本补丁为MHI2_CN_POG24_K1018,其他版本的也可以据此查询,找到对应的版本补丁。我们去这个网站下载最新的补丁。用户名:guest 密码:guest
这个文件几乎包含了全部MIB车机的补丁
下一步,我们就要祭出我们的大杀器了
在GitHub上下载这个开源的MIB利用工具
在这里选择发行版,下载
这是下载之后解压的全部内容,下载之后我们需要准备一张SD卡,并且格式化为fat32格式,把上面的文件全部解压到SD卡中。
接着我们把刚刚下载的全部的补丁文件放到SD卡的patches目录中
这时候电脑端的准备工作就全部OK了,下面我们把SD卡插入到车内(帕拉梅拉是插在副驾驶手套箱内的SD卡槽)然后启动车辆,在车机开启了之后,在主菜单同时按下中间的小圆纽和media三秒,进入红色工程模式。
这时候屏幕的左边会跳出软件更新,我们选择从SD卡升级,然后一直下一步,这时候屏幕会重启几次,不要管他,最后完成他会自动返回主菜单(如果提示插入诊断设备备份的话,点击不备份就可以)。
更新结束后进入到主菜单,这时候只是加载完了工具,并没有烧录补丁,所以这时候的carplay还是半屏的,我们要进入到绿色工程模式,进行全屏carplay的刷入
这时候,车辆的车机应该就变成了这样
刚开始会有两个选项,我们选择MIB,进入mib后进入这个菜单
multimedia_system/porsche/pog24,我们选择 Enable widescreen CarPlay,然后车机会自动重启,重启之后我们的宽屏幕carplay就刷好了
至此,全屏carplay的刷写过程就全部结束了,至于无良商家所说的所谓正版全屏Carplay,正版激活码之类的,纯属无稽之谈,口说无凭,笔者用了一点时间root掉了自己的这台帕拉梅拉的车机系统,这就是一个非标准的Linux系统。
笔者跟踪了一下开启宽屏carplay的代码
继续追踪g24wide这个java文件
package de.audi.app.terminalmode.pgen2;
import de.audi.app.terminalmode.AbstractTerminalModeConfiguration;
import de.audi.atip.base.IFrameworkAccess;
public class PGen2TMConfiguration extends AbstractTerminalModeConfiguration {
private final int screenOffsetX = Integer.parseInt(System.getProperty("terminalmode.screenoffsetx", isRightHandDrive() ? "506" : "134"));
private final int screenOffsetY = Integer.parseInt(System.getProperty("terminalmode.screenoffsety", "55"));
private final int touchpadX = Integer.parseInt(System.getProperty("terminalmode.touchpadx", "1440"));
private final int touchpadY = Integer.parseInt(System.getProperty("terminalmode.touchpady", "540"));
public PGen2TMConfiguration(IFrameworkAccess paramIFrameworkAccess) {
super(paramIFrameworkAccess);
}
public boolean hasKnob() {
r
eturn true;
}
public boolean hasTouchscreenHigh() {
return true;
}
public String getScreenName() {
return "Porsche";
}
public boolean isAutoConnect() {
return false;
}
public boolean getStoreUserAcceptState() {
return false;
}
public boolean shouldShowDisclaimerAtLeastOnce() {
return true;
}public boolean isKnobDirectionInverted() {
return true;
}
public boolean usesOldMediaConnector() {
return true;
}
public int getScreenOffsetX() {
return isRightHandDrive() ? 0 : 114;
}
public int getScreenOffsetY() {
return 55;
}
public int getScreenResolutionX() {
return 1440;
}
public int getScreenResolutionY() {
return 540;
}
public int getWindowResolutionX() {
return 1326;
}
public int getWindowResolutionY() {
return 480;
}
public int getTMWindowResolutionInXAxis() {
return 1326;
}public int getPhysicalDisplayHeight() {
return 110;
}
public int getPhysicalDisplayWidth() {
return 295;
}
public int getTouchPadResolutionX() {
return this.touchpadX;
}
public int getTouchPadResolutionY() {
return this.touchpadY;
}
public boolean isTouchScreenInputWidget() {
return true;
}
public boolean hasBothPhoneMFLKeys() {
return true;
}
public boolean supportsDeletionOfConnectedDevices() {
return true;
}
public int getDSICarPlayScreenResolution() {
return 3;
}
public int getCarPlayPhysicalDisplayHeight() {
return 110;
}
public int getCarPlayPhysicalDisplayWidth() {
return 295;
}
public boolean hasTwoVirtualButtonModels() {
return false;
}
public boolean useDSIAndroidAuto2() {
return true;
}
}
根据Apple给出的MFI开发文档,车机的分辨率确实有所变化
但这并不代表就是盗版,因为代码中并未对IAP2的认证协议进行欺骗或者修改,修改的只是车机的部分的显示代码,所谓激活码,也不过就是telnet的登陆密码,跟apple的MFI八竿子打不着,不存在盗版正版一说。
root掉车机系统后,你可以在车机上做任何事情,因为他就是一台Linux,具体做什么大家就自行发挥想象力把,有兴趣想root的,也可以持续关注,我有时间就写
搬运著名出处和作者
最近在研究piwis3,如果各位有兴趣的话,下次为大家公开971/9Y0等sport chrono和弹射的开通方法,算法,让改装店不赚你冤枉钱。
本文分享自微信公众号 - 黑白天实验室(li0981jing)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。