CRC32 exe giochi Teknoparrot
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
CRC32 exe giochi Teknoparrot
Teknoparrot ha un sistema di riconoscimento dei giochi utilizzando il CRC32 degli esegubili dei giochi stessi.
Purtroppo non sembra usare un CRC32 "classico" (come quello che si vede nei programmi di compressione tipo WinZIP, WinRAR, 7Z) ma un qualcosa di diverso che non riesco a comprendere viste le mie scarse competenze in programmazione.
qualcuno dei nostro programmatori (@motoschifo , @Gothrek , altri???) mi può dare una mano a come decodificarli?
qui https://github.com/teknogods/OpenParrot ... Detect.cpp trovate il metodo usato per l'identificazione GameDetect::DetectCurrentGame()
dove viene assegnato un valore alla variabile crcResult e attraverso un costrutto Switch viene identificato il gioco
il problema è che secondo me crcResult non contiene il CRC come noi lo conosciamo
il valore di crcResult viene assegnato attraverso una funzione GetCRC32 che trovate definita qua https://github.com/teknogods/OpenParrot ... /Utils.cpp
a complicare un po' le cose nel case deafult dello switch viene calcolata una variabile newCrcResult che è a sua volta sottoposta ad uno switch
questa nuova variabile è quella alla quale vorrebbero convertire tutti i metodi di identificazione, c'è infatti una nota:
// TODO: move all game detection bound to crcResult immediately below to use the newCrcResult switch at end with its new CRC instead.
riuscite a darmi una mano a risalire ai CRC dei file corretti?
Purtroppo non sembra usare un CRC32 "classico" (come quello che si vede nei programmi di compressione tipo WinZIP, WinRAR, 7Z) ma un qualcosa di diverso che non riesco a comprendere viste le mie scarse competenze in programmazione.
qualcuno dei nostro programmatori (@motoschifo , @Gothrek , altri???) mi può dare una mano a come decodificarli?
qui https://github.com/teknogods/OpenParrot ... Detect.cpp trovate il metodo usato per l'identificazione GameDetect::DetectCurrentGame()
dove viene assegnato un valore alla variabile crcResult e attraverso un costrutto Switch viene identificato il gioco
il problema è che secondo me crcResult non contiene il CRC come noi lo conosciamo
il valore di crcResult viene assegnato attraverso una funzione GetCRC32 che trovate definita qua https://github.com/teknogods/OpenParrot ... /Utils.cpp
a complicare un po' le cose nel case deafult dello switch viene calcolata una variabile newCrcResult che è a sua volta sottoposta ad uno switch
questa nuova variabile è quella alla quale vorrebbero convertire tutti i metodi di identificazione, c'è infatti una nota:
// TODO: move all game detection bound to crcResult immediately below to use the newCrcResult switch at end with its new CRC instead.
riuscite a darmi una mano a risalire ai CRC dei file corretti?
- Gothrek
- Moderatore
- Messaggi: 4905
- Iscritto il: 13/07/2017, 13:30
- Città: Roma
- Grazie Inviati: 17 volte
- Grazie Ricevuti: 272 volte
Re: CRC32 exe giochi Teknoparrot
te lo verifico, amche io uso una mia funzione crc32 nel gotscraper.
partiamo da capire qual'è il reale crc32 del file (mi serve il file), cosi lo compariamo. e da li andiamo a vedere come la calcola lui rispetto a come faccio io per esmpio.
partiamo da capire qual'è il reale crc32 del file (mi serve il file), cosi lo compariamo. e da li andiamo a vedere come la calcola lui rispetto a come faccio io per esmpio.
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
Re: CRC32 exe giochi Teknoparrot
Stasera cerco di farti avere uno degli eseguibili che ritengo essere corretti
Inviato dal mio ONEPLUS A5010 utilizzando Tapatalk
Inviato dal mio ONEPLUS A5010 utilizzando Tapatalk
Pucci - The Bastard Son of Arcade Italia
"MODerrare humanum est"
tutte le copertine di The Games Machine
non combatto guerre di intelligenza con gente disarmata
"MODerrare humanum est"
tutte le copertine di The Games Machine
non combatto guerre di intelligenza con gente disarmata
- Gothrek
- Moderatore
- Messaggi: 4905
- Iscritto il: 13/07/2017, 13:30
- Città: Roma
- Grazie Inviati: 17 volte
- Grazie Ricevuti: 272 volte
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
Re: CRC32 exe giochi Teknoparrot
@Gothrek ho caricato qui https://mega.nz/file/5YpA3YSR#5UhLJsb4b ... cyZS5xvnqg alcuni file exe di test
il nome del file exe è il CRC32 che si dovrebbe ottenere con i metodi di Teknoparrot
il nome del file exe è il CRC32 che si dovrebbe ottenere con i metodi di Teknoparrot
- Gothrek
- Moderatore
- Messaggi: 4905
- Iscritto il: 13/07/2017, 13:30
- Città: Roma
- Grazie Inviati: 17 volte
- Grazie Ricevuti: 272 volte
Re: CRC32 exe giochi Teknoparrot
eccoci, riporto la scansione fatta con programma di calcolo crc32 (valore in maiuscolo) e col mio gotscraper (valori in minuscolo). direi che il valore riportato non è un crc32 valido (e questo l'avevi già intuito).
A questo punto si potrebbe andar a vedere perchè da quei valori (il c++ non è il mio forte ma vediamo di uscirne son poche righe di codice):
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x19ba6a0c.exe - 7A877D2F - 7a877d2f
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x358ec3ff.exe - D4F7D10A - d4f7d10a
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x7cc54950.exe - 0CE2E9A3 - 0ce2e9a3
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x87670e0f.exe - 315E2C2A - 315e2c2a
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0xb8f2836d.exe - 052B44C9 - 052b44c9
A questo punto si potrebbe andar a vedere perchè da quei valori (il c++ non è il mio forte ma vediamo di uscirne son poche righe di codice):
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x19ba6a0c.exe - 7A877D2F - 7a877d2f
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x358ec3ff.exe - D4F7D10A - d4f7d10a
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x7cc54950.exe - 0CE2E9A3 - 0ce2e9a3
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0x87670e0f.exe - 315E2C2A - 315e2c2a
D:\Personale\ROMS\exe_test_with_teknoparrot_CRC32\0xb8f2836d.exe - 052B44C9 - 052b44c9
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
Re: CRC32 exe giochi Teknoparrot
si, questo lo sapevo, anche perchè il VERO crc32 lo si vede già dai file Zip o RAR delle rom.
Teknoparrot usa una specie di crc32 modificato, o meglio credo che calcoli il vero crc32 ma solo su una parte dell'eseguibile (per capirci, come quello che avviene con certe roms dove si calcola il crc32 escludendo l'header della rom).
Questo post l'ho aperto perchè il mio obiettivo è quello di avere un programma che mi calcoli i crc32 "modificati" di Teknoparrot
Mi basterebbe anche una programma con una piccola finestra dove fai drag & drop degli eseguibili e lui ti restituisce in una finestra il CRC32 "modificato" di Teknoparrot
Perchè voglio fare tutto questo? per capire quali eseguibili vuole Teknoparrot (dovrebbero essere quelli originali delle rom) e se si usano CRC32 non originali Teknoparrot non funziona (e questo non è aspetto secondario), mentre GameLoader ALLRH o JConfig funzionano anche con exe modificati
Se poi oltre a questo si potesse capire perché Teknoparrot calcola il crc32 in questo strano modo sarebbe sicuramente utile per recuperare romset "puliti"
Pensi che sia possibile realizzare il programma che ti ho detto?
Teknoparrot usa una specie di crc32 modificato, o meglio credo che calcoli il vero crc32 ma solo su una parte dell'eseguibile (per capirci, come quello che avviene con certe roms dove si calcola il crc32 escludendo l'header della rom).
Questo post l'ho aperto perchè il mio obiettivo è quello di avere un programma che mi calcoli i crc32 "modificati" di Teknoparrot
Mi basterebbe anche una programma con una piccola finestra dove fai drag & drop degli eseguibili e lui ti restituisce in una finestra il CRC32 "modificato" di Teknoparrot
Perchè voglio fare tutto questo? per capire quali eseguibili vuole Teknoparrot (dovrebbero essere quelli originali delle rom) e se si usano CRC32 non originali Teknoparrot non funziona (e questo non è aspetto secondario), mentre GameLoader ALLRH o JConfig funzionano anche con exe modificati
Se poi oltre a questo si potesse capire perché Teknoparrot calcola il crc32 in questo strano modo sarebbe sicuramente utile per recuperare romset "puliti"
Pensi che sia possibile realizzare il programma che ti ho detto?
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
Re: CRC32 exe giochi Teknoparrot
si potrebbe iniziare traducendo questo codice C++ in qualcosa di più usabile per chi non mastica troppo questo linguaggio
Codice: Seleziona tutto
uint32_t GetCRC32(const void* pData, int length)
{
uint32_t _crc = 0xFFFFFFFF;
unsigned char* pCur = (unsigned char*)pData;
int remaining = length;
for (; remaining--; ++pCur)
_crc = (_crc >> 8) ^ kCrc32Table[(_crc ^ *pCur) & 0xff];
return _crc ^ 0xFFFFFFFF;
}
static DWORD crc_32_tab[] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f,
0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2,
0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c,
0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423,
0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106,
0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d,
0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7,
0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa,
0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81,
0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84,
0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e,
0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55,
0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28,
0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f,
0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69,
0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc,
0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693,
0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d };
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
Re: CRC32 exe giochi Teknoparrot
visto che la funzione GetCRC32 viene chiamata in questo modo
penso che venga calcolato il crc32 solo sui primi 1024 (400 in esadecimale) byte dell'eseguibile
forse è fatto in questo strano modo per risparmiare tempo?
Codice: Seleziona tutto
uint32_t crcResult = GetCRC32(GetModuleHandle(nullptr), 0x400);
forse è fatto in questo strano modo per risparmiare tempo?
- pucci
- Moderatore
- Messaggi: 4772
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 62 volte
Re: CRC32 exe giochi Teknoparrot
questo invece è come viene calcolato il newcrc32
Codice: Seleziona tutto
// Craft CRC detection without virtual address
memcpy(newCrc, GetModuleHandle(nullptr), 0x400);
DWORD pePTR = *(DWORD*)(newCrc + 0x3C);
// Overwrite ImageBase with 8 bytes of 0
*(DWORD*)(newCrc + pePTR + 0x18) = 0x00000000;
*(DWORD*)(newCrc + pePTR + 0x18 + 4) = 0x00000000;
#ifdef _AMD64_
* (DWORD*)(newCrc + pePTR + 50) = 0x00000000;
#endif
* (DWORD*)(newCrc + pePTR + 54) = 0x00000000;
uint32_t newCrcResult = GetCRC32(newCrc, 0x400);