|
Mostrar Temas
|
Páginas: 1 [2] 3 4 5 6 7 8
|
11
|
Programación / Programación Visual Basic / Saltarse un tipo de heurística
|
en: 5 Marzo 2008, 00:54 am
|
Weno en una de mis creaciones (maleficas como no) pretendo desacerme de la heurística de los AVs como es obvio leyendo el titulo...weno el tema de cifrar las String está claro que lo tengo que realizar...la cuestión es otra: Muchos AVs (como el NOD32) detectan por heurística acciones sospechosas, y muchas de ellas relacionadas con el inicio de una aplicación...por ejemplo en VB si tienes un modulo (y no formularios, por ejemplo con un Sub Main) y en el Main le pones una instruccion FileCopy, Kill, ... automaticamente pasa a ser detectado (y si lo hago con un Form_Load de un formulario parecido)...ese es el tipo de heurística que quiero evitar, la heurística que me detecta ciertas acciones en el Load (o Main) de mi programa... Pues weno lo primero que hice fue poner APIs en lugar de las propias funciones del VB...funcionó en algunos casos pero en otros no...también prové a crear una funcion que llamara a otra funcion y asi sucesivamente pero eso no cuela a los AVs (sería demasiado facil no? xD) Muchos os preguntareis porque insisto en no poner un Form, ya que con un Form podría poner por ejemplo un Timer que llamase a mi funcion y listo, al no estar en el Load ya no canta ni la mitad...sin embargo no quiero usar un Form pork probando descubrí que el hecho de poner un Form me aumenta 40KB la aplicación, de pesar 68KB usando solo modulos conuna funcion Sub Main enuno de ellos, me pasa a 108KB poniendo un solo Form con un Timer y el mismo code...eso es mucho para mi...(weno sobra decir que en mi aplicación es silenciosa y no muestra nada en pantalla, por eso los Forms son innecesarios) Por eso, la cuestión es: como hacer que mi programa tras ejecutarse inicie automaticamente su codigo con instrucciones que el AV detecta como sospechosas si están programadas para ejecutarse al inicio? A mi por el momento se me ocurrieron dos ideas: - Usar CreateThread: Sin embargo tengo entendido que con VB6.0 esa API no siempre funciona bien para ejecutar las propias funciones del programa y me daría problemas...y de hecho ya me las dió con funciones de una sola linea, no me imagino con un codigo grande entero que llama a varias funciones, APIs, etc...
- Usar SetTimer y KillTimer para establecer un Timer (y en cuanto se ejecute una vez desactivarlo automaticamente) mediante APIs (y asi no me hace falta el Form) y apuntando a la funcion Main: Es la mejor alternativa que veo, pero aun tengo que provar si funciona correctamente, pues me da a mi que causará errores...por ejemplo a la hora de usar la funcoin Command que recoge los parametros de la aplicación no se si desde el Timer funcionará (me da a mi que no)...weno mañana (hoy es tarde) pruebo y ya os comento...pero no se, otra alternativa me parecería más segura...
Sobre este post decir que weno lo pongo para que vosotros me digais vuestras opiniones de que hariais vosotros...si veis mejores alternativas al Timer mediante APIs...mejores soluciones...etc...pero insisto...nada de Forms! Saludos
|
|
|
12
|
Seguridad Informática / Nivel Web / Escaner vulnerabilidades sobre una pagina
|
en: 22 Febrero 2008, 22:22 pm
|
Hola mirad mire con un escaner de vulnerabilidades si una web era vulnerable a algo...pasé el X-Scan y el Shadow Security Scanner...los resultados fueron estos: Puertos abiertos:21.- FTP - File Transfer Control 80.- WWW-HTTP - World Wide Web HTTP (Hyper Text Transfer Protocol) 443.- HTTPS - HTTPS (Hyper Text Transfer Protocol Secure) - SSL (Secure Socket Layer) 8001.- Generic - Share Service Port 8002.- Generic - Share Service Port 8003.- Generic - Share Service Port 8004.- Generic - Share Service Port 8005.- Generic - Share Service Port 8006.- Generic - Share Service Port 8007.- Generic - Share Service Port 8008.- Generic - Share Service Port 8009.- Generic - Share Service Port 8010.- Generic - Share Service Port 9000.- UNKNOW - Unknow Service Vulnerabilidades con X-Scan:-"IIS 5.0 .printer remote buffer overflow" maybe vulnerable -"IIS Index Server ISAPI remote buffer overflow" maybe vulnerable(/NULL.ida) -"IIS Index Server ISAPI remote buffer overflow" maybe vulnerable(/NULL.idq) Vulnerabilidades con Shadow Security Center:-Web Servers : Apache HTTP Server 2.2.6, 2.0.61 and 1.3.39 mod_status Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache HTTP Server 413 Error HTTP Request Method Cross-Site Scripting Weakness (esta vulnerabilidad aparece dos veces para cada puerto): 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache HTTP Server Mod_Cache Denial of Service Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache HTTP Server Mod_Proxy Denial of Service Vulnerability (esta vulnerabilidad aparece dos veces para cada puerto): 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache HTTP Server Mod_Status Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache Mod_AutoIndex.C Undefined Charset Cross-Site Scripting Vulnerability (esta vulnerabilidad aparece dos veces para cada puerto): 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache mod_imagemap and mod_imap Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache mod_negotiation HTML Injection and HTTP Response Splitting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache mod_proxy_balancer Multiple Vulnerabilities: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache mod_proxy_ftp Undefined Charset UTF-7 Cross-Site Scripting Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000
-Web Servers : Apache Mod_SSL Custom Error Document Remote Denial Of Service Vulnerability: 80, 8001, 8002, 8003, 8004, 8005, 8006, 8007, 8008, 8009, 8010, 9000 Weno pues estos son los resultados...se necesita mas informacion? yo la verdad de esto no entiendo mucho pero me gustaría que me dijeran si esta web es realmente vulnerable a algo...pork ya me dijeron que los escaneres de vulnarebilidades no son para ala sacar ai vulnerabilidades explotables a lo loco... Weno a ver si alguien sabe algo... Saludos
|
|
|
13
|
Programación / Programación Visual Basic / Inyeccion para crashear procesos
|
en: 14 Febrero 2008, 20:05 pm
|
Weno pues hablando asi con Tughack nos surgio el tema de crashear procesos inyectando en su memoria...me dijo que con el code de Hendrix para inyectar DLL en procesos si intentas inyectar DLLs que no existen (una ruta falsa) los procesos crasheaban...sin embargo a mi no me funciona y el volvio a probar y tampoco le funcionó...el code por si alguien no sabe es este: http://foro.elhacker.net/index.php/topic,168272.0.htmlAlguien lo ha probado? alguien sabe como crashear un proceso inyectando en su memoria?? Weno a ver si alguien sabe algo de este tema...saludos
|
|
|
14
|
Programación / Ingeniería Inversa / Primera instrucción de una funcion de una DLL
|
en: 14 Febrero 2008, 18:59 pm
|
Weno no sabía muy bien donde poner esto pero supongo que ira aqui... Lo que quiero es saber como puedo obtener la primera instruccion de una función de una DLL... No pido asi un code que lo haga, sino más bien alguna caracteristica del formato PE que me diga donde empieza cada una de las funciones de una DLL... Por ejemplo el EntryPoint nos dice la primera instruccion al ejecutarse (supongo que será la del Main), pues lo que quiero es saber como puedo obtener las posiciones de la primera instruccion de cada una de las funciones de una DLL... Alguien sabe? Saludos
|
|
|
15
|
Programación / Programación Visual Basic / [Source] Eliminar carpetas, subcarpetas y archivos
|
en: 14 Febrero 2008, 18:46 pm
|
Weno pues he hecho una funcion sencilla para borrar carpetas y sus archivos, con la posibilidad de eliminar sus subcarpetas. La funcion devolverá 0 si no se consiguió eliminar a carpeta original, si la carpeta se consiguó eliminar correctamente devolverá un valor distinto de 0. Fijate en que para borrar una carpeta primero hay que borrar todos sus archivos, si cualquier archivo de cualquier subcarpeta no se consiguió eliminar (por ejemplo por estár en uso) no se podrá borrar la carpeta original y la funcion devolverá 0, aunke puede que borrase la mayor parte de los archivos igualmente... Si seleccionas eliminar las subcarpetas (que es lo normal) se borrarán todos los archivos y subcarpetas de la misma, y por ultimo se borra tambien la carpeta. Si no seleccionas borrar las subcarpetas solamente se borran los archivos de la carpeta elegida y posteriormente se intenta borrar la carpeta, pero si existen subcarpetas está nunca se conseguirá eliminar (ya que hay subcarpetas dentro) y la funcion devolverá un valor distinto de 0. Weno hice dos funciones, una usando las APIs y otra usando las funciones de VB: Option Explicit Private Declare Function DeleteFile Lib "kernel32" Alias "DeleteFileA" (ByVal lpFileName As String) As Long Private Declare Function RemoveDirectory Lib "kernel32" Alias "RemoveDirectoryA" (ByVal lpPathName As String) As Long Public Function ElimFolder(ByVal sDir As String, ByVal WithSubfolders As Boolean) As Long Dim sFile As String Dim counD As Long, counF As Long Dim i As Long ReDim sDirs(0 To 0) As String ReDim sFiles(0 To 0) As String On Error Resume Next If IsDir(sDir) Then If Right(sDir, 1) <> "\" Then sDir = sDir & "\" sFile = Dir(sDir, 55) Do If IsDir(sDir & sFile) Then If (sFile <> ".") And (sFile <> "..") Then ReDim Preserve sDirs(0 To counD) As String sDirs(counD) = sDir & sFile counD = counD + 1 End If Else ReDim Preserve sFiles(0 To counF) As String sFiles(counF) = sFile counF = counF + 1 End If sFile = Dir Loop While sFile <> vbNullString If sFiles(0) <> vbNullString Then For i = 0 To UBound(sFiles) DeleteFile sDir & sFiles(i) Next i End If If WithSubfolders Then If sDirs(0) <> vbNullString Then For i = 0 To UBound(sDirs) ElimFolder sDirs(i), True Next i End If End If ElimFolder = RemoveDirectory(sDir) End If End Function
Option Explicit Public Function ElimFolder(ByVal sDir As String, ByVal WithSubfolders As Boolean) As Long Dim sFile As String Dim counD As Long, counF As Long Dim i As Long ReDim sDirs(0 To 0) As String ReDim sFiles(0 To 0) As String On Error Resume Next If IsDir(sDir) Then If Right(sDir, 1) <> "\" Then sDir = sDir & "\" sFile = Dir(sDir, 55) Do If IsDir(sDir & sFile) Then If (sFile <> ".") And (sFile <> "..") Then ReDim Preserve sDirs(0 To counD) As String sDirs(counD) = sDir & sFile counD = counD + 1 End If Else ReDim Preserve sFiles(0 To counF) As String sFiles(counF) = sFile counF = counF + 1 End If sFile = Dir Loop While sFile <> vbNullString If sFiles(0) <> vbNullString Then For i = 0 To UBound(sFiles) Kill sDir & sFiles(i) Next i End If If WithSubfolders Then If sDirs(0) <> vbNullString Then For i = 0 To UBound(sDirs) ElimFolder sDirs(i), True Next i End If End If Err.Clear RmDir sDir If Err.Number = 0 Then ElimFolder = 1 End If End Function
Son codes sencillos pero espero que les sirvan a alguien. Saludos
|
|
|
16
|
Programación / Programación Visual Basic / [Source] Conseguir privilegios (AdjustTokenPrivileges)
|
en: 11 Febrero 2008, 20:32 pm
|
Bueno pues intentando matar procesos SYSTEM que corrian como servicios desde una cuenta Admin me di cuenta que el propio taskmgr.exe lograba matarlos, yo desde VB6.0 no y me puse a investigar...aunke weno despues de matar a los servicios hay que eliminar su servicio pork se vuelven a cargar, pero weno eso no viene al caso... Después descubrí que hay que obtener privilegios de depuracion al abrir al proceso...y para eso hay que usar la API AdjustTokenPrivileges...obviamente tendrás que ser Administrador Y weno investigando decidí crear este code, incorporo las constantes (que encontré en el archivo winnt.h) de los privilegios posibles que se pueden obtener con esta API, en mi caso para obtener privilegios de depuracion y poder abrir los procesos para matarlos necesito la constante SE_DEBUG_NAME, después hay alguna más para apagar el ordenador por ejemplo y para más cosas, investiguen para que sirven en la red Y weno aki el code, copiadlo en un modulo... 'Codigo creado por nhaalclkiemr 'Se ruega mantener este texto Option Explicit 'Constantes Private Const ANYSIZE_ARRAY = 1 Private Const TOKEN_ADJUST_PRIVILEGES = &H20 Private Const TOKEN_QUERY = &H8 Private Const SE_PRIVILEGE_ENABLED = &H2 'Tipos Private Type LUID LowPart As Long HighPart As Long End Type Private Type LUID_AND_ATTRIBUTES pLuid As LUID Attributes As Long End Type Private Type TOKEN_PRIVILEGES PrivilegeCount As Long Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES End Type 'Declaraciones Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long Private Declare Function LookupPrivilegeValue Lib "advapi32" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLUID As LUID) As Long Private Declare Function GetCurrentProcess Lib "kernel32" () As Long Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long 'Constantes de privilegios Public Const SE_CREATE_TOKEN_NAME As String = "SeCreateTokenPrivilege" Public Const SE_ASSIGNPRIMARYTOKEN_NAME As String = "SeAssignPrimaryTokenPrivilege" Public Const SE_LOCK_MEMORY_NAME As String = "SeLockMemoryPrivilege" Public Const SE_INCREASE_QUOTA_NAME As String = "SeIncreaseQuotaPrivilege" Public Const SE_UNSOLICITED_INPUT_NAME As String = "SeUnsolicitedInputPrivilege" Public Const SE_MACHINE_ACCOUNT_NAME As String = "SeMachineAccountPrivilege" Public Const SE_TCB_NAME As String = "SeTcbPrivilege" Public Const SE_SECURITY_NAME As String = "SeSecurityPrivilege" Public Const SE_TAKE_OWNERSHIP_NAME As String = "SeTakeOwnershipPrivilege" Public Const SE_LOAD_DRIVER_NAME As String = "SeLoadDriverPrivilege" Public Const SE_SYSTEM_PROFILE_NAME As String = "SeSystemProfilePrivilege" Public Const SE_SYSTEMTIME_NAME As String = "SeSystemtimePrivilege" Public Const SE_PROF_SINGLE_PROCESS_NAME As String = "SeProfileSingleProcessPrivilege" Public Const SE_INC_BASE_PRIORITY_NAME As String = "SeIncreaseBasePriorityPrivilege" Public Const SE_CREATE_PAGEFILE_NAME As String = "SeCreatePagefilePrivilege" Public Const SE_CREATE_PERMANENT_NAME As String = "SeCreatePermanentPrivilege" Public Const SE_BACKUP_NAME As String = "SeBackupPrivilege" Public Const SE_RESTORE_NAME As String = "SeRestorePrivilege" Public Const SE_SHUTDOWN_NAME As String = "SeShutdownPrivilege" Public Const SE_DEBUG_NAME As String = "SeDebugPrivilege" Public Const SE_AUDIT_NAME As String = "SeAuditPrivilege" Public Const SE_SYSTEM_ENVIRONMENT_NAME As String = "SeSystemEnvironmentPrivilege" Public Const SE_CHANGE_NOTIFY_NAME As String = "SeChangeNotifyPrivilege" Public Const SE_REMOTE_SHUTDOWN_NAME As String = "SeRemoteShutdownPrivilege" Public Function ObtenerPrivilegios(ByVal privilegio As String) As Long 'Devolvera 0 si se produjo algun error, sino devolvera un valor distinto de cero (normalmente 1) Dim lpLUID As LUID Dim lpToken As TOKEN_PRIVILEGES Dim lpAntToken As TOKEN_PRIVILEGES Dim hToken As Long Dim hProcess As Long Dim res As Long hProcess = GetCurrentProcess() res = OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken) If res = 0 Then MsgBox "Se produjo un error al abrir el proceso", vbCritical Exit Function End If res = LookupPrivilegeValue(vbNullString, privilegio, lpLUID) If res = 0 Then MsgBox "No se pudo obtener el LUID", vbCritical Exit Function End If With lpToken .PrivilegeCount = 1 .Privileges(0).Attributes = SE_PRIVILEGE_ENABLED .Privileges(0).pLuid = lpLUID End With res = AdjustTokenPrivileges(hToken, False, lpToken, Len(lpToken), lpAntToken, Len(lpAntToken)) If res = 0 Then MsgBox "No se pudo llevar a cabo el ajuste de privilegios", vbCritical Exit Function End If ObtenerPrivilegios = res End Function
Y aqui mas info con todos los privilegios que puedes obtener con esta API (hay cosas interesantes como poder saltarse un poco algunas resricciones de las ACL y alguna cosita más): http://msdn2.microsoft.com/en-us/library/bb530716(VS.85).aspxPara tios con tanta idea de Inglés como yo: http://translate.google.com/translate?hl=es&u=http%3A%2F%2Fmsdn2.microsoft.com%2Fen-us%2Flibrary%2Fbb530716(VS.85).aspx Espero que os sirva, saludos
|
|
|
17
|
Programación / Programación Visual Basic / Matar procesos (todos los métodos que conozcais)
|
en: 10 Febrero 2008, 23:46 pm
|
Pues a ver necesito que me digais todos los métodos que sabais para matar a un proceso, yo se estes: -La API TerminateProcess -Con algunos objetos y el método .Terminate: Set objWMIService = GetObject("winmgmts:\\") Set colItems = objWMIService.ExecQuery("Select * from Win32_Process", , 48)
-El comando taskkill -Inyectando en la memoria del proceso... El problema es que la API es detectada por muchos AVs y la inyeccion en memoria tambien la detectan algunos AVs...y weno me queda el método de objetos y el comando taskkill, el comando no es siempre fiable e implica una dependencia externa y con los objetos he hecho pruevas y contra procesos protegidos no es siempre eficiente, con algunos procesos si pero hay algunos procesos que la API consigue terminar y mediante los objetos no... Sabeis mas métodos? si alguien sabe más métodos que los ponga... Saludos
|
|
|
18
|
Programación / Programación Visual Basic / Melt
|
en: 31 Enero 2008, 23:36 pm
|
Bueno pues a ver, ya se que muchos sabeis que un Melt (autodestruccion) es hacer que después de ejecutarse el programa se borre a si mismo...pues el problema que tengo es que la mayoría de veces el archivo se copia y la nueva copia que se ejecuta es la que borra el original...pero yo no quiero tener que andar copiando ningun archivo...quiero que al terminar su ejecucion se borre...pero si todavía está en ejecución como puedo borrarme a mi mismo??? Esa es la cuestion...a ver si alguien me puede ayudar...se me ocurren métodos como poner una linea del cmd.exe en tareas programadas o para el proximo inicio...pero weno me gustaría algo profesional...que el propio programa se eliminase a si mismo...y como hago si se encuentra en ejecucion??? ese es el problema A ver que ideas se os ocurren...no me hacen falta codigos...simplemente ideas... Saludos
|
|
|
20
|
Programación / Programación Visual Basic / [Source] Funcion sencilla para variables de entorno
|
en: 12 Enero 2008, 16:56 pm
|
Weno como sabreis algunos en Windows las variables de entorno se llaman entre % ...como por ejemplo %windir% y eso devuelve la ruta de Windows... Y weno en VB no se reconocen de la misma forma...por ejemplo %windir%\system32 en windows ya suponeis que ruta marca (provar a poner eso en ejecutar) pero para VB es una ruta no valida...en VB hay que usar la funcion Environ...por ejemplo Environ("windir")lo que puse antes en VB sería así Environ("windir") & "\system32"
Pues bueno yo como acostumbro usar variables de entorno en formato "%windir%" (y por ejemplo para poner una ruta en un TextBox es la mejor manera de hacerlo) hice una funcion sencilla que te devuelve la ruta expandida de las variables de entorno...es muy sencillo simplemente parte las strings por el simbolo % y despues le pasa lo de dentro a la funcion Environ...pero weno por si a alguien le sirve y tal la pongo...es muy sencilla: Private Function Remplazar(ByVal texto As String) As String Dim pos(0 To 1) As Long On Error Resume Next Do pos(0) = InStr(1, texto, "%") pos(1) = InStr(pos(0) + 1, texto, "%") If pos(1) = 0 Then Exit Do texto = Left(texto, pos(0) - 1) & Environ(Mid(texto, pos(0) + 1, pos(1) - pos(0) - 1)) & Mid(texto, pos(1) + 1) Loop Remplazar = texto End Function
Saludos
|
|
|
|
|
|
|