分类 开发随笔 下的文章

开发时的突发奇想

最近突发奇想想看看ICOM的短波发射机的固件
就花了一晚上时间写了个算法解压了它
我作为懒人,肯定懒得写分析日志
所以给出两条提示:
1.找到正确的头,大胆删无用数据
2.Lempel–Ziv–Storer–Szymanski(LZSS)压缩算法
在此提供成功解压后的IC-7300的1.40版本固件,发布于2021年2月26日
点此下载
同时得知该设备的AP为RENESAS RZ-A1,是ARM架构,有空再用IDA看看再写下一篇分析日志(咕咕咕~)

SH-Mobile 系列

SH-Mobile 是由瑞萨、三菱、日立、富士通和夏普联合开发的移动处理器系列。

  • 基带层和媒体层系统:统一使用日立 HI7700/4 μITRON RTOS
  • 应用层系统:

    • SHMobile3 至 AG5:支持 Symbian OS 6.0/6.1/^2/^3(9.5)
    • G3 及以后:支持 Linux
    • APE5R:支持 Android 2.3(Linux 2.6.35.7) 和 4.1(Linux 3.0.8)

主要型号概览

  1. SH-Mobile AG5 (R8A73A00(SH73A0))

    • 45nm 工艺
    • 应用核心: 双核心 Cortex-A9 1196MHz
    • 媒体核心: SuperH SH-4AL 624MHz
    • GPU: PowerVR SGX543MP2 200MHz
  2. SH-Mobile G4 (R8A73777(SH7377))

    • 45nm 工艺
    • 分支版本: SH-Mobile AP4(R8A73720)
    • 媒体核心: SuperH SH-4AL(VPU5HG) 500MHz
    • 应用核心: Cortex-A8 500MHz
    • GPU: PowerVR SGX540 125MHz
  3. SH-Mobile G3 (R8J7367/R8J7368(SH7367))

    • 65nm 工艺
    • 媒体核心: SH-X2 500MHz
    • 应用核心: ARM1136JZF-S 500MHz
    • 基带核心: ARM926EJ-S 166MHz
    • GPU: PowerVR SGX530
    • 支持网络: WCDMA(HSDPA) Cat.8, GSM(GPRS/EDGE)
  4. SH-Mobile G2 (R8J73657/R8J7359)

    • 90nm CMOS 工艺
    • 分支版本: SH-Mobile AP2(R8J7352)
    • 媒体核心: SH-4AL/X2 390MHz
    • 应用核心: ARM1136JF-S 390MHz
    • 基带核心: ARM926EJ-S 130MHz
    • GPU: PowerVR MBXLite with VGPLite 130Mhz
  5. SH-Mobile G1 (R8J7347)

    • 90nm CMOS 工艺
    • 媒体核心: SH-4AL/X2 312MHz
    • 应用核心: ARM926EJ-S 208MHz
    • 基带核心: ARM926EJ-S 104MHz
    • GPU: PowerVR MBX-Lite 78Mhz

UniPhier 系列

UniPhier 是由松下开发的SoC系列,主要基于 Linux 系统。

主要型号概览

  1. UniPhier 4MBB+ (MN2CS0038)

    • 45nm 工艺
    • 应用核心: ARM11 500MHz
    • 媒体核心: 双核指令并行处理器 200MHz
    • GPU: UniPhier ReCS(Rendering engine for Curved Surface)
    • VPU: UniPhier Frago(Frame Governor/Fragment Zero)
    • 支持网络: WCDMA/HSDPA 7.2Mbps
    • 操作系统: Linux 2.6.21
  2. UniPhier 4M (MN2CS0036)

    • 65nm 工艺
    • 应用核心: ARM11 300MHz
    • 媒体核心: 双核指令并行处理器 200MHz
    • GPU: UniPhier ReCS(Rendering engine for Curved Surface)
    • VPU: UniPhier Frago(Frame Governor/Fragment Zero)
    • 操作系统: Linux 2.4.20
  3. UniPhier 3M (MN2CS0035)

    • 应用核心: ARM11 300MHz
    • 媒体核心: 指令并行处理器 200MHz
    • GPU: UniPhier ReCS(Rendering engine for Curved Surface)
    • 操作系统: Linux 2.4.20
  4. UniPhier 2M

Medity 系列

Medity 是由 NEC、松下和德州仪器组成的 Adcore-Tech(株) 联合开发的处理器系列,主要基于 Linux 系统。

主要型号概览

  1. M2 (μPD77620)

    • 65nm 工艺
    • 应用核心: ARM1176JZF-S 500MHz
    • 媒体核心: K701 500Mhz
    • 基带核心: ARM1156 250MHz
    • 支持网络: WCDMA(HSDPA 3.6Mbps)/GSM(*可外挂LSI实现7.2Mbps)
    • 操作系统: Linux 2.4.20
  2. M1 (MC-10038F1)

    • 90nm 工艺
    • 分支版本: M1 CCPU (MC-10026F1)
    • 应用核心: ARM926 250MHz
    • 基带核心: ARM926 123MHz
    • 支持网络: WCDMA(UMTS)

