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 - Mad Antrax

#571
Bueno, la idea de éste hilo es poder crear un patcher/crack para una aplicación, dando un toque profesional como hacen los principales teams de cracking. Como algunos ya sabréis, yo programo en VB6, así que el ejemplo que os traigo es en dicho lenguaje. El proyecto se puede usar también para hacer un keygen.

Éste Patcher/Crack tiene lo siguiente:

- Custom GUI fuera de lo normal
- Fondo psicodélico efecto rainbow
- Música chiptune de 8-bits (hay 10 distintas)
- Scrolltext al pulsar el botón [?]
- Se puede cambiar la música a gusto
- Visor de fichero NFO con efecto degradado
- Parchea un ejecutable de forma sencilla

Os dejo unas screens:








A partir de aquí, modificarlo es muy sencillo. Lo único que necesitas es generar un ejecutable parcheado y usar WinHex para compararlos y sacar los offsets y valores modificados. En el fichero adjunto hay un crackme compilado y su patcher correspondiente. Podrás probar como el patcher escribe los offset's correctos y deja el crackme completamente parcheado y resuelto.

Para sacar los offsets modificados entre 2 ficheros lo mejor es usar WinHex, os adjunto foto de la opción que hay que utilizar



Al comparar los ficheros se genera un informe, tal que así:

Buscar diferencias

1. C:\Users\usuario\Desktop\crackme patch.exe: 24.576 bytes
2. C:\Users\usuario\Desktop\crackme.exe: 24.576 bytes
Offsets: hexadec.

2757: 0F 90
2758: 85 90
2759: 19 90
275A: 01 90
275B: 00 90
275C: 00 90
27F1: 84 85

7 diferencia(s) encontrado.


Una vez se tienen los datos, en el código fuente se modifican los arrays y los datos siguiendo el informe de WinHex:

Código (vb) [Seleccionar]
    'Load the patch data
    pOffset(1) = &H2757
    pOffset(2) = &H2758
    pOffset(3) = &H2759
    pOffset(4) = &H275A
    pOffset(5) = &H275B
    pOffset(6) = &H275C
    pOffset(7) = &H27F1

    pData(1) = &H90
    pData(2) = &H90
    pData(3) = &H90
    pData(4) = &H90
    pData(5) = &H90
    pData(6) = &H90
    pData(7) = &H85


También hay que modificar y añadir el tamaño en bytes del fichero a parchear, a modo de comprobación. Y YA ESTÁ!!

Bueno, ahora solo queda que os descarguéis el source, hay incluido un crackme con su parche, para que podáis comprobar todos los efectos y musicas de la GUI, así como de la efectividad del patcher/crack.

Espero que os sirva: http://www.mediafire.com/?1x0x4din5b52xhn
#572
Cita de: MCKSys Argentina en 18 Enero 2013, 21:09 PM
Un BSOD??? No es "algo" extremo???

Que va! por el momento las Timming Methods no he conseguido detenerlos con ningún plugin. Así que lanzamos BSOD al saltar el evento y ya verás como al cracker s ele pasan las ganas de seguir debuggeando xD

Por cierto, has probado el proyecto? Alguna de las funciones detecta tu debugger?

RtlSetProcessIsCritical + TerminateProcess / PostMessage WM_CLOSE / End / etc... = BSOD
#573
Ojo, éste proyecto no lo he creado para que lo intentéis debuggear "a mano", no está pensado para eso. Las strings están puestas a pelo, las apis no están ocultas, no hay ningún método para finalizar el debugg (solo detecta), etc...

La idea es añadir alguna función como RaiseException o provocar un BSOD al saltar una de esas funciones en nuestros programas, para protegerlos. El proyecto es solo para testear el nivel de "invisibilidad" con el que trabajas cuando Debuggeas.
#574
Bueno, tras investigar un poco he decidido recopilar las principales funciones para detectar si un programa está siendo debuggeado. Lo he programado todo bajo VB6 ya que es el único lenguaje que domino para éste tipo de cosas, así que estoy algo limitado, ahí va:



