Benvenuto Ospite,
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:
Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-
Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum
per utilizzare il Forum ed avere accesso a tutte le sezioni e poter aprire un tuo Topic, rispondere nelle varie discussioni, mandare o ricevere Messaggi Privati devi seguire pochi passaggi:
Leggi il nostro Regolamento -> PREMI QUI <-
Segui il link su come Iscriversi -> PREMI QUI <-
Ricordati di aggiornare l'Avatar usando una immagine che ti distingua nel Forum
CRC32 exe giochi Teknoparrot
- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 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: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 volte
- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 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: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 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);
-
Gothrek
- Moderatore
- Messaggi: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 volte
Re: CRC32 exe giochi Teknoparrot
@pucci
tradurre la funzione crc32 dal c++ non è un problema son poche righe di codice e portarlo in c# o altro sarà facile.
Ho provato a calcolarlo sui primi 1024 byte ma non torna, quindi meglio procedere a capire come lo fa. Non credo che sia per risparmiare tempo in quanto già il crc32 è un controllo sul file abbastanza blando per via del numero di collisioni e farlo solo una porzione di file aumenterebbe esponenzialmente tale rischio.
una volta capito come e su cosa lo calcola fare un programmino che chiedi non c'è nessun problema
tradurre la funzione crc32 dal c++ non è un problema son poche righe di codice e portarlo in c# o altro sarà facile.
Ho provato a calcolarlo sui primi 1024 byte ma non torna, quindi meglio procedere a capire come lo fa. Non credo che sia per risparmiare tempo in quanto già il crc32 è un controllo sul file abbastanza blando per via del numero di collisioni e farlo solo una porzione di file aumenterebbe esponenzialmente tale rischio.
una volta capito come e su cosa lo calcola fare un programmino che chiedi non c'è nessun problema
-
Gothrek
- Moderatore
- Messaggi: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 volte
Re: CRC32 exe giochi Teknoparrot
@pucci
ho convertito la funzione, a prescindere dal buffer (1024 o 4K che sia, parametro passato nella funzione) il risultato non cambia.
Questa la funzione convertita in c# che da il risultato in decimale (ma convertito in HEX continua a dare il crc32 giusto), quindi il problema non credo sia legato alla funzione:
ho convertito la funzione, a prescindere dal buffer (1024 o 4K che sia, parametro passato nella funzione) il risultato non cambia.
Questa la funzione convertita in c# che da il risultato in decimale (ma convertito in HEX continua a dare il crc32 giusto), quindi il problema non credo sia legato alla funzione:
Codice: Seleziona tutto
public static UInt32 GetCRC32_4(string FileName)
{
UInt32 _crc;
long StreamLength;
int BufferSize;
byte[] Buffer;
UInt32[] pTable = {
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 };
//1KB Buffer
BufferSize = 0x0400; //in teoria parametro passato quanto è richiamata la funzione
FileStream fs = new FileStream(FileName, FileMode.Open);
StreamLength = fs.Length;
_crc = 0xFFFFFFFF;
while (StreamLength > 0)
{
if (StreamLength < BufferSize)
{
BufferSize = (int)StreamLength;
}
Buffer = new byte[BufferSize];
fs.Read(Buffer, 0, BufferSize);
for (int i = 0; i < BufferSize; i++)
{
_crc = (_crc >> 8) ^ pTable[(_crc ^ Buffer[i]) & 0xFF]; // alternativa _crc = ((_crc & 0xFFFFFF00) / 0x100) & 0xFFFFFF ^ pTable[Buffer[i] ^ _crc & 0xFF];
}
StreamLength -= - BufferSize;
}
fs.Close();
_crc ^= 0xFFFFFFFF; //alternativa _crc = (-(_crc)) - 1; // !(_crc)
return (UInt32)_crc;
}
- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 volte
Re: CRC32 exe giochi Teknoparrot
Cercherò di capire meglio cosa non torna in questa funzione
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
- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 volte
Re: CRC32 exe giochi Teknoparrot
Il problema è che su Discord di Teknoparrot sono simpatici come la sabbia nelle mutande
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: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 volte
Re: CRC32 exe giochi Teknoparrot
secondo me la funzione va bene cosi come è, non so da dove prendi il valore con cui hai rinominato il file.
tu mi hai passato 5 file che NON andavano bene mi è parso di capire, puoi passarmene uno o due che invece vanno bene? vediamo se riesco ad aiutarti nell'analisi.
per la sabbia nelle mutande mi astgengo

- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 volte
Re: CRC32 exe giochi Teknoparrot
No, quelli che ti ho mandato andavano bene. È proprio questo il problema.
Sono convinto che il loro sistema di calcolo dei crc32 non usa il file normalmente calcolandone direttamente il crc32 ma prima ma lo manipola in qualche modo
Inviato dal mio ONEPLUS A5010 utilizzando Tapatalk
Sono convinto che il loro sistema di calcolo dei crc32 non usa il file normalmente calcolandone direttamente il crc32 ma prima ma lo manipola in qualche modo
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: 5626
- Iscritto il: 13/07/2017, 13:30
- Medaglie: 1
- Città: Roma
- Grazie Inviati: 20 volte
- Grazie Ricevuti: 321 volte
Re: CRC32 exe giochi Teknoparrot
allora devo poter vedere tutto il programma per capire cosa mandano "in pasto" al crc32. Una delle poche certezze che la funzione Getcrc32 fa regolarmente il suo dovere.
- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 volte
Re: CRC32 exe giochi Teknoparrot
il programma completo è qui: https://github.com/teknogods/OpenParrot
-
alucard
- Affezionato
- Messaggi: 279
- Iscritto il: 02/12/2017, 16:19
- Medaglie: 1
- Città: MotherEarth
- Grazie Inviati: 5 volte
- Grazie Ricevuti: 15 volte
Re: CRC32 exe giochi Teknoparrot
Scusate, solo per capire.
Diciamo che TP accetta o respinge un file in base ad un suo criterio.
Se si decodifica il suo criterio e lo si implementa in un tool, questo a sua volta darà gli stessi esiti di TP.
Se l’ok lo da un tool anziché TP, che comodità in più ci sarebbe? Il gioco va comunque scaricato.
Diciamo che TP accetta o respinge un file in base ad un suo criterio.
Se si decodifica il suo criterio e lo si implementa in un tool, questo a sua volta darà gli stessi esiti di TP.
Se l’ok lo da un tool anziché TP, che comodità in più ci sarebbe? Il gioco va comunque scaricato.
- pucci
- Moderatore
- Messaggi: 4934
- Iscritto il: 19/07/2005, 18:52
- Città: San Clemente (RN)
- Località: Rimini
- Grazie Ricevuti: 70 volte
Re: CRC32 exe giochi Teknoparrot
Ho una certa riluttanza ad usare Teknoparrot
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