Qualcomm的MSM8k以及SDM平台的启动过程其实比较复杂,但是如果想改动其实并不能改很多,有一部分高通甚至只给了BIN并没有SRC。所以今天就选继PBL后最重要也是能改动的最底层部分,即SBL来做一些分析以及介绍。由于NDA的缘故,其中仅能挑选公开部分代码片段。可能有疏漏,请尽情指正!

启动过程

由于我并不涉及到BP部分的开发,那全程就只从AP的角度做分析以及介绍。
MSM_BootProgress

SBL的功能

初始化DDR/硬件/加载RPM/加载TrustZone/加载ABL以继续引导

SBL入口

此部分源码位于boot_images/core/boot/secboot3/hw/<Part_Number>/sbl1/sbl1.s

IMPORT |Image$$SBL1_SVC_STACK$$ZI$$Limit|
IMPORT |Image$$SBL1_UND_STACK$$ZI$$Limit|
IMPORT |Image$$SBL1_ABT_STACK$$ZI$$Limit|
IMPORT boot_undefined_instruction_c_handler ;导入了外部Symbol
IMPORT boot_swi_c_handler
IMPORT boot_prefetch_abort_c_handler
IMPORT boot_data_abort_c_handler
IMPORT boot_reserved_c_handler
IMPORT boot_irq_c_handler ;PBL传递来的中断请求参数
IMPORT boot_fiq_c_handler ;PBL传递来的快速中断请求参数
IMPORT boot_nested_exception_c_handler
IMPORT sbl1_main_ctl ;!注意此处!此处导入SBL1主要功能
IMPORT boot_crash_dump_regs_ptr

SBL1_MAIN_CTL

此部分主要做初始化DDR的工作
此部分源码位于boot_images/core/boot/secboot3/hw/<Part_Number>/sbl1/sbl1_mc.c

/* 初始化DDR部分 */
static boot_ram_init_data_type sbl1_ram_init_data_ddr =
{
  NULL,   //load_rw_base;
  NULL,  //image_rw_base;
  0,        //image_rw_len;
  (uint8*)&Image$$SBL1_DDR_ZI$$Base,  //image_zi_base;
  &Image$$SBL1_DDR_ZI$$ZI$$Length     //image_zi_len;
};
/* 初始化Logger部分,数据传送到SERIAL */
static uint32 sbl_start_time = 0;
static boot_log_init_data boot_log_data =
{
  (void *)SBL1_LOG_BUF_START,
  SBL1_LOG_BUF_SIZE,
  (void *)SBL1_LOG_META_INFO_START,
  SBL1_LOG_META_INFO_SIZE,
  NULL
};
/* 加载SBL1_Config_Table */
#define CPSR_EA_BIT     (1<<8)

extern boot_configuration_table_entry sbl1_config_table[];

SBL1_CONFIG_TABLE

此部分存储了ABL\TrustZone\RPM等Image的相关参数
此部分源码位于boot_images/core/boot/secboot3/hw/<Part_Number>/sbl1/sbl1_config.c

extern uint8 qsee_partition_id[]; //QSEE分区ID
extern uint8 rpm_partition_id[]; //Resource Power Manager分区ID
extern uint8 appsbl_partition_id[]; //Application Secondaty BootLoader分区ID
extern uint8 apdp_partition_id[]; //Debug Policy分区ID
extern uint8 devcfg_partition_id[]; //Trust Zone Config分区ID

boot_configuration_table_entry sbl1_config_table[];

此文就是一篇概览,也就是大概阅读了一下源码写下的随笔,同时由于惧怕高通的NDA,源码也不能放出太多,到此为止吧!

半夜睡不着,来列列我了解以及使用过的一些日系手机下载OS的办法
日系机均有各种写保护方法,恐怕安全启动没有开启,sahara或者firehose方法都是无法使用的

DMCA Warning, so deleted!

夏普

京瓷

富士通

B站真是越来越坑了,解析越来越难搞,抓到的链接也不能直接用,所以写了这个小程序,方便下载

#!/usr/bin/env python3
import sys
import ssl
import urllib.request


def report(count, blockSize, totalSize):
#下载进程显示
    downloadedSize = count * blockSize
    percent = int(downloadedSize * 100 / totalSize)
    sys.stdout.write(f"\r已下载: {downloadedSize} B, 共: {totalSize} B, {percent} % 已完成")
    sys.stdout.flush()


if __name__ == '__main__':
    ssl._create_default_https_context = ssl._create_unverified_context

    opener = urllib.request.build_opener()

    opener.addheaders = [
        ('Host', '*****.acgvideo.com'), #抓到的链接前面的服务器地址
        ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'),
        ('Accept', '*/*'),
        ('Accept-Language', 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2'),
        ('Accept-Encoding', 'gzip, deflate, br'),
        ('Referer', 'https://www.bilibili.com/*****'), #播放网页的URL
        ('Origin', 'https://www.bilibili.com'),
        ('Connection', 'keep-alive'),
    ]
    urllib.request.install_opener(opener)

    url = 'https://catched.url.bilibili.server.acgvideo.com' #最重要的抓到的链接
    urllib.request.urlretrieve(url, filename='*****.flv', reporthook=report) #保存的文件名

酌情使用,避免被封