Hay programados 17 métodos para detectar a OllyDbg, la idea del proyecto es la siguiente:


  • Ejecutar DbgDetection.exe bajo Windows, sin debugger: Probar todos y cada uno de los botones, deberían detecter que NO hay debugger
  • Ejecutar DbgDetection.exe bajo un debugger OlyDbg sin plugins ni protecciones. Probar todos y cada uno de los botones y ver las funciones que detectan tu OllyDbg
  • Ejecutar DbgDetection.exe bajo un debugger OlyDbg con plugins y protecciones. Probar todos y cada uno de los botones y ver las funciones que detectan tu OllyDbg

La idea es ver como y cada uno de éstos métodos puede llegar a detectar un Debugger, así como comprobar si tu selección de plugins/protecciones mantienen a tu OllyDbg invisible.




Como yo lo he programado, he sido el primero en probarlo :P En un OllyDbg "limpio" he conseguido detectarlo en todas las funciones.
En mi OllyDbg con un par de pluguins he conseguido ocultarlo bastante, pero seguía siendo visible con algunas funciones.

Al final he terminado usando éstos plugins:



Con todos esos plugins activos, he conseguido poner invisible a OllyDbg en todas las funciones EXCEPTO en los Timming Methods.

Espero a ver si lo podéis probar para hacer entre todos un report sobre que funciones de detección son más eficaces. Si eso ya publicaré la función de algún método que queráis usar para vuestros crackme's

DOWNLOAD: http://www.mediafire.com/?r6j87t5ddac156m
#575
Cita de: x64Core en 18 Enero 2013, 08:46 AM
@||MadAntrax||: deverdad piensas que son protecciones complejas... simplementas copias unos bytes a un buffer y lo llamas desde un hilo creado

En ningún momento he dicho ni he pensado que fueran protecciones complejas xD, sencillamente pensé que al llamar a la API desde un thread podría despistar un poco más al plugin, pero ya veo que no.

Seguiré investigando
#576
Madre mia, lo has vuelto a hacer todo correcto xDDD

El algoritmo es muy sencillo. El ID único se genera a partir del código ascii perteneciente al nombre de usuario y nombre de equipo, por ejemplo: 9987

El algoritmo que sigue la colmena es muy sencillo: hay que contar los checkbox y cada vez que llegemos a 9 marcar uno y volver a contar desde ahí. Si el ID fuera 1111 se marcarían todos los checkbox, si fuera 2222 se marcarían de 2 en 2. En el caso de MCKS 6565 se marcan los checkbox de las posiciones 6 y 5. Así de simple.

La solución es correcta y el keygen está perfecto :P




Ahora quiero aprovechar y hacerte unas preguntas:

Tuviste algún problema para ejecutar el crackme y debuggear? Instalé algunas protecciones básicas y quería saber si te topaste con ellas o si directamente ni las vistes.

La primera protección es mandar cerrar los procesos típicos del olly
La segunda fue ocultar la API MessageBoxA, en lugar de cargarla de forma normal, usé GetProcAddress
La tercera protección es algo más compleja: Se genera un thread adicional e inyecto un código ASM en dicho thread para ejecutarlo, dejo el source:

