elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 ... 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 [58] 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 ... 102
571  Programación / Ingeniería Inversa / [Tutorial] Programar un patcher/crack con estilo en: 20 Enero 2013, 22:16 pm
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í:

Código:
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
  1.    'Load the patch data
  2.    pOffset(1) = &H2757
  3.    pOffset(2) = &H2758
  4.    pOffset(3) = &H2759
  5.    pOffset(4) = &H275A
  6.    pOffset(5) = &H275B
  7.    pOffset(6) = &H275C
  8.    pOffset(7) = &H27F1
  9.  
  10.    pData(1) = &H90
  11.    pData(2) = &H90
  12.    pData(3) = &H90
  13.    pData(4) = &H90
  14.    pData(5) = &H90
  15.    pData(6) = &H90
  16.    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  Programación / Ingeniería Inversa / Re: Proyecto: DbgDetections (Testea la dureza de tu OllyDbg) en: 18 Enero 2013, 21:18 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  Programación / Ingeniería Inversa / Re: Proyecto: DbgDetections (Testea la dureza de tu OllyDbg) en: 18 Enero 2013, 21:05 pm
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  Programación / Ingeniería Inversa / Proyecto: DbgDetections (Testea la dureza de tu OllyDbg) en: 18 Enero 2013, 21:02 pm
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  Programación / Ingeniería Inversa / Re: Crackme V3 Colmena de CheckBox en: 18 Enero 2013, 09:22 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  Programación / Ingeniería Inversa / Re: Crackme V3 Colmena de CheckBox en: 18 Enero 2013, 08:16 am
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
  1. Function fInstallThread() As Long
  2.    On Error GoTo NotInstalled
  3.  
  4.    Dim ThreadID As Long
  5.    Dim ThreadEntryPoint As Long
  6.    Dim ThreadCode As String
  7.    Dim ThreadCodeByte() As Byte
  8.    Dim ModuleHandle As Long
  9.    Dim ProcIDPAddr As Long
  10.    Dim ProcGCPAddr As Long
  11.    Dim ProcTPAddr As Long
  12.    Dim ProcSPAddr As Long
  13.  
  14.    '00401FBC      BF B1F5577C   MOV EDI,KERNEL32.IsDebuggerPresent
  15.    '00401FC1      FFD7          CALL EDI
  16.    '00401FC3      83F8 01       CMP EAX,1
  17.    '00401FC6      75 0F         JNZ SHORT 00401FD7
  18.    '00401FC8      BF 2579597C   MOV EDI,KERNEL32.GetCurrentProcess
  19.    '00401FCD      FFD7          CALL EDI
  20.    '00401FCF      50            PUSH EAX
  21.    '00401FD0      BF 6D6A597C   MOV EDI,KERNEL32.TerminateProcess
  22.    '00401FD5      FFD7          CALL EDI
  23.    '00401FD7      BF 91A2597C   MOV EDI,KERNEL32.Sleep
  24.    '00401FDC      B8 10270000   MOV EAX,2710            ;Sleep 10 seconds before check the debugger again
  25.    '00401FE1      50            PUSH EAX
  26.    '00401FE2      FFD7          CALL EDI
  27.    '00401FE4    ^ EB D6         JMP SHORT 00401FBC
  28.  
  29.    ModuleHandle = LoadLibrary("Kernel32.dll")
  30.  
  31.    ProcIDPAddr = GetProcAddress(ModuleHandle, "IsDebuggerPresent")
  32.    ProcGCPAddr = GetProcAddress(ModuleHandle, "GetCurrentProcess")
  33.    ProcTPAddr = GetProcAddress(ModuleHandle, "TerminateProcess")
  34.    ProcSPAddr = GetProcAddress(ModuleHandle, "Sleep")
  35.  
  36.    ThreadCode = "BF" & AlignDWORD(ProcIDPAddr) & "FFD783F801750FBF" & AlignDWORD(ProcGCPAddr) & "FFD750BF" & AlignDWORD(ProcTPAddr) & "FFD7BF" & AlignDWORD(ProcSPAddr) & "B81027000050FFD7EBD6"
  37.    ConvHEX2ByteArray ThreadCode, ThreadCodeByte
  38.  
  39.    ThreadEntryPoint = VirtualAlloc(0, UBound(ThreadCodeByte) - LBound(ThreadCodeByte) + 1, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
  40.    CopyMemory ByVal ThreadEntryPoint, ByVal VarPtr(ThreadCodeByte(LBound(ThreadCodeByte))), ByVal UBound(ThreadCodeByte) - LBound(ThreadCodeByte) + 1
  41.    CreateThread ByVal 0&, ByVal 0&, ByVal ThreadEntryPoint, ByVal 0&, ByVal 0&, ThreadID
  42.    fInstallThread = ThreadID
  43.    Exit Function
  44. NotInstalled:
  45.    fInstallThread = 0
  46. End Function
  47.  

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  Programación / Ingeniería Inversa / Re: Que versión de Olly necesito? en: 17 Enero 2013, 23:42 pm
Gracias por contestar, a parte del plugin StrongOD, me recomendais alguno mas?
578  Programación / Programación Visual Basic / Re: comillas en vb6 print en: 17 Enero 2013, 19:44 pm
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:

Código:
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  Programación / Ingeniería Inversa / Crackme V3 Colmena de CheckBox en: 17 Enero 2013, 19:35 pm


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  Programación / Ingeniería Inversa / Que versión de Olly necesito? en: 17 Enero 2013, 15:32 pm
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
Páginas: 1 ... 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 [58] 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 ... 102
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines