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

#41
Código: vb
Option Explicit

'KERNEL32
Private Declare Function lstrcpyW Lib "KERNEL32" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
'NTDLL
Private Declare Function RtlGetCurrentPeb Lib "NTDLL" () As Long
'MSVBVM60
Private Declare Sub GetMem4 Lib "MSVBVM60" (ByVal Addr As Long, ByRef RetVal As Long)

Public Enum STRING_TYPE
    CurrentDirectoryPath = &H28
    DllPath = &H34
    ImagePathName = &H3C
    CommandLine = &H44
    WindowTitle = &H74
    DesktopName = &H7C
    ShellInfo = &H80
    RuntimeData = &H84
End Enum

'---------------------------------------------------------------------------------------
' Procedure : GetUPPString
' Author    : Karcrack
' Date      : 24/09/2009
' Purpose   : Get strings from PEB.RTL_USER_PROCESS_PARAMETERS
'---------------------------------------------------------------------------------------
'
Public Sub GetUPPString(ByRef sRet As String, ByVal lType As STRING_TYPE)
    Dim lUPP        As Long         'RTL_USER_PROCESS_PARAMETERS
    Dim lAddr       As Long         'RTL_USER_PROCESS_PARAMETERS.X
   
    Call GetMem4(RtlGetCurrentPeb + &H10, lUPP)
    Call GetMem4(lUPP + lType, lAddr)
    Call lstrcpyW(StrPtr(sRet), lAddr)
End Sub


Ejemplo de uso:
Código: vb
Sub Main()
    Dim sStr        As String * 260
   
    Call GetUPPString(sStr, ImagePathName)
   
    MsgBox "MiRuta:" & vbCrLf & sStr
End Sub


Minimalista al maximo ;D

Cualquier duda preguntad ;)
#42
Código: vb
Option Explicit
'NTDLL
Private Declare Function RtlGetCurrentPeb Lib "NTDLL" () As Long
'MSVBVM60
Private Declare Sub GetMem4 Lib "MSVBVM60" (ByVal Addr As Long, ByRef RetVal As Long)

'---------------------------------------------------------------------------------------
' Procedure : AmISandboxied
' Author    : Karcrack
' Date      : 13/03/2011
' Purpose   : Know if we are running under Sandboxie
'---------------------------------------------------------------------------------------
'
Public Function AmISandboxied() As Boolean
    Dim lUPP        As Long         '&RTL_USER_PROCESS_PARAMETERS
    Dim lFlags      As Long         'RTL_USER_PROCESS_PARAMETERS.Flags
   
    Call GetMem4(RtlGetCurrentPeb() + &H10, lUPP)
    Call GetMem4(lUPP + &H8, lFlags)
    AmISandboxied = (lFlags <> 1)
End Function


Habitualmente PEB.RTL_USER_PROCESS_PARAMETERS.Flags vale 1, pero cuando estas siendo ejecutado dentro de Sandboxie tiene un valor distinto :)
#43
Código: vb
'---------------------------------------------------------------------------------------
' Module    : mAPIPatchByID
' Author    : Karcrack
' Now       : 23/04/2011 14:13
' Purpose   : Patch API functions by ID
' History   : 23/04/2011 First cut .........................................................
'---------------------------------------------------------------------------------------

Option Explicit

'KERNEL32
Private Declare Function NtWriteVirtualMemory Lib "NTDLL" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long

Public Sub PatchAPIAddr(ByVal lID As Long, ByVal lAddr As Long)
    Dim hInstance       As Long
    Dim lExtTablePtr    As Long
   
    hInstance = App.hInstance
    lExtTablePtr = GetDWORD(GetDWORD((hInstance + GetDWORD(hInstance + GetDWORD(hInstance + &H3C) + &H28)) + &H1) + &H30) + &H234
    If GetDWORD(lExtTablePtr + &H4) >= lID Then
        Call PutDWORD(GetDWORD(GetDWORD(GetDWORD(lExtTablePtr) + (8 * lID) + 4) + &H19), lAddr)
    End If
