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文件了。