最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Motorola加密SMG格式和标准cramfs格式之间转换和挂载(刷机必备)_

IT圈 admin 37浏览 0评论

2024年2月23日发(作者:商江)

Motorola加密SMG格式和标准cramfs格式之间转换和挂载(刷机必备)

一、.sbf转smg文件

下载SBF-Recalc_工具

然后运行将sbf转成smg文件。

二、smg转cramfs文件

刚开始在网上看到资料说,可以直接将smg挂载的,方式为:

1、 sudo apt-get install cramfsprogs

Ubuntu直接输入命令:

24位解包命令是: cramfsck -x XX

24位的打包 : mkcramfs XX

2、 sudo apt-get install squashfs-tools

smg解压命令是unsquashfs -d /usr/local/test -f /usr/local/

smg重新打包的命令是mksquashfs test -le

这里是先在/usr/local/下建一个test目录 把 也放在/usr/local下,执行那个解压命令后CG52里的东西就被释放到test里了。

但经过我测试后,发现以上两种凡是都不成功。

后来通过继续搜索资料发现:用 file *.smg可以查看文件的类型

查看发现大多都为data,然后继续搜索发现sgm文件是经过Moto特有的加密SMG格式。

所以,当我们分解CramFS格式的smg文件时,不能顺利的分解,其实这是moto等一些厂商对android的smg做了简单加密(其实就是换了格式并在header的起始点做了手脚),

幸好前人已释放出了如何进行转换的代码,这里做了修正以适合XT800的机器。

为方便linux用户,贴出代码,请自行编译程序。

smg转cramfs:

#include

#include

char *out = "./";

char *ou2 = "./out2";

int main( int argc, char* argv[] ) {

if ( argc != 2)

{

printf("Usage:%s n", argv[0] );

exit(-1);

}

FILE * f = fopen( argv[1], "rb" );

FILE * g = fopen( out, "wb" );

FILE * h = fopen( ou2, "wb" );

int v = 0;

char buffer[1024];

int i=0;

fread(buffer, 1, 0x38, f);

fwrite(buffer, 1, 0x38, h);

while(!feof(f))

{

fread(buffer, 1, 1024, f);

fwrite(buffer, 1, 1024, g);

for (i=0; i<1024/4; i++)

{

int *j = (int*)(buffer + 4 * i);

v += *j;

}

fread(buffer, 1, 8, f);

if (feof(f)) break;

fwrite(buffer, 1, 8, h);

}

fcloseall();

}

最后你会得到重新写的smg文件~这个已经被修正了header,由于linux文件系统的特殊性,最好在linux下挂载到文件进行修改。在win系统下的修改容易出现各种不明错误~

cramfs反写回smg代码:

#include

#include

int main(int argc, char* argv[]) {

if ( argc != 3)

{

printf("Usage:%s n", argv[0] );

exit(-1);

}

FILE * f = fopen( argv[1], "rb" );

FILE * g = fopen( argv[2], "wb" );

char *s =

"V100C1x02x01x00x00x00x00PAR1PAR2ABVOL0x00x00x00x00x00Zx00

x00FFFFx00x00x00x00x00x00x00x00";

fwrite(s, 1, 0x38, g);

int k = 0x02;

int i=0;

for (i=0; i<11694672; i++)

{

if (feof(f)) break; else fputc(fgetc(f), g);

if (i && ((i+1) % 0x400) == 0) {

fwrite(&k, 1, 4, g);

fputc(0, g);

fputc(0, g);

fputc(0, g);

fputc(0, g);

k += 2;

}

}

fputc(0, g);

fcloseall();

}

现在我们也可以生成MOTO的简单加密后格式的smg文件了。

2024年2月23日发(作者:商江)

Motorola加密SMG格式和标准cramfs格式之间转换和挂载(刷机必备)

一、.sbf转smg文件

下载SBF-Recalc_工具

然后运行将sbf转成smg文件。

二、smg转cramfs文件

刚开始在网上看到资料说,可以直接将smg挂载的,方式为:

1、 sudo apt-get install cramfsprogs

Ubuntu直接输入命令:

24位解包命令是: cramfsck -x XX

24位的打包 : mkcramfs XX

2、 sudo apt-get install squashfs-tools

smg解压命令是unsquashfs -d /usr/local/test -f /usr/local/

smg重新打包的命令是mksquashfs test -le

这里是先在/usr/local/下建一个test目录 把 也放在/usr/local下,执行那个解压命令后CG52里的东西就被释放到test里了。

但经过我测试后,发现以上两种凡是都不成功。

后来通过继续搜索资料发现:用 file *.smg可以查看文件的类型

查看发现大多都为data,然后继续搜索发现sgm文件是经过Moto特有的加密SMG格式。

所以,当我们分解CramFS格式的smg文件时,不能顺利的分解,其实这是moto等一些厂商对android的smg做了简单加密(其实就是换了格式并在header的起始点做了手脚),

幸好前人已释放出了如何进行转换的代码,这里做了修正以适合XT800的机器。

为方便linux用户,贴出代码,请自行编译程序。

smg转cramfs:

#include

#include

char *out = "./";

char *ou2 = "./out2";

int main( int argc, char* argv[] ) {

if ( argc != 2)

{

printf("Usage:%s n", argv[0] );

exit(-1);

}

FILE * f = fopen( argv[1], "rb" );

FILE * g = fopen( out, "wb" );

FILE * h = fopen( ou2, "wb" );

int v = 0;

char buffer[1024];

int i=0;

fread(buffer, 1, 0x38, f);

fwrite(buffer, 1, 0x38, h);

while(!feof(f))

{

fread(buffer, 1, 1024, f);

fwrite(buffer, 1, 1024, g);

for (i=0; i<1024/4; i++)

{

int *j = (int*)(buffer + 4 * i);

v += *j;

}

fread(buffer, 1, 8, f);

if (feof(f)) break;

fwrite(buffer, 1, 8, h);

}

fcloseall();

}

最后你会得到重新写的smg文件~这个已经被修正了header,由于linux文件系统的特殊性,最好在linux下挂载到文件进行修改。在win系统下的修改容易出现各种不明错误~

cramfs反写回smg代码:

#include

#include

int main(int argc, char* argv[]) {

if ( argc != 3)

{

printf("Usage:%s n", argv[0] );

exit(-1);

}

FILE * f = fopen( argv[1], "rb" );

FILE * g = fopen( argv[2], "wb" );

char *s =

"V100C1x02x01x00x00x00x00PAR1PAR2ABVOL0x00x00x00x00x00Zx00

x00FFFFx00x00x00x00x00x00x00x00";

fwrite(s, 1, 0x38, g);

int k = 0x02;

int i=0;

for (i=0; i<11694672; i++)

{

if (feof(f)) break; else fputc(fgetc(f), g);

if (i && ((i+1) % 0x400) == 0) {

fwrite(&k, 1, 4, g);

fputc(0, g);

fputc(0, g);

fputc(0, g);

fputc(0, g);

k += 2;

}

}

fputc(0, g);

fcloseall();

}

现在我们也可以生成MOTO的简单加密后格式的smg文件了。

发布评论

评论列表 (0)

  1. 暂无评论