ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > Реверсинг
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Расшифровка wand.dat(Opera) на дельфи
  #1  
Старый 12.08.2009, 04:51
Seregakz
Познающий
Регистрация: 13.06.2009
Сообщений: 32
Провел на форуме:
42683

Репутация: 2
По умолчанию Расшифровка wand.dat(Opera) на дельфи

Плз ктонить из шаричих попробуйте запустить его
PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsStdCtrlsDCPdesDCPsha1DCPmd5;



type
  TForm1 
= class(TForm)
    
Button1TButton;
    
ListBox1TListBox;
    
Memo1TMemo;
    
procedure Button1Click(SenderTObject);
    
procedure Run1;
    function 
DecryptWandPass(const KeyDataString): String;
    
procedure ProcessWandData(MTMemoryStream);
  
end;

var
  
Form1TForm1;
  
FormsListTList;
    
AccountListTList;

  
MTMemoryStream;
 
 
type
  POperaItem 
= ^TOperaItem;
  
TOperaItem record
     Site
String;
    
ParamsTStringList;
  
end;

implementation

{$R *.dfm}


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

procedure OperaDecrypt(keyPointerdatadataoutPointerlenIntegermagicPointermagic_lenInteger);
var
  
out_1: array[0..63of Byte;
  
out_2: array[0..63of Byte;
  
digest_1: array[0..15of Byte;
  
digest_2: array[0..15of Byte;
  
des_key: array[0..23of Byte;

  
md5TDCP_md5;
  
CipherTDCP_3des;
begin
  md5 
:= TDCP_md5.Create(nil);
  
md5.Init;

  
Move(magic^, out_1magic_len);
  
Move(key^, out_1[magic_len], 8);
  
md5.Update(out_1magic_len+8);
  
md5.Final(digest_1);
  
Move(digest_1des_key16);

  
md5.Init;
  
Move(digest_1out_216);
  
Move(magic^, out_2[16], magic_len);
  
Move(key^, out_2[16+magic_len], 8);
  
md5.Update(out_224+magic_len);
  
md5.Final(digest_2);
  
md5.Burn;
  
md5.Free;

  
Move(digest_2des_key[16], 8);

  
Cipher := TDCP_3des.Create(nil);
  
Cipher.Init(des_key192, @digest_2[8]);
  
Cipher.DecryptCBC(data^, dataout^, len);

  
Cipher.Burn;
  
Cipher.Free;
end;


function 
TForm1.DecryptWandPass(const KeyDataString): String;
begin
  Result 
:= '';
  if 
Length(Key) <> 8 then Exit;
  if (
Length(Data) < 8) or (Length(Datamod 8 <> 0then Exit;

  
SetLength(ResultLength(Data));
  
OperaDecrypt(@Key[1], @Data[1], @Result[1], Length(Data), @opera_magic_wandSizeOf(opera_magic_wand));
  
SetLength(ResultLength(Result)-Ord(Result[Length(Result)])); // Cut unused chars
  
Result := WideCharToString(@(Result+#0#0)[1]); // Wide>ANSI
end;


procedure TForm1.ProcessWandData(MTMemoryStream);
var
  
PPOperaItem;


  function 
Swap32(ValueLongWord): LongWordassembler;
  
asm
    bswap eax
  end
;

  function 
ReadDWordLongWord;
  
begin
    M
.ReadBuffer(Result,4);
    
Result := Swap32(Result);
  
end;

  function 
ReadVariable(CLenLongWord): String;
  
begin
    SetLength
(ResultCLen);
    
M.ReadBuffer(Result[1], CLen);
  
end;

  function 
ReadSiteHeaderInteger;
  var
    
KeyDataString;
  
begin
    
if ReadDWord <= 4 then // Len
      
ReadDWord;

    
// Site name
    
Key := ReadVariable(ReadDWord);
    
Data := ReadVariable(ReadDWord);

    New(
P);
    
P.Params := TStringList.Create;
    
P.Site := DecryptWandPass(KeyData);
    
FormsList.Add(P);

    
// Submit button name
    
if ReadDWord 0 then begin
      ReadVariable
(ReadDWord); // Key
      
ReadVariable(ReadDWord); // Data
    
end;

    
ReadVariable(24); // Unknown
    
Result := ReadDWord// Number of children
  
end;

  
procedure ReadSiteItem;
  var
    
KeyDataKey2Data2String;
  
begin
    ReadVariable
(1); // Unknown
    
if ReadDWord <= 4 then // Len
      
ReadDWord;

    
// Input name
    
Key := ReadVariable(ReadDWord);
    
showmessage(key);
    
Data := ReadVariable(ReadDWord);

    if 
ReadDWord <= 4 then // Len
      
ReadDWord;

    
// Input value
    
Key2 := ReadVariable(ReadDWord);
    
showmessage('Key : ' +key2);
    
Data2 := ReadVariable(ReadDWord);

    if 
<> nil then
      P
.Params.Add(DecryptWandPass(KeyData) + '=' DecryptWandPass(Key2Data2));

  
end;

var
  
ijInteger;

begin

  
if M.Size 16 then begin showmessage('error 1'); Exit;  end;

if 
ReadDWord <> 2 then begin showmessage('err 2');  Exit;  end// Version
 
if ReadDWord <> 0 then begin showmessage('err 3'); Exit; end// 1 - crypted, 0 - not crypted
  
ReadVariable(8); // Unknown

  
:= nil;  

  
// Header
  
ReadDWord// Len
  
ReadVariable(ReadDWord); // Key
  
ReadVariable(ReadDWord); // Data
  
ReadVariable(37); // Unknown

  // Data types?
  
for := 1 to ReadDWord do begin
    ReadVariable
(1); // Unknown
    
ReadVariable(4); // Len
    
ReadVariable(ReadDWord); // Key
    
ReadVariable(ReadDWord); // Data
    
ReadVariable(8); // Unknown
  
end;

  
// LogProfile
  
ReadVariable(4); // Len
  
ReadVariable(ReadDWord); // Key
  
ReadVariable(ReadDWord); // Data
  
ReadVariable(1); // Boolean

  // Sites
  
for := 1 to ReadDWord do
    for 
:= 1 to ReadSiteHeader do
      
ReadSiteItem;
end;



procedure TForm1.Run1;
 var
 
result string;
begin
    M 
:= TMemoryStream.Create;
    
M.LoadFromFile('wand.dat');
    
Memo1.Lines.LoadFromStream(M);
    
M.Position:=0;
    
ProcessWandData(M);
    
M.Free;
end;

procedure TForm1.Button1Click(SenderTObject);
begin
  Run1
;
end;

end
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исходники криптора на дельфи 7ion С/С++, C#, Delphi, .NET, Asm 23 14.09.2008 13:41



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