CRC-Check

From Bettyhacks.com - Hack BettyTV-Remote

Jump to: navigation, search

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);
}
Personal tools