descifrar texto

Iniciado por xor.pt, 22 Agosto 2017, 18:08 PM

0 Miembros y 1 Visitante están viendo este tema.

xor.pt

Hola a todos

Tengo un gran desafío en la mano

 A continuación, resolví LuksCrypto en Linux, puedo montar el volumen protegido, he descompilado código con éxito.

Pero en la descompilación es de ELF binario para C, y no entiendo mucho C.


Necesito encontrar rutina cifra descifra un contenido de dongle rockey4nd.

FF 02 30 E4 56 9A 8A DF F1 0F 6B 9D A8 16 F7 3B 3B DD 7C 88 E9 3A 86 7E 06 EF E3 CE
C2 4E 0A 5C 1B 1A EF 1E C6 3A 45 86 54 F8 8D AC 4A 19 D3 D8 C3 8C 00 00 00 00 00 00 00

The AES key was encrypted
en vez de

256 bits:
Sal = 263BC60258FF4876
Chave = B374A26A71490437AA024E4FADD5B497FDFF1A8EA6FF12F6FB65AF2720B59CCF
Iv = 7E892875A52C59A3B588306B13C31FBD

esta .
'$jhksdvjsfoiut9085-0t598gdsfgipoei-0fgb9dfk;l-hk0dgkhrlthkry;hyhk'
'pokhprooh,q$',0Ah,0

'$welkgptrgoee-09kglsgm,ogisdg09rltgk-s0df9hrdskgj09dfgdsfuihg09et'

';ldfkbdd$',0Ah,0



Encontré una región muy sospechosa.

Parece estar leyendo un archivo, y usando el cifrado.

¿Sera justamente la memoria dongle?

¿Algún amigo me da una idea?

int32_t function_8048c80(int32_t path, int32_t a2, void (**a3)(int32_t)) {
   char * exec_argv[1]; // 0x8049002
   char * envp[1]; // 0x8049002
   int32_t v1;
   char v2 = v1; // bp-224
   int32_t v3 = *(int32_t *)20; // 0x8048ca4
   int32_t result; // 0x804906e
   if (path == 0) {
       // 0x8049030
       // branch -> 0x804900a
       // 0x804900a
       if (*(int32_t *)20 == v3) {
           // 0x804901a
           return -1;
       }
       // 0x8049056
       __stack_chk_fail();
       // branch -> 0x804905b
       // 0x804905b
       usleep(10);
       result = shm_unlink((char *)&g30);
       _exit(0);
       return result;
   }
   // 0x8048cbe
   signal(SIGINT, (void (**)(int32_t))function_8048c60);
   signal(SIGTERM, (void (**)(int32_t))function_8048c60);
   signal(SIGKILL, (void (**)(int32_t))function_8048c60);
   signal(SIGQUIT, (void (**)(int32_t))function_8048c60);
   signal(SIGSTOP, 0x8048c30);
   int32_t fd = open((char *)path, O_RDONLY);
   g2 = fd;
   if (fd >= 0) {
       // 0x8048d3c
       int32_t v4;
       __fxstat(3, fd, (struct stat *)&v4);
       uint32_t v5;
       if (v5 >= 29) {
           // 0x8048d61
           g3 = &v2;
           lseek(g2, v5 - 29, SEEK_SET);
           if (read(g2, (char *)g3, 29) == 29) {
               // 0x8048d9c
               if (function_8048b90((char *)g3, 0) == 0) {
                   // 0x8048db4
                   if (v2 == 1) {
                       int32_t v6 = -0x5050506;
                       int32_t offset;
                       lseek(g2, offset, SEEK_SET);
                       int32_t buf = 0;
                       if (read(g2, (char *)&buf, 4) == 4) {
                           int32_t v7 = &v6; // ebx
                           int32_t v8;
                           int32_t v9 = &v8; // 0x8048e69_0
                           srandom(buf);
                           *(char *)v7 = (char)random();
                           int32_t v10 = v7 + 1; // 0x8048e7f
                           v7 = v10;
                           // branch -> 0x8048e78
                           while (v10 != v9) {
                               // 0x8048e78
                               *(char *)v7 = (char)random();
                               v10 = v7 + 1;
                               v7 = v10;
                               // continue -> 0x8048e78
                           }
                           int32_t v11 = random(); // 0x8048e86
                           __sprintf_chk((char *)&g30, 1, 32, "ep-%ud", v11);
                           uint32_t fd2 = shm_open((char *)&g30, 578, S_IRWXU); // 0x8048eca
                           if (fd2 >= 0) {
                               // 0x8048edb
                               int32_t offset2;
                               int32_t v12 = g7 - offset2; // 0x8048edb
                               v7 = v12 - 29;
                               if (ftruncate(fd2, v12 + 3) < 0) {
                                   // 0x8049030
                                   // branch -> 0x804900a
                                   // 0x804900a
                                   if (*(int32_t *)20 == v3) {
                                       // 0x804901a
                                       return -1;
                                   }
                                   // 0x8049056
                                   __stack_chk_fail();
                                   // branch -> 0x804905b
                                   // 0x804905b
                                   usleep(10);
                                   result = shm_unlink((char *)&g30);
                                   _exit(0);
                                   return result;
                               }
                               // 0x8048f00
                               lseek(g2, offset2, SEEK_SET);
                               int32_t v13 = v7; // 0x8048f25
                               if (v7 < 0) {
                                   // if_8048f20_0_true
                                   v13 = v12 - 14;
                                   // branch -> after_if_8048f20_0
                               }
                               // after_if_8048f20_0
                               g7 = 0;
                               g3 = v9;
                               int32_t fd3; // 0x8048fd6
                               int32_t v14; // 0x8048fdf
                               int32_t result2; // 0x8049024_2
                               int32_t v15;
                               if (v13 < 16) {
                                   // 0x8048fab
                                   close(g2);
                                   close(fd2);
                                   fd3 = shm_open((char *)&g30, O_RDONLY, S_IRWXU);
                                   v14 = vfork();
                                   if (v14 < 0) {
                                       // 0x8049037
                                       close(fd3);
                                       shm_unlink((char *)&g30);
                                       result2 = -1;
                                       // branch -> 0x804900a
                                   } else {
                                       // 0x8048fe9
                                       if (v14 == 0) {
                                           // 0x804905b
                                           usleep(10);
                                           result = shm_unlink((char *)&g30);
                                           _exit(0);
                                           return result;
                                       }
                                       // 0x8048feb
                                       exec_argv[0] = (char *)a3;
                                       envp[0] = (char *)v15;
                                       result2 = fexecve(fd3, exec_argv, envp) / 256 % 256;
                                       // branch -> 0x804900a
                                   }
                                   // 0x804900a
                                   if (*(int32_t *)20 == v3) {
                                       // 0x804901a
                                       return result2;
                                   }
                                   // 0x8049056
                                   __stack_chk_fail();
                                   // branch -> 0x804905b
                                   // 0x804905b
                                   usleep(10);
                                   result = shm_unlink((char *)&g30);
                                   _exit(0);
                                   return result;
                               }
                               // 0x8048f40
                               // branch -> 0x8048f40
                               while (true) {
                                   // 0x8048f40
                                   g5 = v9;
                                   memset((char *)&v8, 0, 32);
                                   if (read(g2, (char *)g3, 16) >= 1) {
                                       int32_t * v16 = (int32_t *)g3;
                                       function_8049080(v16, v16, 16, (char *)&v6, 0);
                                       write(fd2, (char *)g3, 16);
                                       // branch -> 0x8048fa2
                                   }
                                   int32_t v17 = g7 + 1; // 0x8048fa2
                                   g7 = v17;
                                   if (v17 == v13 / 16) {
                                       // break -> 0x8048fab
                                       break;
                                   }
                                   // continue -> 0x8048f40
                               }
                               // 0x8048fab
                               close(g2);
                               close(fd2);
                               fd3 = shm_open((char *)&g30, O_RDONLY, S_IRWXU);
                               v14 = vfork();
                               if (v14 < 0) {
                                   // 0x8049037
                                   close(fd3);
                                   shm_unlink((char *)&g30);
                                   result2 = -1;
                                   // branch -> 0x804900a
                               } else {
                                   // 0x8048fe9
                                   if (v14 == 0) {
                                       // 0x804905b
                                       usleep(10);
                                       result = shm_unlink((char *)&g30);
                                       _exit(0);
                                       return result;
                                   }
                                   // 0x8048feb
                                   exec_argv[0] = (char *)a3;
                                   envp[0] = (char *)v15;
                                   result2 = fexecve(fd3, exec_argv, envp) / 256 % 256;
                                   // branch -> 0x804900a
                               }
                               // 0x804900a
                               if (*(int32_t *)20 == v3) {
                                   // 0x804901a
                                   return result2;
                               }
                               // 0x8049056
                               __stack_chk_fail();
                               // branch -> 0x804905b
                               // 0x804905b
                               usleep(10);
                               result = shm_unlink((char *)&g30);
                               _exit(0);
                               return result;
                           }
                       }
                   }
               }
           }
       }
       // 0x8049028
       close(g2);
       // branch -> 0x8049030
   }
   // 0x8049030
   // branch -> 0x804900a
   // 0x804900a
   if (*(int32_t *)20 == v3) {
       // 0x804901a
       return -1;
   }
   // 0x8049056
   __stack_chk_fail();
   // branch -> 0x804905b
   // 0x804905b
   usleep(10);
   result = shm_unlink((char *)&g30);
   _exit(0);
   return result;
}



Los códigos deben ir en etiquetas GeSHi