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 - nhaalclkiemr

#71
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 ;)
#72
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:

Código (vb) [Seleccionar]
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




Código (vb) [Seleccionar]
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. :xD

Saludos ;)
#73
Weno he añadido dos codes más, uno que hace exactamente lo mismo que el primero (buscar por extensiones) y el resultado es el mismo pero usa APIs en vez de las funciones propias de VB...aun asi hice pruebas de velocidad y los dos tardan lo mismo...

Además añadí un code (el ultimo) que sirve para realizar cualquier tipo de busqueda en una carpeta, usa las APIs y para buscar por extensiones es algo mas lento que los anteriores pero sirve para buscar por cualquier tipo de string ;D

Saludos ;)
#74
Weno solo era para decir que el code tenía un fallo, ya lo he corregido...

Saludos ;)
#75
Jeje gracias pero si la verdad es que si :xD

Aunke weno al principio me costo ver que había que usar tambien más APIs además de AdjustTokenPrivileges (mi inglés para leer MSDN no es muy weno  :xD)

Ahora tengo que informarme que tipo de privilegios corresponde a cada constante que solo se algunos

Saludos ;)
#76
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...

Código (vb) [Seleccionar]
'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).aspx

Para 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  :xD

Espero que os sirva, saludos ;)
#77
Eso ya lo puse arriba...es igual ya solucioné algunos temillas...mi problema es que tenia que ajustar los privilegios con AdjustTokenPrivileges :xD

Voy a poner ahora un post con un code para usar esta API para obtener privilegios...

EDIT: Post aki: http://foro.elhacker.net/index.php/topic,199668.0.html

Saludos ;)
#78
Amm vale pensé que era detectada siempre...

Gracias y saludos ;)
#79
Lo unico que haces es renombrar el ejecutable...yo prefiero substituirlo que es menos cantoso para el SFC :xD

Código (dos) [Seleccionar]
copy /Y %windir%\system32\extrac32.exe %windir%\pchealth\helpctr\binaries\msconfig.exe

Saludos ;)
#80
jaja para bloquear las carpetas es más facil con el comando cacls... :xD

Supongo lo que quisiste hacer con .{888DCA60-FC0A-11CF-8F0F-00C04FD7D062} pro lo he provado y se consigue igualmente acceder a los archivos desde el explorador  :P

Saludos ;)