CRC-Check
From Bettyhacks.com - Hack BettyTV-Remote
Die Betty Firmware prüft die Unversehrtheit der einzelnen Module (wie z.B. BOOT, FONT, BIOS, PROD, MAIN, GAME und WAVE) über proprietäre CRC-Prüfsummen.
Infos über CRC gibts hier: http://de.wikipedia.org/wiki/Cyclic_Redundancy_Check
Manipuliert man die Firmware, dann stimmt der berechnete Wert nicht mehr mit dem in der Firmware hinterlegten Referenzwert überein und die Betty verweigert ihren Dienst.
Mit folgender Funktion kann man sich gültige CRC Werte berechnen lassen:
DWORD CalculateBettyCrc(BYTE *Buffer, int Len)
{
//This is a special Betty Crc-Algo (Table and CrcInitValue)
DWORD Crc;
static const DWORD BETTY_CRC[256] =
{
0x00000000,0xAB414181,0xFDC2C383,0x56838202,
0x51C4C686,0xFA858707,0xAC060505,0x07474484,
0x09C9CC8C,0xA2888D0D,0xF40B0F0F,0x5F4A4E8E,
0x580D0A0A,0xF34C4B8B,0xA5CFC989,0x0E8E8808,
0xB9D3D898,0x12929919,0x44111B1B,0xEF505A9A,
0xE8171E1E,0x43565F9F,0x15D5DD9D,0xBE949C1C,
0xB01A1414,0x1B5B5595,0x4DD8D797,0xE6999616,
0xE1DED292,0x4A9F9313,0x1C1C1111,0xB75D5090,
0xD9E6F0B0,0x72A7B131,0x24243333,0x8F6572B2,
0x88223636,0x236377B7,0x75E0F5B5,0xDEA1B434,
0xD02F3C3C,0x7B6E7DBD,0x2DEDFFBF,0x86ACBE3E,
0x81EBFABA,0x2AAABB3B,0x7C293939,0xD76878B8,
0x60352828,0xCB7469A9,0x9DF7EBAB,0x36B6AA2A,
0x31F1EEAE,0x9AB0AF2F,0xCC332D2D,0x67726CAC,
0x69FCE4A4,0xC2BDA525,0x943E2727,0x3F7F66A6,
0x38382222,0x937963A3,0xC5FAE1A1,0x6EBBA020,
0x198CA0E0,0xB2CDE161,0xE44E6363,0x4F0F22E2,
0x48486666,0xE30927E7,0xB58AA5E5,0x1ECBE464,
0x10456C6C,0xBB042DED,0xED87AFEF,0x46C6EE6E,
0x4181AAEA,0xEAC0EB6B,0xBC436969,0x170228E8,
0xA05F7878,0x0B1E39F9,0x5D9DBBFB,0xF6DCFA7A,
0xF19BBEFE,0x5ADAFF7F,0x0C597D7D,0xA7183CFC,
0xA996B4F4,0x02D7F575,0x54547777,0xFF1536F6,
0xF8527272,0x531333F3,0x0590B1F1,0xAED1F070,
0xC06A5050,0x6B2B11D1,0x3DA893D3,0x96E9D252,
0x91AE96D6,0x3AEFD757,0x6C6C5555,0xC72D14D4,
0xC9A39CDC,0x62E2DD5D,0x34615F5F,0x9F201EDE,
0x98675A5A,0x33261BDB,0x65A599D9,0xCEE4D858,
0x79B988C8,0xD2F8C949,0x847B4B4B,0x2F3A0ACA,
0x287D4E4E,0x833C0FCF,0xD5BF8DCD,0x7EFECC4C,
0x70704444,0xDB3105C5,0x8DB287C7,0x26F3C646,
0x21B482C2,0x8AF5C343,0xDC764141,0x773700C0,
0x99590040,0x321841C1,0x649BC3C3,0xCFDA8242,
0xC89DC6C6,0x63DC8747,0x355F0545,0x9E1E44C4,
0x9090CCCC,0x3BD18D4D,0x6D520F4F,0xC6134ECE,
0xC1540A4A,0x6A154BCB,0x3C96C9C9,0x97D78848,
0x208AD8D8,0x8BCB9959,0xDD481B5B,0x76095ADA,
0x714E1E5E,0xDA0F5FDF,0x8C8CDDDD,0x27CD9C5C,
0x29431454,0x820255D5,0xD481D7D7,0x7FC09656,
0x7887D2D2,0xD3C69353,0x85451151,0x2E0450D0,
0x40BFF0F0,0xEBFEB171,0xBD7D3373,0x163C72F2,
0x117B3676,0xBA3A77F7,0xECB9F5F5,0x47F8B474,
0x49763C7C,0xE2377DFD,0xB4B4FFFF,0x1FF5BE7E,
0x18B2FAFA,0xB3F3BB7B,0xE5703979,0x4E3178F8,
0xF96C2868,0x522D69E9,0x04AEEBEB,0xAFEFAA6A,
0xA8A8EEEE,0x03E9AF6F,0x556A2D6D,0xFE2B6CEC,
0xF0A5E4E4,0x5BE4A565,0x0D672767,0xA62666E6,
0xA1612262,0x0A2063E3,0x5CA3E1E1,0xF7E2A060,
0x80D5A0A0,0x2B94E121,0x7D176323,0xD65622A2,
0xD1116626,0x7A5027A7,0x2CD3A5A5,0x8792E424,
0x891C6C2C,0x225D2DAD,0x74DEAFAF,0xDF9FEE2E,
0xD8D8AAAA,0x7399EB2B,0x251A6929,0x8E5B28A8,
0x39067838,0x924739B9,0xC4C4BBBB,0x6F85FA3A,
0x68C2BEBE,0xC383FF3F,0x95007D3D,0x3E413CBC,
0x30CFB4B4,0x9B8EF535,0xCD0D7737,0x664C36B6,
0x610B7232,0xCA4A33B3,0x9CC9B1B1,0x3788F030,
0x59335010,0xF2721191,0xA4F19393,0x0FB0D212,
0x08F79696,0xA3B6D717,0xF5355515,0x5E741494,
0x50FA9C9C,0xFBBBDD1D,0xAD385F1F,0x06791E9E,
0x013E5A1A,0xAA7F1B9B,0xFCFC9999,0x57BDD818,
0xE0E08888,0x4BA1C909,0x1D224B0B,0xB6630A8A,
0xB1244E0E,0x1A650F8F,0x4CE68D8D,0xE7A7CC0C,
0xE9294404,0x42680585,0x14EB8787,0xBFAAC606,
0xB8ED8282,0x13ACC303,0x452F4101,0xEE6E0080
};
Crc = 0xB770ED;//BettysCrcInitValue
while(Len > 0)
{
Crc= (Crc >> 8) ^ BETTY_CRC[(Crc ^ (*Buffer)) & 0xFF];
Buffer++;
Len--;
}
return(Crc);
}