End Sub

Private Sub PutDWORD(ByVal lAddr As Long, ByVal lDWORD As Long)
    Call NtWriteVirtualMemory(-1, ByVal lAddr, lDWORD, 4, ByVal 0&)
End Sub

Private Function GetDWORD(ByVal lAddr As Long) As Long
    Call NtWriteVirtualMemory(-1, GetDWORD, ByVal lAddr, 4, ByVal 0&)
End Function


Para que sirve? Para cargar APIs dinamicamente :D

Un ejemplo:
Código: vb
Option Explicit

'USER32
Private Declare Function MessageBox Lib "nadaesloqueparece" Alias "Karcrack" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
'KERNEL32
Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Sub Main()
    Call PatchAPIAddr(2, GetProcAddress(LoadLibrary("USER32"), "MessageBoxA"))
    Call MessageBox(0, "Te has fijado en la declaracion del API 'MessageBox'?", "Hola :)", 0)
End Sub

Otro un poco mas enrevesado:
Código: vb
Option Explicit

'USER32
Private Declare Function fnc1& Lib "whatever" (ByVal a&, ByVal b&, ByVal c&, ByVal d&)
Private Declare Function fnc2& Lib "whatever" (ByVal a&, ByVal b&)
'KERNEL32
Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Private Const u32$ = "ZXJW87"
Private Const msgbx$ = "RjxxfljGt}\"
Private Const ktmr$ = "PnqqYnrjw"
Private Const stmr$ = "XjyYnrjw"
Private x&
Private bo&

Sub Main()
    Dim p&
   
    p = GetProcAddress(LoadLibrary(d(u32)), d(stmr))
    Call PatchAPIAddr(3, p)
    x = fnc1(0, 0, 2 * 1000, AddressOf tproc)
    p = GetProcAddress(LoadLibrary(d(u32)), d(msgbx))
    Call PatchAPIAddr(3, p)
    p = GetProcAddress(LoadLibrary(d(u32)), d(ktmr))
    Call PatchAPIAddr(2, p)
    bo = 1
    While bo
        DoEvents
    Wend
End Sub

Private Function d$(s$)
    Dim i&
    d = s
    For i = 1 To Len(d)
        Mid$(d, i, 1) = Chr$(Asc(Mid$(d, i, 1)) - 5)
    Next i
End Function

Private Function tproc&(ByVal a&, ByVal b&, ByVal c&, ByVal d&)
    If fnc1(0, StrPtr("Seguimos?"), StrPtr(":)"), vbYesNo) = vbNo Then
        bo = 0
        Call fnc2(0, x)
    End If
End Function


Los ejemplos han de ir en un modulo aparte puesto después del modulo 'mAPIPatchByID' para que los IDs se correspondiesen... en caso contrario hay que calcular los IDs usando por ejemplo el OllyDbg :P

Cualquier duda preguntad!
#44
ASM / Cifrado - packed xor FPU
Junio 16, 2013, 06:24:38 PM
Código: asm
void __declspec(naked) DoCipher(DWORD ptr, DWORD nQwords){
__asm{
mov eax, [esp+4]
mov ecx, [esp+8]
finit
fldpi //mm7 = pi
Redo:
lea ebx, [eax+(ecx*8[b][/b])-8]
movq mm0, QWORD PTR[ebx]
pxor mm0, mm7
movq QWORD PTR[ebx], mm0
loop Redo
ret
}
}


Una forma original de aplicar un cifrado XOR... utiliza como clave PI :P Los datos tienen que estar alineados a 8 bytes. Recibe como parametros el puntero al primero QWORD y como segundo parametro la cantidad de QWORDS.
#45
Una función que obtiene un "hashtag" diferente por día...
Código: python
def todayhashtag(MAGIC = "abcdefghijklmnopqrstuvwxyz0123456789", CHR_PER_FIELD = 5):
    """
        Obtiene un hashtag unico para el dia de hoy
    """
    def struct_time_now(SERVER = 'hora.roa.es'):
        """
            Conectamos al servidor NTP (UDP, puerto 123) y obtenemos la fecha.
            En caso de cualquier problema obtiene la fecha actual del ordenador.
        """
        from time import gmtime
        try:
            from socket import socket
            from struct import unpack
            client = socket(2, 2)
            client.sendto('\x1b' + (47 *'\0'), (SERVER, 123))
            r = gmtime(unpack('!12I', client.recv(1024))[10] - 2208988800L)
        except:
            r = gmtime()
            pass
        finally:
            return r

    t = struct_time_now()
    r = "#"
    for i in [2,1,0]:
        for w in range(1, CHR_PER_FIELD+1):
            r+= MAGIC[(t[i]*w) % len(MAGIC)]

    return r


Hay dos elementos variables en la función: "MAGIC" y "CHR_PER_FIELD". El primero no es más que el listado de caracteres utilizados y el segundo es la cantidad de chars por cada valor (año, mes y día)

Ejemplo de hoy con diferentes variaciones de CHR_PER_FIELD (de 1 a 12):
Citar#qe6
#q6ei62
#q6meim62y
#q6m2eimq62yu
#q6m2ieimqu62yuq
#q6m2iyeimquy62yuqm
#q6m2iyeeimquy262yuqmi
#q6m2iyeueimquy2662yuqmie
#q6m2iyeuaeimquy26a62yuqmiea
#q6m2iyeuaqeimquy26ae62yuqmiea6
#q6m2iyeuaq6eimquy26aei62yuqmiea62

Con un valor de MAGIC más pequeño pero más pintoresco xD ("karc137" y otra vez con CHR_PER_FIELD de 1 a 12):
Citar#r1c
#r11ac7
#r171a3c7r
#r17a1a3rc7r3
#r17ac1a3r7c7r3a
#r17ac31a3r7cc7r3a1
#r17ac3k1a3r7ckc7r3a1k
#r17ac3kr1a3r7ck1c7r3a1kc
#r17ac3kr11a3r7ck1ac7r3a1kc7
#r17ac3kr171a3r7ck1a3c7r3a1kc7r
#r17ac3kr17a1a3r7ck1a3rc7r3a1kc7r3

No es muy útil que digamos... pero quería probar ciertas cosas y he decidido compartir el código xD

Saludos.
#46
Bastante info en el título. Añadid esto cerca del EntryPoint de cualquier aplicación y veréis que el OllyDbg es incapaz de realizar el análisis sin estallar.

Código: asm
    fld tword[$+6]
    dt -9.2233720368547758075e18


Respecto al error, según he leído Olly tienes problemas para leer ese número.

Saludos ;D
#47
ASM / [FASM] Ascii85 decode
Junio 16, 2013, 06:13:38 PM
Código: asm
include 'win32ax.inc'
entry main

section '.code' executable writeable readable
main:
        mov  esi, _enc
        mov  edi, esi
.m:     push 5
        pop  ecx
        xor  edx, edx
@@:     imul edx, 85
        xor  eax, eax
        lodsb
        sub  al, 33
        jl   @F
        add  edx, eax
        loop @B
        bswap edx
        mov  eax, edx
        stosd
        jmp  .m
@@:_enc:db "OH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH>QcOH?t2'*&$M",0   


Básicamente decodifica la cadena Ascii85 (AKA base85) y la ejecuta. Para generar la cadena en base85 uso este script en Python:
Código: python
import struct

def b85encode(arr):
    text = ''.join(map(chr,arr))
    l = len(text)
    r = l % 4
    if r:
        text += '\0' * (4 - r)
    longs = len(text) >> 2
    out = []
    words = struct.unpack('>' + 'L' * longs, text[0:longs*4])
    for word in words:
        rems = [0, 0, 0, 0, 0]
        for i in range(4, -1, -1):
            rems[i] = chr((word % 85)+33)
            word /= 85
        out.extend(rems)

    return ''.join(out)

print b85encode([0x90]*54 + [0xB8, 0x37, 0x13, 0x00, 0x00, 0xC3])


saludos
#48
Python / [PYTHON] Resolver URL
Junio 16, 2013, 06:13:07 PM
Código: python
from urllib2 import urlopen

def ResolveURL(URL, tOut=5):
    return urlopen(URL, timeout=tOut).geturl()

print ResolveURL("http://t.co/p1iXIjsE")
print ResolveURL("http://goo.gl/9RWVW")
print ResolveURL("http://www.google.es")


He necesitado expandir URL acortadas y he acabado con un código tan breve como eficaz. Expande incluso URL acortadas con diversos servicios anidados (como las que suele haber en Twitter). Obviamente sólo funciona con las redirecciones hechas con la cabecera HTTP, no funcionaría con servicios como No tienes permitido ver los links. Registrarse o Entrar a mi cuenta...

Saludos :-*
#49
Debido a que la forma habitual de obtener el puntero del PEB estaba haciendo que me saltasen los AVs he diseñado otra que se los salta :-* :-*

Forma habitual:
Código: asm
        xor eax, eax
        mov eax, [FS:eax+$30]


Forma que he ideado:
Código: asm
        push $30
        pop  esi
        db $64
        lodsd

(Ambas establecen EAX al puntero del PEB)
Utiliza un byte menos :P :P


Añado más métodos:


Forma ofuscada:
Código: asm
   push $30     ;v
   pop  ebx     ;>EBX = 0x30
   mov  cl, 4   ;>CL  = 4

@@:mov  al, cl  ;>AL  = CL        <<<
   db   $64     ;v                  ^
   xlatb        ;>AL  = FS:[EBX+AL] ^
   shl  eax, 8  ;>EAX <<= 8         ^
   loop @B      ;>>>>>>>>>>>>>>>>>>>^ (--ECX>0)?

Forma muy similar pero con opcodes diferentes :D (Se podría variar con muchos otros movs condicionales):
Código: asm
   xor   eax, eax
   cmovz eax, [FS:eax+$30]


Saludos :D
#50
VB6 tiene una clase que te permite obtener cierta información cuando la llamas desde un control activeX, pero las funciones las exporta con normalidad en su DLL... Así pues se puede obtener el LocaleID llamando a una función de MSVBVM60

Código: vb
Private Declare Function rtcGetHostLCID Lib "MSVBVM60" () As Long

Private Sub Form_Load()
   MsgBox rtcGetHostLCID
End Sub


No tiene ningún misterio, pero no la había visto en ningún lado.

Saludos
#51
Otros lenguajes / Windows Research Kernel v1.2
Junio 16, 2013, 06:10:19 PM
CitarWRK v1.2

The Windows Research Kernel v1.2 contains the sources for the core of
the Windows (NTOS) kernel and a build environment for a kernel that will run on
    x86     (Windows Server 2003 Service Pack 1) and
    amd64   (Windows XP x64 Professional)
A future version may also support booting WRK kernels on Windows XP x86 systems,
but the current kernels will fail to boot due to differences in some shared
structures.

The NTOS kernel implements the basic OS functions
for processes, threads, virtual memory and cache managers, I/O management,
the registry, executive functions such as the kernel heap and synchronization,
the object manager, the local procedure call mechanism, the security reference
monitor, low-level CPU management (thread scheduling, Asynchronous and Deferred
Procedure calls, interrupt/trap handling, exceptions), etc.

The NT Hardware Abstraction Layer, file systems, network stacks, and device
drivers are implemented separately from NTOS and loaded into kernel mode
as dynamic libraries.  Sources for these dynamic components are not included
in the WRK, but some are available in various development kits published
by Microsoft, such as the Installable File System (IFS) Kit and the
Windows Driver Development Kit (DDK).

WRK v1.2 includes most of the NTOS kernel sources from the latest released
version of Windows, which supports the AMD64 architecture on the Desktop.
The kernel sources excluded from the kit are primarily in the areas of
plug-and-play, power management, the device verifier, kernel debugger
interface, and virtual dos machine.  The primary modifications to WRK
from the released kernel are related to cleanup and removal of server
support, such as code related to the Intel IA64.
Código: php
https://mega.co.nz/#!g00zgRhB!LBFwwCy8VRUv1VmNUWgUEVfuA886wr7cbw0T5gtIQhY
#52
Dudas y pedidos generales / Re:Botnets Libros
Junio 15, 2013, 09:32:22 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

;D
#53
¿Podrías ofrecer más información?

No conozco muy bien como funciona el sistema de Cloudfare pero siempre que haya una conexión entre tu PC y el servidor podrás sacar la IP real. Me parece extraño que de forma gratuita hagan una redirección de TODOS los datos del servidor...
#54
Hacking ShowOff / Re:XSS en Bankia
Junio 07, 2013, 11:05:45 AM
@Jimeno: La versión de Windows lo filtra :-\


@Sanko: Sí, es gravísimo. Podrían hacer un phising de calidad. Saldría hasta el escudito que todo el mundo busca jaja
#55
Hacking ShowOff / Re:XSS en Bankia
Junio 06, 2013, 07:14:49 PM
Como era de esperar Chrome lo filtra
#56
Off Topic / Re:Vale la pena pasarme windows 8
Junio 04, 2013, 03:09:13 AM
Todos los que recomendáis distribuciones de Linux... ¿Habéis leído qué pregunta?

Windows 8 mejora notablemente la velocidad de carga del sistema además de ser más estable. Los cambios de la UI son molestos al principio pero, o bien te acostumbras o bien te instalas un addon para tener el menú de inicio del 7.

Eso sí, si eres un gamer quédate en Windows 7. He tenido muchos problemas de compatibilidad con juegos... Hay que estar metiendo parches y ejecutando con "modos de compatibilidad". Un engorro.

Saludos, espero haber sido de ayuda.
#57
Aquí está el código en VB6 por si a alguien le interesa ;D
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
#58
Windows / Re:Postea tu escritorio Windows
Mayo 27, 2013, 09:05:10 PM
#59
C / C++ / Re:[RETO] Animaos!
Mayo 26, 2013, 04:09:43 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
3'8 MB si no fallan mis cuentas (básicamente tengo unos 256MB de RAM y me funciona el código ;) )
Vaya vergüenza xD No sé ya ni dividir jajaja


¿Entonces estamos forzados a usar rand()? ¿No podemos implementar nuestro PRNG? :-[ Se podría hacer muchísimo más rápido utilizando el PRNG SIMD2 de Intel que genera 4 valores aleatorios por llamada pero para ello debes habilitar la compilación optimizada...
#60
C / C++ / Re:[RETO] Animaos!
Mayo 26, 2013, 12:50:44 PM
1000x1000x4 = 4000000 bytes = 3'8 GB :-\ No tiene sentido tener una matriz así cargada en RAM/paginación. Estaría bien que hubiese que hacer algo con esa matriz y así poder optimizar para evitar generarla o similar...

¿A que te refieres con dispersos? ¿Qué clase de test aplicas sobre ellos para saber si cumplen tu 'dispersión'? ¿Acaso no sería válido ponerlos en orden? Ya que colocándolos de forma aleatoria eso podría ocurrir :P

(EDIT) Ah, me olvidaba: ¿Como medirás la velocidad? ¿Compilador? ¿Parámetros de compilación? ¿Lo decidimos nosotros?

Me encantan los retos :P Saludos ;D