⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 header.c

📁 nbfdec是可以把PPC上的rom由nbf转换为nba文件工具,支持自动查询解密码。此为源码。
💻 C
字号:
#include "project.h"


static UCHAR rev_xlat_tbl[0x40] = 
	"yz98765432UVWXYZabcdKLMNOPQRSTopqrstuvwxefghijklmnABCDEFGHIJ10+/";

static UCHAR xlat_tbl[0x100];

VOID
HeaderCryptInit(
				VOID
				)
{
	SIZE_T i;
	memset(xlat_tbl, 0x2A, 0x80);
	for( i = 0; i < 64; ++i ) {
		xlat_tbl[rev_xlat_tbl[i]] = (UCHAR)i;
	}
}

VOID
HeaderDecrypt(
			  IN PVOID	p_src,
			  IN SIZE_T	cbSrc,
			  IN PVOID	p_dst,
			  IN SIZE_T	cbDst
			  )
{
	PUCHAR src = p_src;
	PUCHAR dst = p_dst;
	const SIZE_T cSrcBits = 6;
	const SIZE_T cDstBits = 8;
	SIZE_T	cBit = 0;
	memset( dst, 0, cbDst );
	while( ( cBit / cSrcBits ) < cbSrc && ( cBit / cDstBits ) < cbDst ) {
		BOOLEAN bit = !!( xlat_tbl[ src[ cBit / cSrcBits ] ] & ( 1 << ( (cSrcBits - 1) - ( cBit % cSrcBits ) ) ) );
		dst[ cBit / cDstBits ] |= ( bit << ( (cDstBits - 1) - ( cBit % cDstBits ) ) );
		++cBit;
	}
}

VOID
HeaderEncrypt(
			  IN PVOID 	p_src,
			  IN SIZE_T	cbSrc,
			  IN PVOID	p_dst,
			  IN SIZE_T	cbDst
			  )
{
	PUCHAR src = p_src;
	PUCHAR dst = p_dst;
	const SIZE_T cSrcBits = 8;
	const SIZE_T cDstBits = 6;
	SIZE_T	cBit = 0;
	memset( dst, 0, cbDst );
	while( ( cBit / cSrcBits ) < cbSrc && ( cBit / cDstBits ) < cbDst ) {
		BOOLEAN bit = !!( src[ cBit / cSrcBits ] & ( 1 << ( (cSrcBits - 1) - ( cBit % cSrcBits ) ) ) );
		dst[ cBit / cDstBits ] |= ( bit << ( (cDstBits - 1) - ( cBit % cDstBits ) ) );
		++cBit;
	}
	while( cbDst-- ) {
		*dst++ = rev_xlat_tbl[*dst];
	}
	*--dst = 0x3D;
}

VOID
HeaderDump(
		   IN PNBF_HEADER nbfHeader
		   )
{
#define PRINT_FIELD(x) printf(#x "=%.*s\n", sizeof(nbfHeader->##x), nbfHeader->##x);
	PRINT_FIELD(deviceId);
	PRINT_FIELD(cellOpName);
	PRINT_FIELD(language);
	PRINT_FIELD(firmwareVersion);
	PRINT_FIELD(deviceModelName);
	PRINT_FIELD(address0);
	PRINT_FIELD(address1);
	PRINT_FIELD(address2);
	PRINT_FIELD(crc32);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -