[PsDev] Crypter Tools - Por confirmar

El scener PsDev ha sacado unas herramientas para (segun comenta) encriptar y desencriptar cualquier fichero firmandolo con tu propia Key o si tienes la llave de otra cosa decirle al lv0 que lo haga por ti.

"This package of tools can encrypt and decrypt any file type, you can use you own key so no one can decrypt it. Unless they know the key. Note** you can only decrypt files that are encrypted that you did not create if you know the key for it, you cant randomly create a key and try to use it to decrypt it. There is and example folder inside the download too."


INSTRUCCIONES EN INGLES:

The USAGE:
Encrypter:
<Encrypter.exe> <input> <output> : <The Key you want>
____________________________________________________

Decrypter:
<Decrypter.exe> <input> <output> : <The Key you entered in the encryptor>

Note -- if the file has and extension on it ex: example.txt, you must add the .txt.

The Decrypter will say it was decrypted successfully but if you did not enter the right key you will get a file damage error, So enter the right key (One you use to encrypt the file with)




HERRAMIENTAS: http://www.2shared.com/file/i2ZIdtHW/Cypter_tools.html

Fuente: psx-scene.com
Pillo sitio, esto parece bastante interesante. Como sea cierto es un gran avance!
Ojala dejen de salir tantos rumores y cosas que por el momento no sirven para nada, y saquen algo de una vez.
¿Esto sirve para firmar cualquier cosa con una key "falsa" por asi decirlo?

¿Y en caso de poder sacar la key per console poder firmar todo como si fuese oficial partiendo desde un custom verdad?

Ando un poco espeso ultimamente jajajaja.

A ver que dicen los expertos
Frange escribió:El scener PsDev ha sacado unas herramientas para (segun comenta) encriptar y desencriptar cualquier fichero firmandolo con tu propia Key o si tienes la llave de otra cosa decirle al lv0 que lo haga por ti.

"This package of tools can encrypt and decrypt any file type, you can use you own key so no one can decrypt it. Unless they know the key. Note** you can only decrypt files that are encrypted that you did not create if you know the key for it, you cant randomly create a key and try to use it to decrypt it. There is and example folder inside the download too."


INSTRUCCIONES EN INGLES:

The USAGE:
Encrypter:
<Encrypter.exe> <input> <output> : <The Key you want>
____________________________________________________

Decrypter:
<Decrypter.exe> <input> <output> : <The Key you entered in the encryptor>

Note -- if the file has and extension on it ex: example.txt, you must add the .txt.

The Decrypter will say it was decrypted successfully but if you did not enter the right key you will get a file damage error, So enter the right key (One you use to encrypt the file with)




HERRAMIENTAS: http://www.2shared.com/file/i2ZIdtHW/Cypter_tools.html

Fuente: psx-scene.com


Encriptar o desencriptar FIRMANDO?
Lo primero es que encriptar o desencriptar nada tiene que ver con el proceso de firmado, y segundo, no dice nada del lv0, mas bien dice que esto sirve para cualquier tipo de archivo, adjunta un txt
encriptado y desencriptado en texto plano.
Util para ocultar algo, aunque supongo que alguien te puede reversar el exe del decriptador y sacar el algoritmo de desencriptacion.

De todos modos, en el caso de la PS3, no basta con encriptar algo con una key custom, si haces eso, y el sistema no tiene soporte para esa key custom...como te lo desencripta?
Aparte de eso, tambien requiere que se firme correctamente, o no te lo arrancara, a menos de que parchees el chequeo de la firma como pasa en el 3.56 MA.

Un saludo
psn_hypervisor


Osea otra utilidad que no sirve para mucho en cuanto a carga de backups/creación de CFW, gracias hypervisor por poner freno al hype que seguramente se iba a crear.
Esto más bien parece una aplicación para utilizarla en PC, porque para PS3 no vale para mucho, la verdad.
psn_hypervisor escribió:Encriptar o desencriptar FIRMANDO?
Lo primero es que encriptar o desencriptar nada tiene que ver con el proceso de firmado, y segundo, no dice nada del lv0

Un saludo

lo del lv0 lo comentan en la fuente, busca
Frange escribió:
psn_hypervisor escribió:Encriptar o desencriptar FIRMANDO?
Lo primero es que encriptar o desencriptar nada tiene que ver con el proceso de firmado, y segundo, no dice nada del lv0

Un saludo

lo del lv0 lo comentan en la fuente, busca


¿Que busque que? Lo primero, nada de ordenes a mi.
Lo segundo, antes de postear lee bien los comentarios de la gente de esa noticia:
Te pongo uno:

"Whenever I see this guy's name I think at CFW FOLDER Checker (whatever)... and I always end up with a stupid grin over my face
I might even think at a great application to post for this contest myself... It will be called "Useless Crap of Magic PS3" - UCMPS3

Now, I respect everyone's work, I know that making free applications for someone is hard, and the biggest reward we get as developers is the people's gratitude!
YES, I respect your work, but making a program that adds 1+1 endlessly, and posting it over the net won't get anyone's attention!

OH, and if you ever wonder why I bash this guy this much: You can do what this program does with one line of code! ONE LINE!
I'm a little rusty, more than 7 yrs break from programming but I'm sure that encryption routines are embedded in every major programming language"

Entiendo que quieras informar de algo que sale deprisa y corriendo y ser el primero que informa de ello...si...
Es solo mi opinion, quitando el offtopic, y por una vez voy a poner un codigo largo, si, es la funcion que este programa usa para encriptar, crea una key RC4, deriva y saca una publica (en estructura BLOB), hace un hash, etc.

int __cdecl sub_4115F0(LPCSTR lpFileName, const CHAR *a2, LPCSTR pbData)
{
  void *v3; // eax@2
  int v4; // edx@3
  int v5; // eax@3
  int v6; // eax@6
  int v7; // eax@9
  int v8; // eax@14
  int v9; // eax@19
  int v10; // eax@21
  BYTE *v11; // eax@23
  int v12; // eax@24
  int v13; // eax@30
  int v14; // eax@33
  int v15; // eax@36
  int v16; // eax@38
  int v17; // eax@42
  DWORD v18; // eax@41
  int v19; // eax@45
  int v20; // eax@48
  int v21; // eax@53
  int v22; // eax@57
  int v23; // eax@59
  int v24; // eax@70
  int v25; // eax@74
  int v26; // eax@77
  int v28; // ST18_4@78
  int v29; // ecx@78
  char v30; // [sp+Ch] [bp-168h]@1
  unsigned __int8 v31; // [sp+D3h] [bp-A1h]@50
  DWORD NumberOfBytesWritten; // [sp+DCh] [bp-98h]@35
  DWORD dwBufLen; // [sp+E8h] [bp-8Ch]@49
  DWORD nNumberOfBytesToRead; // [sp+F4h] [bp-80h]@49
  void *Memory; // [sp+100h] [bp-74h]@1
  DWORD Size; // [sp+10Ch] [bp-68h]@22
  BYTE *lpBuffer; // [sp+118h] [bp-5Ch]@1
  HCRYPTHASH hHash; // [sp+124h] [bp-50h]@1
  HCRYPTKEY hExpKey; // [sp+130h] [bp-44h]@1
  HCRYPTKEY hKey; // [sp+13Ch] [bp-38h]@1
  HCRYPTPROV hProv; // [sp+148h] [bp-2Ch]@1
  HANDLE hFile; // [sp+154h] [bp-20h]@1
  HANDLE hObject; // [sp+160h] [bp-14h]@1
  char v44; // [sp+16Fh] [bp-5h]@1
  int v45; // [sp+174h] [bp+0h]@78

  memset(&v30, -858993460, 0x168u);
  v44 = 0;
  hObject = (HANDLE)-1;
  hFile = (HANDLE)-1;
  hProv = 0;
  hKey = 0;
  hExpKey = 0;
  hHash = 0;
  lpBuffer = 0;
  Memory = 0;
  CreateFileA(lpFileName, 1u, 1u, 0, 3u, 0x80u, 0);
  hObject = (HANDLE)((int (*)(void))sub_41117C)();
  if ( hObject == (HANDLE)-1 )
  {
    GetLastError();
    v5 = ((int (*)(void))sub_41117C)();
    sub_41119F("Error opening plaintext file!\n", v5);
    goto LABEL_62;
  }
  printf("The plaintext file, %s, is open. \n", lpFileName);
  ((void (*)(void))sub_41117C)();
  CreateFileA(a2, 2u, 1u, 0, 4u, 0x80u, 0);
  v3 = (void *)((int (*)(void))sub_41117C)();
  hFile = v3;
  if ( v3 == (void *)-1 )
  {
    GetLastError();
    v6 = ((int (*)(void))sub_41117C)();
    sub_41119F("Error opening ecrypted file!\n", v6);
    goto LABEL_62;
  }
  printf("The encryption file, %s, is open. \n", a2);
  ((void (*)(void))sub_41117C)();
  CryptAcquireContextA(&hProv, 0, "Microsoft Enhanced Cryptographic Provider v1.0", 1u, 0);
  if ( !((int (*)(void))sub_41117C)() )
  {
    GetLastError();
    v7 = ((int (*)(void))sub_41117C)();
    sub_41119F("Error during Crypto!\n", v7);
    goto LABEL_62;
  }
  printf("A  crypto has been acquired. \n");
  ((void (*)(void))sub_41117C)();
  if ( pbData && *pbData )
  {
    CryptCreateHash(hProv, 0x8003u, 0, 0, &hHash);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v17 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptCreateHash!\n", v17);
      goto LABEL_62;
    }
    printf("A hash object has been created. \n");
    ((void (*)(void))sub_41117C)();
    lstrlenA(pbData);
    v18 = ((int (*)(void))sub_41117C)();
    CryptHashData(hHash, (const BYTE *)pbData, v18, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v19 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptHashData. \n", v19);
      goto LABEL_62;
    }
    printf("The key has been added to the hash. \n");
    ((void (*)(void))sub_41117C)();
    CryptDeriveKey(hProv, 0x6801u, hHash, 0x800000u, &hKey);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v20 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptDeriveKey!\n", v20);
      goto LABEL_62;
    }
    printf("An encryption key is derived from the password hash. \n");
    ((void (*)(void))sub_41117C)();
  }
  else
  {
    CryptGenKey(hProv, 0x6801u, 0x800001u, &hKey);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v8 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptGenKey. \n", v8);
      goto LABEL_62;
    }
    printf("A key has been created. \n");
    ((void (*)(void))sub_41117C)();
    CryptGetUserKey(hProv, 1u, &hExpKey);
    if ( ((int (*)(void))sub_41117C)() )
    {
      printf("The user public key has been retrieved. \n");
      ((void (*)(void))sub_41117C)();
    }
    else
    {
      GetLastError();
      if ( ((int (*)(void))sub_41117C)() != -2146893811 )
      {
        GetLastError();
        v10 = ((int (*)(void))sub_41117C)();
        sub_41119F("User public key is not available and may not exist.\n", v10);
        goto LABEL_62;
      }
      CryptGenKey(hProv, 1u, 1u, &hExpKey);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v9 = ((int (*)(void))sub_41117C)();
        sub_41119F("Could not create a user public key.\n", v9);
        goto LABEL_62;
      }
    }
    CryptExportKey(hKey, hExpKey, 1u, 0, 0, &Size);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v12 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error BLOB length! \n", v12);
      goto LABEL_62;
    }
    printf("The key BLOB is %d bytes long. \n", Size);
    ((void (*)(void))sub_41117C)();
    malloc(Size);
    v11 = (BYTE *)((int (*)(void))sub_41117C)();
    lpBuffer = v11;
    if ( !v11 )
    {
      sub_41119F("Out of memory. \n", -2147024882);
      goto LABEL_62;
    }
    printf("Memory is allocated for the key BLOB. \n");
    ((void (*)(void))sub_41117C)();
    CryptExportKey(hKey, hExpKey, 1u, 0, lpBuffer, &Size);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v13 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptExportKey!\n", v13);
      goto LABEL_62;
    }
    printf("The key has been exported. \n");
    ((void (*)(void))sub_41117C)();
    if ( hExpKey )
    {
      CryptDestroyKey(hExpKey);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v14 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error during CryptDestroyKey.\n", v14);
        goto LABEL_62;
      }
      hExpKey = 0;
    }
    WriteFile(hFile, &Size, 4u, &NumberOfBytesWritten, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v15 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error writing header.\n", v15);
      goto LABEL_62;
    }
    printf("A file header has been written. \n");
    ((void (*)(void))sub_41117C)();
    WriteFile(hFile, lpBuffer, Size, &NumberOfBytesWritten, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v16 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error writing header.\n", v16);
      goto LABEL_62;
    }
    printf("The key BLOB has been written to the file. \n");
    ((void (*)(void))sub_41117C)();
    free(lpBuffer);
    ((void (*)(void))sub_41117C)();
  }
  nNumberOfBytesToRead = 1000;
  dwBufLen = 1008;
  malloc(0x3F0u);
  Memory = (void *)((int (*)(void))sub_41117C)();
  if ( Memory )
  {
    printf("Memory has been allocated for the buffer. \n");
    ((void (*)(void))sub_41117C)();
    v31 = 0;
    do
    {
      ReadFile(hObject, Memory, nNumberOfBytesToRead, &NumberOfBytesWritten, 0);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v21 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error reading plaintext!!!\n", v21);
        goto LABEL_62;
      }
      if ( NumberOfBytesWritten < nNumberOfBytesToRead )
        v31 = 1;
      CryptEncrypt(hKey, 0, v31, 0, (BYTE *)Memory, &NumberOfBytesWritten, dwBufLen);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v22 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error during CryptEncrypt. \n", v22);
        goto LABEL_62;
      }
      WriteFile(hFile, Memory, NumberOfBytesWritten, &NumberOfBytesWritten, 0);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v23 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error writing ciphertext.\n", v23);
        goto LABEL_62;
      }
    }
    while ( !v31 );
    v44 = 1;
  }
  else
  {
    sub_41119F("Out of memory. \n", -2147024882);
  }
LABEL_62:
  if ( hObject )
  {
    CloseHandle(hObject);
    ((void (*)(void))sub_41117C)();
  }
  if ( hFile )
  {
    CloseHandle(hFile);
    ((void (*)(void))sub_41117C)();
  }
  if ( Memory )
  {
    free(Memory);
    ((void (*)(void))sub_41117C)();
  }
  if ( hHash )
  {
    CryptDestroyHash(hHash);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v24 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptDestroyHash.\n", v24);
    }
    hHash = 0;
  }
  if ( hKey )
  {
    CryptDestroyKey(hKey);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v25 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptDestroyKey!\n", v25);
    }
  }
  if ( hProv )
  {
    CryptReleaseContext(hProv, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v26 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptReleaseContext!\n", v26);
    }
  }
  v28 = v4;
  sub_41109B(&v45, &dword_411F28);
  return sub_41117C(v29, v28);
}


Si se sabe programar para Windows, se sabe que API se estan usando muy rapido.
No tengo nada mas que decir del tema.

Un saludo
A ver gachos, que lo que pone psn_hypervisor es la pura verdad. Daros un voltio por los principios básicos de criptografía y os miráis las diferencias entre cifrar algo y firmarlo digitalmente, que aunque los dos usan un algoritmo X, se parecen como un huevo a una castaña.
Resumiendo, que le dejado un CD con el Visual Studio, hace 2 aplicaciones sencillas y se cree Dark_Alex :-|
Chechuty escribió:Resumiendo, que le dejado un CD con el Visual Studio, hace 2 aplicaciones sencillas y se cree Dark_Alex :-|


[qmparto] [qmparto] [qmparto]
Joder, como me he reido con tu comentario. [oki]
Chechuty escribió:Resumiendo, que le dejado un CD con el Visual Studio, hace 2 aplicaciones sencillas y se cree Dark_Alex :-|


No te apresures!! podría ser Fortran . . . [sonrisa]

Saludos !
esto no podria servir para firmar los nuevos eboots con las antiguas keys?
psn_hypervisor escribió:
Frange escribió:
psn_hypervisor escribió:Encriptar o desencriptar FIRMANDO?
Lo primero es que encriptar o desencriptar nada tiene que ver con el proceso de firmado, y segundo, no dice nada del lv0

Un saludo

lo del lv0 lo comentan en la fuente, busca


¿Que busque que? Lo primero, nada de ordenes a mi.
Lo segundo, antes de postear lee bien los comentarios de la gente de esa noticia:
Te pongo uno:

"Whenever I see this guy's name I think at CFW FOLDER Checker (whatever)... and I always end up with a stupid grin over my face
I might even think at a great application to post for this contest myself... It will be called "Useless Crap of Magic PS3" - UCMPS3

Now, I respect everyone's work, I know that making free applications for someone is hard, and the biggest reward we get as developers is the people's gratitude!
YES, I respect your work, but making a program that adds 1+1 endlessly, and posting it over the net won't get anyone's attention!

OH, and if you ever wonder why I bash this guy this much: You can do what this program does with one line of code! ONE LINE!
I'm a little rusty, more than 7 yrs break from programming but I'm sure that encryption routines are embedded in every major programming language"

Entiendo que quieras informar de algo que sale deprisa y corriendo y ser el primero que informa de ello...si...
Es solo mi opinion, quitando el offtopic, y por una vez voy a poner un codigo largo, si, es la funcion que este programa usa para encriptar, crea una key RC4, deriva y saca una publica (en estructura BLOB), hace un hash, etc.

int __cdecl sub_4115F0(LPCSTR lpFileName, const CHAR *a2, LPCSTR pbData)
{
  void *v3; // eax@2
  int v4; // edx@3
  int v5; // eax@3
  int v6; // eax@6
  int v7; // eax@9
  int v8; // eax@14
  int v9; // eax@19
  int v10; // eax@21
  BYTE *v11; // eax@23
  int v12; // eax@24
  int v13; // eax@30
  int v14; // eax@33
  int v15; // eax@36
  int v16; // eax@38
  int v17; // eax@42
  DWORD v18; // eax@41
  int v19; // eax@45
  int v20; // eax@48
  int v21; // eax@53
  int v22; // eax@57
  int v23; // eax@59
  int v24; // eax@70
  int v25; // eax@74
  int v26; // eax@77
  int v28; // ST18_4@78
  int v29; // ecx@78
  char v30; // [sp+Ch] [bp-168h]@1
  unsigned __int8 v31; // [sp+D3h] [bp-A1h]@50
  DWORD NumberOfBytesWritten; // [sp+DCh] [bp-98h]@35
  DWORD dwBufLen; // [sp+E8h] [bp-8Ch]@49
  DWORD nNumberOfBytesToRead; // [sp+F4h] [bp-80h]@49
  void *Memory; // [sp+100h] [bp-74h]@1
  DWORD Size; // [sp+10Ch] [bp-68h]@22
  BYTE *lpBuffer; // [sp+118h] [bp-5Ch]@1
  HCRYPTHASH hHash; // [sp+124h] [bp-50h]@1
  HCRYPTKEY hExpKey; // [sp+130h] [bp-44h]@1
  HCRYPTKEY hKey; // [sp+13Ch] [bp-38h]@1
  HCRYPTPROV hProv; // [sp+148h] [bp-2Ch]@1
  HANDLE hFile; // [sp+154h] [bp-20h]@1
  HANDLE hObject; // [sp+160h] [bp-14h]@1
  char v44; // [sp+16Fh] [bp-5h]@1
  int v45; // [sp+174h] [bp+0h]@78

  memset(&v30, -858993460, 0x168u);
  v44 = 0;
  hObject = (HANDLE)-1;
  hFile = (HANDLE)-1;
  hProv = 0;
  hKey = 0;
  hExpKey = 0;
  hHash = 0;
  lpBuffer = 0;
  Memory = 0;
  CreateFileA(lpFileName, 1u, 1u, 0, 3u, 0x80u, 0);
  hObject = (HANDLE)((int (*)(void))sub_41117C)();
  if ( hObject == (HANDLE)-1 )
  {
    GetLastError();
    v5 = ((int (*)(void))sub_41117C)();
    sub_41119F("Error opening plaintext file!\n", v5);
    goto LABEL_62;
  }
  printf("The plaintext file, %s, is open. \n", lpFileName);
  ((void (*)(void))sub_41117C)();
  CreateFileA(a2, 2u, 1u, 0, 4u, 0x80u, 0);
  v3 = (void *)((int (*)(void))sub_41117C)();
  hFile = v3;
  if ( v3 == (void *)-1 )
  {
    GetLastError();
    v6 = ((int (*)(void))sub_41117C)();
    sub_41119F("Error opening ecrypted file!\n", v6);
    goto LABEL_62;
  }
  printf("The encryption file, %s, is open. \n", a2);
  ((void (*)(void))sub_41117C)();
  CryptAcquireContextA(&hProv, 0, "Microsoft Enhanced Cryptographic Provider v1.0", 1u, 0);
  if ( !((int (*)(void))sub_41117C)() )
  {
    GetLastError();
    v7 = ((int (*)(void))sub_41117C)();
    sub_41119F("Error during Crypto!\n", v7);
    goto LABEL_62;
  }
  printf("A  crypto has been acquired. \n");
  ((void (*)(void))sub_41117C)();
  if ( pbData && *pbData )
  {
    CryptCreateHash(hProv, 0x8003u, 0, 0, &hHash);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v17 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptCreateHash!\n", v17);
      goto LABEL_62;
    }
    printf("A hash object has been created. \n");
    ((void (*)(void))sub_41117C)();
    lstrlenA(pbData);
    v18 = ((int (*)(void))sub_41117C)();
    CryptHashData(hHash, (const BYTE *)pbData, v18, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v19 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptHashData. \n", v19);
      goto LABEL_62;
    }
    printf("The key has been added to the hash. \n");
    ((void (*)(void))sub_41117C)();
    CryptDeriveKey(hProv, 0x6801u, hHash, 0x800000u, &hKey);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v20 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptDeriveKey!\n", v20);
      goto LABEL_62;
    }
    printf("An encryption key is derived from the password hash. \n");
    ((void (*)(void))sub_41117C)();
  }
  else
  {
    CryptGenKey(hProv, 0x6801u, 0x800001u, &hKey);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v8 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptGenKey. \n", v8);
      goto LABEL_62;
    }
    printf("A key has been created. \n");
    ((void (*)(void))sub_41117C)();
    CryptGetUserKey(hProv, 1u, &hExpKey);
    if ( ((int (*)(void))sub_41117C)() )
    {
      printf("The user public key has been retrieved. \n");
      ((void (*)(void))sub_41117C)();
    }
    else
    {
      GetLastError();
      if ( ((int (*)(void))sub_41117C)() != -2146893811 )
      {
        GetLastError();
        v10 = ((int (*)(void))sub_41117C)();
        sub_41119F("User public key is not available and may not exist.\n", v10);
        goto LABEL_62;
      }
      CryptGenKey(hProv, 1u, 1u, &hExpKey);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v9 = ((int (*)(void))sub_41117C)();
        sub_41119F("Could not create a user public key.\n", v9);
        goto LABEL_62;
      }
    }
    CryptExportKey(hKey, hExpKey, 1u, 0, 0, &Size);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v12 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error BLOB length! \n", v12);
      goto LABEL_62;
    }
    printf("The key BLOB is %d bytes long. \n", Size);
    ((void (*)(void))sub_41117C)();
    malloc(Size);
    v11 = (BYTE *)((int (*)(void))sub_41117C)();
    lpBuffer = v11;
    if ( !v11 )
    {
      sub_41119F("Out of memory. \n", -2147024882);
      goto LABEL_62;
    }
    printf("Memory is allocated for the key BLOB. \n");
    ((void (*)(void))sub_41117C)();
    CryptExportKey(hKey, hExpKey, 1u, 0, lpBuffer, &Size);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v13 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptExportKey!\n", v13);
      goto LABEL_62;
    }
    printf("The key has been exported. \n");
    ((void (*)(void))sub_41117C)();
    if ( hExpKey )
    {
      CryptDestroyKey(hExpKey);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v14 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error during CryptDestroyKey.\n", v14);
        goto LABEL_62;
      }
      hExpKey = 0;
    }
    WriteFile(hFile, &Size, 4u, &NumberOfBytesWritten, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v15 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error writing header.\n", v15);
      goto LABEL_62;
    }
    printf("A file header has been written. \n");
    ((void (*)(void))sub_41117C)();
    WriteFile(hFile, lpBuffer, Size, &NumberOfBytesWritten, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v16 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error writing header.\n", v16);
      goto LABEL_62;
    }
    printf("The key BLOB has been written to the file. \n");
    ((void (*)(void))sub_41117C)();
    free(lpBuffer);
    ((void (*)(void))sub_41117C)();
  }
  nNumberOfBytesToRead = 1000;
  dwBufLen = 1008;
  malloc(0x3F0u);
  Memory = (void *)((int (*)(void))sub_41117C)();
  if ( Memory )
  {
    printf("Memory has been allocated for the buffer. \n");
    ((void (*)(void))sub_41117C)();
    v31 = 0;
    do
    {
      ReadFile(hObject, Memory, nNumberOfBytesToRead, &NumberOfBytesWritten, 0);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v21 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error reading plaintext!!!\n", v21);
        goto LABEL_62;
      }
      if ( NumberOfBytesWritten < nNumberOfBytesToRead )
        v31 = 1;
      CryptEncrypt(hKey, 0, v31, 0, (BYTE *)Memory, &NumberOfBytesWritten, dwBufLen);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v22 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error during CryptEncrypt. \n", v22);
        goto LABEL_62;
      }
      WriteFile(hFile, Memory, NumberOfBytesWritten, &NumberOfBytesWritten, 0);
      if ( !((int (*)(void))sub_41117C)() )
      {
        GetLastError();
        v23 = ((int (*)(void))sub_41117C)();
        sub_41119F("Error writing ciphertext.\n", v23);
        goto LABEL_62;
      }
    }
    while ( !v31 );
    v44 = 1;
  }
  else
  {
    sub_41119F("Out of memory. \n", -2147024882);
  }
