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ú

Mensajes - Karcrack

#331
Para W$7:
wmic /namespace:\\root\SecurityCenter2 PATH AntiVirusProduct GET /value
#332
No se si habéis leído mi respuesta :rolleyes: Se lee en la WMI

En W$>=Vista hay algunas APIs para trabajar con el gestor de seguridad que lleva... pero con WMI puedes... Ejecuta este comando en la shell y lo veras:
wmic /namespace:\\root\SecurityCenter PATH AntiVirusProduct GET /value
#333
No existe ninguna clave donde este esa información. Usa WMI para obtener la lista de aplicaciones de seguridad instaladas.
#334
Esa firma es característica de VB6... así que imagino que no solo te detecta eso... Creo que indica que el código se ejecuta en Sub Main()
#335
Una lástima que te despidas de vb6... bueno, solo un apunte:
Código (vb) [Seleccionar]
If GetModuleHandle("VBA6") Then Debug.Print "only compiled": End
Equivale a:
Código (vb) [Seleccionar]
If App.LogMode = 0 Then Debug.Print "only compiled": End
Y sin APIs :)

No entiendo para que usas un shellcode aquí :P Pero te ha quedado bonito el código, aunque el ASM se podría aligerar.
#336
@Jhonjhon_123: Ya te respondí por privado que el problema de estructuración está sobretodo en como manejas los errores... Pero como Fakedo0r tampoco parece ver esos fallos en la estructura voy a añadir una explicación.

A mí, personalmente, me parece que haces las comprobaciones de forma incorrecta. Buscas siempre el caso negativo y finalizas. Esto añade código extra en el ejecutable final. Es por eso que te recomiendo utilizar condiciónales anidados... He rehecho el código para que comprendas a que me refiero:
Código (vb) [Seleccionar]
Public Sub StopShell()
   Call CloseHandle(lHInput)
   Call CloseHandle(lHOutput)
   Call TerminateProcess(lCmdID, ByVal 0&)
   Call CloseHandle(lCmdID)
End Sub

Public Function GetOutTextShell(sOut As String) As Boolean
   Dim bBuffer()   As Byte
   Dim lLen        As Long
   Dim lLenBuff    As Long
   
   If PeekNamedPipe(lHOutput, 0&, 0&, 0&, lLen, 0&) Then
       ReDim bBuffer(lLen)
       If ReadFile(lHOutput, bBuffer(0), lLen, lLenBuff, ByVal 0&) Then
           sOut = Left$(StrConv(bBuffer, vbUnicode), lLenBuff)
           GetOutTextShell = True
       End If
   End If
End Function

Public Sub SendToShell(sCMD As String)
   Dim sBytes() As Byte
   Dim BytesWritten As Long
   
   If lHInput Then
       sBytes = StrConv(sCMD & vbNewLine, vbFromUnicode)
       Call WriteFile(lHInput, ByVal sCMD, Len(sCMD), BytesWritten, 0&)
   End If
End Sub

Public Function StartShell() As Boolean
   Dim tSecurityAttributes As SECURITY_ATTRIBUTES
   Dim tStartInfo          As STARTUPINFO
   Dim tProcessInfo        As PROCESS_INFORMATION
   Dim lCurrentID          As Long
   
   lCurrentID = GetCurrentProcess()
   
   With tStartInfo
       .cb = Len(tStartInfo)
       .dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
   End With
   
   With tSecurityAttributes
       .nLength = Len(tSecurityAttributes)
       .bInheritHandle = 1
   End With
   
   If CreatePipe(lHOutput, tStartInfo.hStdOutput, tSecurityAttributes, 0) Then
       If CreatePipe(tStartInfo.hStdInput, lHInput, tSecurityAttributes, 0) Then
           If DuplicateHandle(lCurrentID, tStartInfo.hStdOutput, lCurrentID, tStartInfo.hStdError, 0&, True, DUPLICATE_SAME_ACCESS) Then
               If CreateProcess(vbNullString, "cmd", tSecurityAttributes, tSecurityAttributes, 1, NORMAL_PRIORITY_CLASS, ByVal 0&, vbNullString, tStartInfo, tProcessInfo) Then
                   Call CloseHandle(tProcessInfo.hThread)
                   StartShell = True
                   Exit Function
               End If
           End If
       End If
   End If
   Call StopShell
End Function

Algunas aclaraciones más:
Si lees las definiciones de las APIs que usas como te dije, te darás cuenta también que haces comprobaciones duplicadas... Si el retorno de X API es true, esto implica otras cosas también.
Pueden parecer más feos los condicionales anidados pero: Es más rápido. Menos código compilado. Puedes (si lo deseas) controlar los errores por separado.

Espero que entiendas a que me refiero, y si lo tienes en cuenta para otras veces perfecto,sino también.
#337
El bucle esta "desenrollado":
http://en.wikipedia.org/wiki/Loop_unwinding

Respecto a lo de las reglas... tienes toda la razón, no voy a rehacer la función porque no tengo tiempo. Aún así faltó un poco más de claridad al crear el reto respecto a ese tema.. y no habiendo nada estricto sobre la declaración de la función decidí jugar un poco :P
#338
Sí. Es por eso que te digo que revises el código y las definiciones en la MSDN.
#339
No es mio, es de Cobein.
Puse los enlaces para que veas que se puede pasar directamente el handle sin necesidad de crear un Pipe... revisa el código y lee las definiciones de las APIs en la MSDN.
#340
Mal estructurado e indentado :rolleyes:
http://foro.elhacker.net/programacion_visual_basic/ayuda_con_cmd_pipe_vb6-t277687.0.html;msg1367077#msg1367077
http://www.ngssoftware.com/research/papers/WritingSmallShellcode.pdf

Este es un buen ejemplo de como redirigir el flujo de datos entre un proceso (cmd) y el socket :)