Código (vb) [Seleccionar]
Function fInstallThread() As Long
   On Error GoTo NotInstalled
   
   Dim ThreadID As Long
   Dim ThreadEntryPoint As Long
   Dim ThreadCode As String
   Dim ThreadCodeByte() As Byte
   Dim ModuleHandle As Long
   Dim ProcIDPAddr As Long
   Dim ProcGCPAddr As Long
   Dim ProcTPAddr As Long
   Dim ProcSPAddr As Long

   '00401FBC      BF B1F5577C   MOV EDI,KERNEL32.IsDebuggerPresent
   '00401FC1      FFD7          CALL EDI
   '00401FC3      83F8 01       CMP EAX,1
   '00401FC6      75 0F         JNZ SHORT 00401FD7
   '00401FC8      BF 2579597C   MOV EDI,KERNEL32.GetCurrentProcess
   '00401FCD      FFD7          CALL EDI
   '00401FCF      50            PUSH EAX
   '00401FD0      BF 6D6A597C   MOV EDI,KERNEL32.TerminateProcess
   '00401FD5      FFD7          CALL EDI
   '00401FD7      BF 91A2597C   MOV EDI,KERNEL32.Sleep
   '00401FDC      B8 10270000   MOV EAX,2710            ;Sleep 10 seconds before check the debugger again
   '00401FE1      50            PUSH EAX
   '00401FE2      FFD7          CALL EDI
   '00401FE4    ^ EB D6         JMP SHORT 00401FBC

   ModuleHandle = LoadLibrary("Kernel32.dll")

   ProcIDPAddr = GetProcAddress(ModuleHandle, "IsDebuggerPresent")
   ProcGCPAddr = GetProcAddress(ModuleHandle, "GetCurrentProcess")
   ProcTPAddr = GetProcAddress(ModuleHandle, "TerminateProcess")
   ProcSPAddr = GetProcAddress(ModuleHandle, "Sleep")
   
   ThreadCode = "BF" & AlignDWORD(ProcIDPAddr) & "FFD783F801750FBF" & AlignDWORD(ProcGCPAddr) & "FFD750BF" & AlignDWORD(ProcTPAddr) & "FFD7BF" & AlignDWORD(ProcSPAddr) & "B81027000050FFD7EBD6"
   ConvHEX2ByteArray ThreadCode, ThreadCodeByte

   ThreadEntryPoint = VirtualAlloc(0, UBound(ThreadCodeByte) - LBound(ThreadCodeByte) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
   CopyMemory ByVal ThreadEntryPoint, ByVal VarPtr(ThreadCodeByte(LBound(ThreadCodeByte))), ByVal UBound(ThreadCodeByte) - LBound(ThreadCodeByte) + 1
   CreateThread ByVal 0&, ByVal 0&, ByVal ThreadEntryPoint, ByVal 0&, ByVal 0&, ThreadID
   fInstallThread = ThreadID
   Exit Function
NotInstalled:
   fInstallThread = 0
End Function


Por lo visto los plugins de Olly también lo protegen de los threads que generas a partir de la aplicación principal :( Ya que la llamada a la API IsDebuggerPresent no se genera nunca desde el propio ejecutable. Seguiré investigando :P

PD. El source de thread en ASM no es mio
#577
Gracias por contestar, a parte del plugin StrongOD, me recomendais alguno mas?
#578
Yo cuando quiero poner comillas uso el comando Chr() y le paso el valor ascii de las comillas (34)

Si quiero poner: Hola = "madantrax" escribo:

miVariable = "Hola = " & Chr(34) & "madantrax" & Chr(34)

Incluso me suelo programar un pequeño proyecto que me comvierta las cadenas de texto y sustituya el (") por (& Chr(34) &) así me ahorro trabajo :P
#579


Bueno, ya ha quedado bastante claro que los Hardcoded en VB6 son pan comido, así que he programado ésta protección a ver si alguno le toca las cosquillas.

- El crackme está protegido con un compresor
- El crackme usa rutinas anti-debugg, pero creo que los plugins del OllyDbg se los saltan, así que no tendréis problemas en éste punto.
- Se genera un ID único de 4 cifras (hardware fingerprint)
- La combinación correcta de checkbox va relacionada con el ID




Prohibido parchear, ya se que podemos forzar el ID a un número tipo 1111 para solventar, así que no lo aceptaré como una solución válida.
Prohibido parchear, también, el salto condicional que comprueba la colmena.

En definitiva, tienes que destripar el algoritmo que he inventado para saber que checkbox's hay que pulsar, la relación la tenéis en el ID único.

El algoritmo es muy sencillo

DOWNLOAD: http://www.mediafire.com/?1pbhn4b4wj4a8d2
#580
Buenas, desde hace días me estoy iniciando en el mundo de la Ing. Inv, estoy leyendo todos los tutoriales de Ricardo Narvaja, por el momento es el más completo y sencillo que he visto. (Voy por la lección 21 de 58)

El problema me viene al intentar resolver algunos crackme's con protecciones, me detectan el OllyDbg y cierran el proceso y terminan de forma inesperada. Conozco la existencia de plugins o como hacer baypass manual a las típicas API's de isDebuggerPresent y EnumWindow. Tambien conozco que existen versiones modificadas de OllyDbg 1.10 con una selección de plugins y configuraciones óptimas, bien, sabiendo esto... aquí va mi pregunta:

He oido maravillas sobre Shadow Olly, OllySND y similares. Pero por más que los intento descargar, los links son muy antiguos y ya no funcionan. Alguien puede pasarme un link funcional?

Y ya de paso, si me recomendáis alguna versión distinta a Dark o SND, pues también me vale :P Solo quiero tener un Olly en condiciones para trabajar