LABEL_62:
  if ( hObject )
  {
    CloseHandle(hObject);
    ((void (*)(void))sub_41117C)();
  }
  if ( hFile )
  {
    CloseHandle(hFile);
    ((void (*)(void))sub_41117C)();
  }
  if ( Memory )
  {
    free(Memory);
    ((void (*)(void))sub_41117C)();
  }
  if ( hHash )
  {
    CryptDestroyHash(hHash);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v24 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptDestroyHash.\n", v24);
    }
    hHash = 0;
  }
  if ( hKey )
  {
    CryptDestroyKey(hKey);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v25 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptDestroyKey!\n", v25);
    }
  }
  if ( hProv )
  {
    CryptReleaseContext(hProv, 0);
    if ( !((int (*)(void))sub_41117C)() )
    {
      GetLastError();
      v26 = ((int (*)(void))sub_41117C)();
      sub_41119F("Error during CryptReleaseContext!\n", v26);
    }
  }
  v28 = v4;
  sub_41109B(&v45, &dword_411F28);
  return sub_41117C(v29, v28);
}


Si se sabe programar para Windows, se sabe que API se estan usando muy rapido.
No tengo nada mas que decir del tema.

Un saludo


Con rayos Hequix todo es mas facil [sonrisa]
hola. por lo que he leido se sigue igual. se desprestigia el trabajo de los demas y solo se pide que se saquen cosas para jugar a los juegos pirata. de que vais? que pasa, que el homebrew no es scene? que pasa, que a gente crea aplicaciones que no valen para nada solo para malgastar su tiempo?

solo espero, como digo siempre, que no vuelvan a sacar nada mas. OS LO MERECEIS ! ! !
campa1980 escribió:hola. por lo que he leido se sigue igual. se desprestigia el trabajo de los demas y solo se pide que se saquen cosas para jugar a los juegos pirata. de que vais? que pasa, que el homebrew no es scene? que pasa, que a gente crea aplicaciones que no valen para nada solo para malgastar su tiempo?

solo espero, como digo siempre, que no vuelvan a sacar nada mas. OS LO MERECEIS ! ! !

+1 pero esto solo en esta web, en otras hay muy buen royo, pero aquí uuuugh!
campa1980 escribió:hola. por lo que he leido se sigue igual. se desprestigia el trabajo de los demas y solo se pide que se saquen cosas para jugar a los juegos pirata. de que vais? que pasa, que el homebrew no es scene? que pasa, que a gente crea aplicaciones que no valen para nada solo para malgastar su tiempo?

solo espero, como digo siempre, que no vuelvan a sacar nada mas. OS LO MERECEIS ! ! !


Pero que me estás contando, si esto ni siquiera sirve para la PS3...

Como la otra aplicación que hizo que te comprobaba que se llamara PS3UPDAT.PUP y estuviera en su carpeta [+risas]

La culpa la tienen páginas como PSX-scene por ponerlo en portada ..
17 respuestas