📄 header.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 + -