Realmente no entiendo cómo moverse por IsDebuggerPresent. Creo que se supone que debo encontrar los registros utilizados para la depuración y luego configurarlo en 0 para engañar a IsDebuggerPresent, pero no sé cómo hacerlo. Intenté buscar en Google e incluso intenté algunas soluciones, pero en realidad no funcionó. ¿Podría alguien explicarme cómo debería funcionar esto y cómo evitarlo?¿Cómo eludir IsDebuggerPresent con OllyDbg?
Respuesta
Hay muchas formas de hacerlo. Como dijiste, es posible parchear el bloque de hilos del programa. Aquí hay un tutorial, cómo moverse IsDebuggerPresent, simplemente remendar esta función por lo que siempre devuelve 0.
1) localizar IsDebuggerPresent
En mi situación, es por lo 7664EFF7, y consisten de solo tres instrucciones + una RET. Lee el bloque de subprocesos (la dirección está en FS: 18) y luego localiza el byte que dice "me están depurando" y lo devuelve. El valor de devoluciones se almacena en EAX (como para la mayoría de las funciones de WINAPI). Si modifico la función para que al final tenga EAX = 0, habrá superado con éxito IsDebuggerPresent.
2) parche
Ahora, la forma más fácil de hacerlo es simplemente hacer la función simplemente hacer una instrucción MOV EAX, 0
y luego un RETN
:
Tenga en cuenta que también llena el resto de la función con NOP para evitar cambiar el tamaño de la misma. Probablemente no sea necesario, también puede hacer MOV EAX, 0
y luego solo RETN
.
También debe saber que la modificación solo es válida para una ejecución del programa. Cuando lo reinicie, cargará una nueva copia de kernel32.dll (donde se encuentra IsDebuggerPresent) con la función original, y tendrá que volver a aplicar el parche. Si desea que el parche sea permanente, debe modificar el binario de inicio y modificar/eliminar la llamada a esta función. Pero antes de hacerlo, también debe asegurarse de que el binario no se revise a sí mismo para ver si hay modificaciones.
¿Hay alguna manera de buscar el código para "FS"? Además, veo varias instancias de IsDebuggerPresent ... En realidad, ni siquiera estoy realmente seguro de cómo puedo encontrar 'FS' y el lugar correcto para eliminarlo. En todas partes, veo 'MOV DWORD PTR', p. 'MOV DWORD PTR FS: [0], EAX' y' MOV EAX, DWORD PTR DS: [13000] ' – Strawberry
Lo acabo de encontrar siguiendo las llamadas a la función. Además, entendí que IsDebuggerPresent generalmente se usa para agregar basura para desordenar cada idea. ¿Debo guardarlo después de cambiar el 'EAX = 0' y luego volver a abrirlo, para que no cargue basura? No estoy muy seguro de cómo funciona, lo siento! – Strawberry
Solo debe haber un lugar, donde se defina IsDebuggerPresent, dentro de kernel32.dll. Puede haber muchas * llamadas *, pero si aplica la función de parche, todas las llamadas recibirán "0" como respuesta. Debe aplicar el parche antes de ejecutar el programa, y debe aplicarlo cada vez que lo ejecute. – kuba
inyectar este código en su proceso:
mov eax,dword ptr fs:[18]
mov eax,dword ptr ds:[eax+30]
mov byte ptr ds:[eax+2],0
Esto le parchear el PEB.BeingDebugged
flag, asegurando IsDebuggerPresent
siempre devuelve 0
Al utilizar x64dbg puede ejecutar el comando dbh
.
si desea que su aplicación nunca comprobarlo hacer esto:
- Prensa
Alt + e
o abiertaExecutable modules
ventana. - Seleccionar
C:\WINDOWS\system32\kernel32.dll
y pulsectrl + N
IsDebuggerPresent
seleccione y pulse ENTER.- presione
f2
- ejecute el programa y espere la interrupción de su programa en este código de operación.
- presione algunos
f8
hasta que regrese a su código. - mirando hacia arriba para algo así como
TEST EAX,EAX
y después de algo comoje
jnz
y etc, tenga cuidado de la salida deIsDebuggerPresent
se guarda enEAX
. - si salta en este código de operación cámbielo a
nop
y si no lo hace cambie ajmp
. - guarde su programa. si no sabe cómo guardar el código modificado en ollyDBG, simplemente búsquelo.
- 1. ¿Hay un C# equivalente a IsDebuggerPresent()?
- 2. ¿Cómo cambiar el valor de EIP en ollydbg?
- 3. Tipo Erasure levanta su cabeza fea, ¿cómo eludir?
- 4. ¿Puede el compilador eludir la siguiente copia?
- 5. ¿Cómo eludir la restricción de la etapa de GHC?
- 6. ¿Cómo eludir la validación de un botón en ASP.NET?
- 7. `return None` en python no recomendado. Cómo eludir?
- 8. ¿Hay algún módulo Perl que pueda automatizar ollydbg?
- 9. ¿Cuáles son las diferencias entre OllyDbg y WinDbg?
- 10. ¿Ant ofrece una forma de eludir la dependencia?
- 11. ¿Hay alguna forma de eludir SSP (StackSmashing Protection)/Propolice?
- 12. ¿Cómo eludir la política del mismo origen para un sitio https de terceros?
- 13. Cómo eludir el límite del rango 0-255 para sys.exit() en python?
- 14. ¿Hay un desensamblador + depurador para java (ala OllyDbg/SoftICE para ensamblador)?
- 15. Cómo eludir el error "Método demasiado grande" en la compilación de Java?
- 16. nosetests está capturando la salida de mis instrucciones de impresión. ¿Cómo eludir esto?
- 17. ¿Cómo eludir el uso de un parámetro out en un bloque de método anónimo?
- 18. Cómo eludir la función de búsqueda rápida de Firefox y capturar la barra inclinada presiona
- 19. la manera de eludir "Visual Studio Just-In-Time depurador" pronta
- 20. ¿Se pueden usar los genéricos Can C# para eludir llamadas a funciones virtuales?
- 21. ¿Alguna forma de eludir la excepción "Los cuadros de diálogo deben ser iniciados por el usuario"?
- 22. Cómo eludir el límite de tamaño de un inicializador estático en Java para inicializar grandes cantidades de constantes
- 23. Uso de Node.js para transmitir audio a la etiqueta de audio html5 y eludir la limitación de iOS
- 24. ¿Cómo implementar una interfaz explícitamente con un método virtual?
- 25. ¿Procesos de muerte abiertos con popen()?
- 26. ¿Cómo puedo eliminar una carpeta o archivo con ruta demasiado tiempo en la papelera de reciclaje?
- 27. Cómo trabajar con píxeles con Direct2D
- 28. Cómo trabajar con columpios con múltiples clases
- 29. URISyntaxException - Cómo tratar con las URL con%
- 30. Serializar un mapa que no tiene una cadena como clave con lift-json
¿Has probado los complementos olly como [Ocultar depurador] (https://tuts4you.com/download.php?view.57) o [Olly Advanced] (https://tuts4you.com/download.php? view.75)? estos son mucho más fáciles de usar en lugar de modificar manualmente el código cada vez. – Arash