?? decoder.c
字號:
#include <stdio.h>unsigned long DataDecode ( unsigned long k, unsigned char *data, int len ){ unsigned long newk; unsigned int c; newk=k; for ( c=0 ; c<len ; c++ ) { newk = (newk*0x41c64e71)+1; data[c] = data[c]^((newk>>16)&0xff); } return newk;}void extract_data ( char *fname, unsigned long offset, unsigned long len ){ unsigned char buf[1024]; FILE* fp_in, * fp_out; int k = 0; fp_in = fopen( "upgrade.bin","rb" ); fp_out = fopen( fname, "wb" ); if ( !fp_in || !fp_out ) { printf("Failed to open upgrade.bin for decoding.\n"); return; } fseek( fp_in, offset, SEEK_SET ); while ( len ) { int block_len; block_len = len>sizeof(buf) ? sizeof(buf) : len; block_len = fread( buf, 1, block_len, fp_in ); if ( block_len == 0 ) break; k = DataDecode( k, buf, block_len ); fwrite( buf, 1, block_len, fp_out ); len -= block_len; } fclose( fp_in ); fclose( fp_out );}int main(){extract_data("part_partition.img", 0x0005F0, 0x6A); // partition table extract_data("part_upgrade.img", 0x00065A, 0x43220); //upgrade extract_data("part_ngu.img", 0x04387A, 0x40); // ngu extract_data("part_firmware.img", 0x0438BA, 0x44F64); // firmware // Blank of 12 bytes (padding ??) extract_data("part_elf.img", 0x08882A, 0x4710); extract_data("part_usr.img", 0x08CF3A, 0x540000); //minixfs 1 extract_data("part_bios.img", 0x5CCF3A, 0x40000); extract_data("part_root.img", 0x60CF3A, 0x840000); //minixfs 2 return( 0 );}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -