Главная страница


ru.nethack

 
 - RU.NETHACK -------------------------------------------------------------------
 From : Eugeny Dzhurinsky                    2:4641/666.534 14 Apr 2001  22:36:00
 To : ‚« ¤ ЏҐpиЁ­
 Subject : Кто-нибyдь знает сколько y пpова логи хpанятся о диалапщиках ?
 -------------------------------------------------------------------------------- 
 
 
  ВП>     Hедавно моего знакомого хакнyли чеpез инет и вытянyли паpоли
  ВП> (подозpеваю, что закинyли тpояна, т.к. паpоли знакомый не сохpанял :),
  ВП> кстати, как можно вытянyть в таком слyчае пасвоpды ?)
 
 === Cut ===
 I. Capturing dial-up passwords
 
 Almost all dial-up connections are initiated through a modem attached to a
 serial port, using the PPP protocol. The two most common ways of
 authentication are via PAP (Password Authentication Protocol) or via a login
 prompt. To get these passwords we need to capture the traffic passing through
 the serial port.
 
 The Hook_Device_Service system call allows us to hook the services exported by
 the VXDs. VCOMM.VXD exports three services that we need to hook. These are
 VCOMM_OpenComm, VCOMM_WriteComm and VCOMM_CloseComm. The following code
 hooks the services:
 
         ; Hook VCOMM services
 
         GetVxDServiceOrdinal eax, _VCOMM_OpenComm
         mov esi, offset32 OpenComm_Hook
         VMMcall Hook_Device_Service
         jc Abort
 
         GetVxDServiceOrdinal eax, _VCOMM_WriteComm
         mov esi, offset32 WriteComm_Hook
         VMMcall Hook_Device_Service
         jc Abort
 
         GetVxDServiceOrdinal eax, _VCOMM_CloseComm
         mov esi, offset32 CloseComm_Hook
         VMMcall Hook_Device_Service
         jc Abort
 
 OpenComm_Hook, WriteComm_Hook and CloseComm_Hook are the names of the new
 service handlers.
 
 One of the OpenComm parameters is the name of the device being opened. When a
 dial-up connection is established, Windows opens COM1, COM2, COM3 or COM4 and
 sends the AT modem commands. Our OpenComm procedure checks the device name and
 sets a flag if it is a COM port. All the subsequent WriteComm calls are
 logged, until the connection is closed.
 
 If the flag is set, the WriteComm procedure saves all the data to a buffer.
 When the buffer gets full, the data in it is processed and saved to the
 registry.
 
 The main goal of the log processing routines is to make sure that no
 username/password combination is emailed twice - getting your mailbox flooded
 by a misbehaving trojan horse is not good. This requires the usernames and
 the passwords to be saved and each new connection to be checked against the
 old sessions. The best place for storing such information is the registry.
 Reading and writing to the registry is much easier than storing the data in a
 file on the hard disk. The chance of the user noticing a few new entries in
 the registry is also very slim.
 
 For each session, four things need to be saved: username, password, phone
 number or IP address of the remote end and the log itself. Before the session
 is saved, the username, password and the phone number are extracted from the
 log and compared to the existing values in the registry. If a session with the
 same values exists, the new session is not saved.
 
 CHROME.ASM combines the username, password and phone number into a single
 string. Then it saves the session to the registry using this string as the key
 name and the log as the key value. The string acts as a hash of the log. When
 a new connection is captured, its hash string is generated and the VXD checks
 if a key with the same hash exists. It does this by trying to open a key with
 the same name as the hash string. If the RegQueryValueEx call fails, the new
 connection is saved.
 
         ; The following code is taken from the Send_Common procedure
 
         ; ValueName is pointer to the beginning of the hash string.
         ; pBuffer is a pointer to the log
         ; RegQueryValueEx expects a pointer to a pointer, so dwTemp_1 is used
         ; for passing a pointer to a NULL pointer
 
 Get_Reg_Value:
         ; Try to get the value with the same name
 
         xor ebx, ebx
         mov dwTemp_1, ebx
         push offset32 dwTemp_1          ; cbData
         push ebx                        ; lpszData
         push ebx                        ; fdwType
         push ebx                        ; dwReserved
         push ValueName                  ; lpszValueName
         push hOurKey                    ; phKey
 
         VMMCall _RegQueryValueEx        ; Get the value of the key
         add esp, 18h
 
         cmp eax, ERROR_FILE_NOT_FOUND   ; If key exists
         jne Send_Common_Abort
 
         ; Save the result in the registry
 
         push BufferSize                 ; cbData
         push pBuffer                    ; lpszData
         push REG_SZ                     ; fdwType
         push 0                          ; dwReserved
         push ValueName                  ; lpszValueName
         push hOurKey                    ; phKey
 
         VMMCall _RegSetValueEx          ; Set the value of the key
         add esp, 18h
 
 When the user ftp's to a server his connection is logged. If later he decides
 to telnet to the same server with the save username and password, the telnet
 connection will not be saved, because the hash string will be the same. To
 avoid this we will include an connection type identifier in the hash string.
 This identifier is a single letter put in the beginning of the hash string:
 
         TraceLetters            equ $  ; Table with letters for each different
         NOTHING                 db 'N' ; type of trace. Indexed with TraceType
         MODEM                   db 'M'
         TELNET                  db 'T'
         FTP                     db 'F'
         POP3                    db 'P'
 
 The buffer processing functions for the dial-up and the TCP connections are
 very similar. They only differ in the way the hash string is extracted from
 the log. The common buffer processing is done by the Send_Common function. It
 saves the new data in the buffer and checks if it is full. Usually we don't
 need to capture more than the first hundred bytes to get the username and
 password. If the buffer is full, the log should be processed. The TraceType
 variable contains the connection type - modem, telnet, ftp or pop3.
 Send_Common calls the appropriate log processing function - in the case of a
 dial-up connection it calls ModemLog. The log processing functions extract a
 hash string from the buffer and returns it to Send_Common.
 
 ModemLog checks the captured data for an ATD command. If does not find it, an
 error flag is set and the data is not saved into the registry. Else the
 phone number is extracted and copied as the first part of the hash string.
 
 If the first transferred byte after the phone number is a '~' we are dealing
 with a PPP connection. During the PPP connection establishment authentication
 information can be exchanged. The most commonly used protocol is called PAP
 (Password Authentication Protocol). CHAP (Challenge Authentication Protocol)
 is also popular, but it does not send the password in cleartext and therefor
 can not be captured by the VXD.
 
 You can find more information on PAP in RFC1172: The Point-to-Point Protocol
 Initial Configuration Options. The PPP protocol is described in RFC1331.
 
 The PAP authentication information is transmitted using a PPP packet with a
 PAP sub-packet type. The structure of the PAP packet is shown in the
 following table:
 
   | 7E | C0 23 | 01 | xx | xx xx |  ULen  | U S E R |  PLen  | P A S S |
   |    |       |    |    |       |        |         |        |         |
   |PPP |  PAP  |code| id |length |user len|username |pass len|password |
 
 All PAP packets start with 7E C0 23. If the packet is carrying authentication
 information the PAP code is 01. We need to scan the captured PPP session for
 the 7E C0 23 01 byte sequence and copy the username and the password to hash
 string.
 
 If the first character after the phone number is not '~', we are dealing with
 a login prompt configuration. Usually the user enters a username, presses
 Enter, then enters the password, presses Enter again and the PPP connection is
 established. As we already know, the first byte of the PPP handshake sequence
 is '~'. If we copy all the data before the '~' to the hash string we'll surely
 get the username and the password.
 
 === Cut ===
 
 IMHO, в пеpеводе нyжды нет....:-)
 С pегаpдами, Eugeny
 
 ---
  * Origin: 1,3,7,15 пальцев... (2:4641/666.534)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   RyDen   13 Apr 2001 07:41:41 
 Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   ‚« ¤ ЏҐаиЁ­   13 Apr 2001 16:00:00 
 Кто-нибyдь знает сколько y пpова логи хpанятся о диалапщиках ?   Eugeny Dzhurinsky   14 Apr 2001 22:36:00 
 Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   Alexey Volkov   19 Apr 2001 19:38:56 
 Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   ‚« ¤ ЏҐаиЁ­   20 Apr 2001 16:32:00 
 Re: Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   Anton Alabushev   22 Apr 1997 18:08:00 
 Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   Sergey Ternovykh   13 Apr 2001 19:56:03 
 Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   Dmitry Radishev   13 Apr 2001 21:34:16 
 Re: Кто-нибудь знает сколько у прова логи хранятся о диалапщиках ?   Anton Alabushev   15 Apr 2010 10:00:00 
Архивное /ru.nethack/46863ad8d264.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional