DDos
VIP Members
-
22/10/2013
-
524
-
2.191 bài viết
Phát hiện KeyLogger ẩn náu trong bản IDM Silent “không cần crack”
Một Keylogger vừa tình cờ được phát hiện trong bản IDM Silent “không cần crack” đang được lan tràn trên Internet. Key Logger này được phát hiện nằm trong file: “C:windowssystem32IDMSL Auto Update.exe”, với mục đích là tự động update bản mới của IDM. Nhưng thực chất lại chứa những đoạn mã nhằm đánh cắp thông tin người dùng.
[h=3]Phân tích Keyloger[/h]File này được nén bằng UPX. Sử dụng CFF Explorer để unpack chúng ta được
Sau quá trình dịch ngược có thể thu được mã nguồn của chương trình này
Phát hiện được đoạn code nghi ngờ:
IDM Silent là bản IDM được sử dụng rộng rãi và chia sẻ tràn lan trên internet. Đây là bản dùng miễn phí mà không cần không cần phải “crack”.
Những bản Crack hay patch, keygen luôn tiềm ẩn những nguy cơ. Nếu bạn đang sử dụng phiên bản này nên tiến hành xóa bỏ file này (nó không ảnh hưởng tới chương trình của bạn) hoặc dùng một bản IDM khác. Tôi cũng giới thiệu bạn một chương tình download khác có các tính năng tương tự và miễn phí là Orbit Downloader (click vào tên đển download).
[h=3]Phân tích Keyloger[/h]File này được nén bằng UPX. Sử dụng CFF Explorer để unpack chúng ta được
Func _inetmail($s_mailto, $s_mailsubject, $s_mailbody)
Local $prev = Opt("ExpandEnvStrings", 1)
Local $var, $dflt = RegRead("HKCUSoftwareClientsMail", "")
If $dflt = "Windows Live Mail" Then
$var = RegRead("HKCRWLMail.Url.MailtoShellopencommand", "")
Else
$var = RegRead("HKCRmailtoshellopencommand", "")
EndIf
Local $ret = Run(StringReplace($var, "%1", _inetexplorercapable("mailto:" & $s_mailto & "?
subject=" & $s_mailsubject & "&body=" & $s_mailbody)))
Local $nerror = @error, $nextended = @extended
Opt("ExpandEnvStrings", $prev)
Return SetError($nerror, $nextended, $ret)
EndFunc
Thêm nữaLocal $prev = Opt("ExpandEnvStrings", 1)
Local $var, $dflt = RegRead("HKCUSoftwareClientsMail", "")
If $dflt = "Windows Live Mail" Then
$var = RegRead("HKCRWLMail.Url.MailtoShellopencommand", "")
Else
$var = RegRead("HKCRmailtoshellopencommand", "")
EndIf
Local $ret = Run(StringReplace($var, "%1", _inetexplorercapable("mailto:" & $s_mailto & "?
subject=" & $s_mailsubject & "&body=" & $s_mailbody)))
Local $nerror = @error, $nextended = @extended
Opt("ExpandEnvStrings", $prev)
Return SetError($nerror, $nextended, $ret)
EndFunc
Func _inetsmtpmail($s_smtpserver, $s_fromname, $s_fromaddress, $s_toaddress, $s_subject =
"", $as_body = "", $s_helo = "", $s_first = " ", $b_trace = 0)
If $s_smtpserver = "" OR $s_fromaddress = "" OR $s_toaddress = "" OR $s_fromname = "" OR
StringLen($s_fromname) > 256 Then Return SetError(1, 0, 0)
If $s_helo = "" Then $s_helo = @ComputerName
If TCPStartup() = 0 Then Return SetError(2, 0, 0)
Local $s_ipaddress, $i_count
StringRegExp($s_smtpserver, "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|
[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?)")
If @extended Then
$s_ipaddress = $s_smtpserver
Else
$s_ipaddress = TCPNameToIP($s_smtpserver)
EndIf
If $s_ipaddress = "" Then
TCPShutdown()
Return SetError(3, 0, 0)
EndIf
Local $v_socket = TCPConnect($s_ipaddress, 25)
If $v_socket = -1 Then
TCPShutdown()
Return SetError(4, 0, 0)
EndIf
Local $s_send[6], $s_replycode[6]
$s_send[0] = "HELO " & $s_helo & @CRLF
If StringLeft($s_helo, 5) = "EHLO " Then $s_send[0] = $s_helo & @CRLF
$s_replycode[0] = "250"
$s_send[1] = "MAIL FROM: " & @CRLF
$s_replycode[1] = "250"
$s_send[2] = "RCPT TO: " & @CRLF
$s_replycode[2] = "250"
$s_send[3] = "DATA" & @CRLF
$s_replycode[3] = "354"
Local $aresult = _date_time_gettimezoneinformation()
Local $bias = -$aresult[1] / 60
Local $biash = Int($bias)
Local $biasm = 0
If $biash $bias Then $biasm = Abs($bias - $biash) * 60
$bias = StringFormat(" (%+.2d%.2d)", $biash, $biasm)
$s_send[4] = "From:" & $s_fromname & "" & @CRLF & "To:" & "" & @CRLF & "Subject:"
&$s_subject & @CRLF & "Mime-Version: 1.0" & @CRLF & "Date: " & _datedayofweek(@WDAY, 1) &
", " & @MDAY & " " & _datetomonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" &
@SEC & $bias & @CRLF & "Content-Type: text/plain; charset=US-ASCII" & @CRLF & @CRLF
$s_replycode[4] = ""
$s_send[5] = @CRLF & "." & @CRLF
$s_replycode[5] = "250"
If __smtpsend($v_socket, $s_send[0], $s_replycode[0], $b_trace, "220", $s_first) Then
Return SetError(50, 0, 0)
For $i_count = 1 To UBound($s_send) - 2
If __smtpsend($v_socket, $s_send[$i_count], $s_replycode[$i_count], $b_trace) Then Return
SetError(50 + $i_count, 0, 0)
Next
For $i_count = 0 To UBound($as_body) - 1
If StringLeft($as_body[$i_count], 1) = "." Then $as_body[$i_count] = "." &
$as_body[$i_count]
If __smtpsend($v_socket, $as_body[$i_count] & @CRLF, "", $b_trace) Then Return SetError(500
+ $i_count, 0, 0)
Next
$i_count = UBound($s_send) - 1
If __smtpsend($v_socket, $s_send[$i_count], $s_replycode[$i_count], $b_trace) Then Return
SetError(5000, 0, 0)
TCPCloseSocket($v_socket)
TCPShutdown()
Return 1
EndFunc
Đoạn"", $as_body = "", $s_helo = "", $s_first = " ", $b_trace = 0)
If $s_smtpserver = "" OR $s_fromaddress = "" OR $s_toaddress = "" OR $s_fromname = "" OR
StringLen($s_fromname) > 256 Then Return SetError(1, 0, 0)
If $s_helo = "" Then $s_helo = @ComputerName
If TCPStartup() = 0 Then Return SetError(2, 0, 0)
Local $s_ipaddress, $i_count
StringRegExp($s_smtpserver, "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|
[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?)")
If @extended Then
$s_ipaddress = $s_smtpserver
Else
$s_ipaddress = TCPNameToIP($s_smtpserver)
EndIf
If $s_ipaddress = "" Then
TCPShutdown()
Return SetError(3, 0, 0)
EndIf
Local $v_socket = TCPConnect($s_ipaddress, 25)
If $v_socket = -1 Then
TCPShutdown()
Return SetError(4, 0, 0)
EndIf
Local $s_send[6], $s_replycode[6]
$s_send[0] = "HELO " & $s_helo & @CRLF
If StringLeft($s_helo, 5) = "EHLO " Then $s_send[0] = $s_helo & @CRLF
$s_replycode[0] = "250"
$s_send[1] = "MAIL FROM: " & @CRLF
$s_replycode[1] = "250"
$s_send[2] = "RCPT TO: " & @CRLF
$s_replycode[2] = "250"
$s_send[3] = "DATA" & @CRLF
$s_replycode[3] = "354"
Local $aresult = _date_time_gettimezoneinformation()
Local $bias = -$aresult[1] / 60
Local $biash = Int($bias)
Local $biasm = 0
If $biash $bias Then $biasm = Abs($bias - $biash) * 60
$bias = StringFormat(" (%+.2d%.2d)", $biash, $biasm)
$s_send[4] = "From:" & $s_fromname & "" & @CRLF & "To:" & "" & @CRLF & "Subject:"
&$s_subject & @CRLF & "Mime-Version: 1.0" & @CRLF & "Date: " & _datedayofweek(@WDAY, 1) &
", " & @MDAY & " " & _datetomonth(@MON, 1) & " " & @YEAR & " " & @HOUR & ":" & @MIN & ":" &
@SEC & $bias & @CRLF & "Content-Type: text/plain; charset=US-ASCII" & @CRLF & @CRLF
$s_replycode[4] = ""
$s_send[5] = @CRLF & "." & @CRLF
$s_replycode[5] = "250"
If __smtpsend($v_socket, $s_send[0], $s_replycode[0], $b_trace, "220", $s_first) Then
Return SetError(50, 0, 0)
For $i_count = 1 To UBound($s_send) - 2
If __smtpsend($v_socket, $s_send[$i_count], $s_replycode[$i_count], $b_trace) Then Return
SetError(50 + $i_count, 0, 0)
Next
For $i_count = 0 To UBound($as_body) - 1
If StringLeft($as_body[$i_count], 1) = "." Then $as_body[$i_count] = "." &
$as_body[$i_count]
If __smtpsend($v_socket, $as_body[$i_count] & @CRLF, "", $b_trace) Then Return SetError(500
+ $i_count, 0, 0)
Next
$i_count = UBound($s_send) - 1
If __smtpsend($v_socket, $s_send[$i_count], $s_replycode[$i_count], $b_trace) Then Return
SetError(5000, 0, 0)
TCPCloseSocket($v_socket)
TCPShutdown()
Return 1
EndFunc
StringRegExp($s_smtpserver, "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|
[01]?[0-9] [0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?)")
Chính là máy chủ email mà KeyLogger này sử dụng, chương trình này không dùng các máy chủ mail thông thường như Gmail, Yahoo, hay hotmail. Sử dụng các kết nối TCP đến cổng 25 để gửi các thông tin, dữ liệu từ máy nạn nhân.[01]?[0-9] [0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9]
[0-9]?)")