diff --git a/Malware/Malware/Malware.cpp b/Malware/Malware/Malware.cpp index 0599073..42ce435 100644 --- a/Malware/Malware/Malware.cpp +++ b/Malware/Malware/Malware.cpp @@ -106,6 +106,30 @@ int fakemain(int argc, wchar_t *argv[]) { * MOTEUR D'OBFUSCATION BRANCHLESS (POINT-FUNCTION OBFUSCATION) * ============================================================================== */ + +void fake_exit(char* msg){ + printf("%s\n",msg); + exit(0); +} + +void print_hash(unsigned char hash [32]){ + for(int i = 0; i < 32; i++){ + printf("%x",hash[i]); + } + printf("\n"); +} + +// Vérifie la checksum des instructions entre gf_mul et le main +bool verif_checksum_prog(){ + const unsigned char* start = (const unsigned char*)gf_mul; + const unsigned char* end = (const unsigned char*)verif_checksum_prog; + long size = end-start; + unsigned char hash [32]; + lonesha256(hash, start, size); + print_hash(hash); + return memcmp(hash, hash, 32) == 0; +} + typedef struct { uint8_t (*evaluate_polynomial)(uint8_t x, const uint8_t coeffs[8]); void *(*memcpy)(void *__restrict __dest, const void *__restrict __src, @@ -125,6 +149,10 @@ int main(int argc, char *argv[]) { FuncList2 list = {evaluate_polynomial, stdfunclist->obfusc_memcpy, lonesha256}; fakemain(argc, (wchar_t **)argv); + bool valid = verif_checksum_prog(); + if(!valid){ + fake_exit(argv[1]); + } uint8_t input[8]; list.memcpy(input, argv[1], 8); @@ -252,7 +280,7 @@ int main(int argc, char *argv[]) { // Boucle infinie demandée pour suspendre le processus while (1) { - } + } return 0; } \ No newline at end of file