Tengo que usar el teclado en pantalla de Windows 7 para escribir:
(En caso de que aún no lo haya usado, puede obtenerlo a través de: Todos los programas -> Accesorios -> Facilidad de acceso -> Teclado en pantalla
o simplemente busque "osk.exe")
Ofrece una función para "desplazarse" sobre los botones. Microsoft lo describe de la siguiente manera:
En el modo de desplazamiento, utiliza un mouse o un joystick para señalar una tecla durante un período de tiempo predefinido, y el carácter seleccionado se escribe automáticamente.
Ahí está mi problema específico. El período de tiempo predefinido es demasiado largo para ser útil para mí. El tiempo mínimo es de 0,5 segundos (máximo 3 segundos).
¿Hay alguna forma de alterar este valor a algo < 0.5? Por ejemplo, mediante la edición del registro?
Editar: la entrada HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriod
no se puede establecer a menos de 500 ms.
Editar (2): creo que la única forma de solucionar mi problema es descompilar el archivo .exe (supongo que está escrito en C o?) Y cambiar el tiempo mínimo. Entonces tengo que compilarlo de nuevo. ¿Es este procedimiento incluso viable? ¿Qué cosas pueden fallar?
¡Cualquier consejo útil sería genial!
fuente
Respuestas:
¿Dónde en el código encuentra nuestra clave?
Usando Process Monitor, profundizando en el evento ETL que lee el seguimiento de la pila de valores nos da:
Podemos ver que
OSKSettingsManager::GetOskSetting
lee el valor.Entonces, ¿cómo se ve esa porción? ¿Podemos depurarlo?
Analizando esa función con WinDBG, accede a esa clave de registro justo antes
000007f7 23560517
.Ahora, el problema aquí es que cuando intento establecer un punto de interrupción en esa ubicación ya no puedo escribir nada porque se
osk.exe
agrega a los controladores de entrada. Esto se puede ver fácilmente manteniendo presionada una tecla modificadora como Alten su teclado, esto lo enciendeosk.exe
.Al mirar el código en busca de sumas o restas, solo veo que algo sucede con
40
hexadecimal que es64
decimal. Entonces eso tampoco es nada relacionado con el número.Puede estar en una de las cuatro
cmp
instrucciones (comparar), pero eso requeriría información de depuración. O podría suceder en una función superior, lo que requeriría más investigación. Pero sin la capacidad de depurarlo sin perder capacidades de entrada, esto es algo muy difícil de hacer ...Parece que encontrar la ubicación correcta requerirá un cable de depuración ya que la computadora en la que depura pierde sus capacidades de entrada, o es demasiado lenta debido a la sobrecarga de la depuración. Como actualmente no tengo una computadora portátil con un puerto de 1943, no puedo hacer esta depuración yo mismo. Sería capaz de hacer esto, y sí, literalmente congelaría su sistema operativo. Depurar un sistema operativo en lugar de una aplicación es divertido ... ^^
¡Espera, tenemos acceso a los símbolos! ¿Podemos encontrar el código ofensivo?
Mirando más de cerca, notará la función ofensiva:
Si pasamos por esa función, primero vemos:
De acuerdo, esto compara algo y luego salta a otra ubicación. ¿Qué hay ahí?
Entonces, si la condición decide que debe saltar, simplemente abandonará la función y no cambiará nada.
Entonces, ¿cómo hacemos que siempre salga de la función?
Cambie la
jz
instrucción a unajmp
instrucción que siempre haga el salto, puede encontrarla en un desplazamiento relativo41BC10
. En caso de que su programa calcule compensaciones diferentes, debe saber que las utiliza401000
como base, de modo que restar nos da la compensación absoluta1AC10
.Tenga en cuenta que cambiar
74
(JZ
) en el editor hexadecimal aE9
(JMP
) no funcionará. No puede hacer esto en un editor hexadecimal, necesitará algo que desmonte y vuelva a ensamblar el código, pero que no sea necesariamente fácil de encontrar (por ejemplo, IDA Professional por el que las personas realmente pagan, no puede producir el código c adecuado o un ejecutable. OllyDBG, comúnmente utilizado en la comunidad de parches, ni siquiera puede abrir el ejecutable). Y luego, incluso, Microsoft podría estar protegiendo su ejecutable contra la manipulación, porque esto podría considerarse contra el EULA; ¡buena suerte!Meh Esto es difícil, solo quiero escribir rápido usando mi mouse / ojos / ...
Definitivamente deberías echar un vistazo a Dasher, que es mucho más rápido que un teclado en pantalla. Simplemente funciona moviendo el mouse hacia las letras; El movimiento horizontal determina la velocidad y el movimiento vertical selecciona las letras. Con un diccionario incorporado, incluso puede dimensionar las letras más probables para que sean más grandes, también trata de aprender de su movimiento de modo que la velocidad y las letras estén realmente acostumbradas a su uso.
Una imagen habla más que mil palabras ...
Por supuesto, esto es bastante pequeño y no muy rápido, ya que es un ejemplo, pero puede cambiar su tamaño para que esté en el lado derecho de su pantalla de modo que no interfiera con su pantalla. Esto le permite escribir lo más rápido que pueda ...
Aquí hay un buen ejemplo de cómo las predicciones le permiten escribir cualquier idioma más rápidamente:
También tenga en cuenta que las letras a la derecha están ordenadas en un orden específico, de modo que la dirección principal (arriba, media o abajo) elige entre los diferentes tipos (minúsculas, mayúsculas, números y puntuación); y luego dentro de esa dirección principal, su dirección menor elegirá entre AZ, az, 0-9, etc. Lo he usado en el pasado y realmente me sorprendió lo fluido que es en comparación con otros competidores ...
También tenga en cuenta que Dasher tiene alguna configuración, por lo que es posible que pueda ajustar algo que no le gusta.
fuente
Using Process Monitor, digging into the for the ETL event reading out that value stack trace gives us:
sabido que verifiqué el seguimiento de la pila para el evento ETL. ¿Supongo que estás hablando de tus propias respuestas aquí? Debido a que responde con una gran cantidad, sus respuestas realmente carecen de cierta calidad. Considere mejorar y / o eliminar sus respuestas en lugar de colocar respuestas rápidas y sucias o comentarios tontos que no tienen la intención de mejorar las preguntas y respuestas; puedes adivinar qué enfoque ayudará más a la comunidad ...The decompilation help. Once located, you should patch the binary code.
es útil, preferiría un ejercicio ultra largo y para llevar a casa en lugar de rascarse el cabello ...Me temo que la mayoría de los descompiladores no producirán un resultado lo suficientemente bueno que se pueda volver a compilar.
La descompilación solo puede ayudar a determinar el área que
HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriod
se utiliza, para descubrir dónde se lee este valor y dónde se aplica el límite de 500 ms.Una vez ubicado, debe parchear el código binario para deshabilitar la prueba y hacer que HoverPeriod sea más pequeño. Parchear el binario es mucho más factible que recompilar.
Es posible que deba repetir el esfuerzo si osk.exe alguna vez se reemplaza por Windows Update (que realmente no espero que suceda).
[EDITAR]
Para ayudarlo más en el camino, aquí hay algunas palabras sobre utilidades y su uso.
Puede usar un descompilador C o un desensamblador. El tipo posterior puede ser más útil, aunque requiere un pequeño conocimiento del conjunto de instrucciones de Intel. También necesitará un buen editor hexadecimal, y hay algunos que anuncian capacidades de desensamblador (consulte el enlace a continuación).
El proyecto Fenris se anuncia a sí mismo como "un conjunto de herramientas adecuadas para el análisis de código, depuración, análisis de protocolo, ingeniería inversa, análisis forense, diagnóstico, auditorías de seguridad, investigación de vulnerabilidades y muchos otros propósitos". Suena bien y recomendado por muchos, pero no tengo experiencia con eso.
REC Studio Decompiler intenta producir una representación tipo C del código y los datos utilizados para construir el archivo ejecutable.
Boomerang es un descompilador general, de código abierto, retargetable de programas de código de máquina.
Se pueden encontrar muchas más de estas utilidades buscando en Google o en:
wikibooks x86 Desmontaje / Herramientas de análisis
wikibooks x86 Desmontaje / Desmontadores y descompiladores
Directorio abierto: Desmontadores
Un paso preliminar es desmontar osk. El listado resultante puede ser voluminoso y requerir un buen editor de texto (normalmente, Notepad ++ es suficiente).
Busque la cadena "HoverPeriod" (no distingue entre mayúsculas y minúsculas). Si tiene suerte, el desensamblador lo ha identificado como una cadena y puede encontrarlo tal como está. De lo contrario, deberá buscarlo byte a byte. Como una cadena Unicode, se verá
H,0,o,0,v,0...
donde las letras deben ser reemplazadas por sus códigos numéricos.Una vez que haya encontrado la cadena "HoverPeriod", el desensamblador debería haber colocado una etiqueta en algún lugar antes. Use el nombre de esta etiqueta generada para buscar dónde se usa, para identificar dónde se recupera del registro y en qué variable global se almacena el resultado.
Una vez que haya localizado la variable que contiene el conteo, busque dónde se usa. Lo que hará dependerá del formato del código que encontrará. Luego puede decidir el parche que desee.
Por ejemplo, es posible que desee utilizar el editor hexadecimal para reemplazar en osk.exe un comando como:
dentro
Tenga cuidado con las diferentes longitudes de comando, donde si el nuevo comando es más corto, deberá rellenarse con instrucciones NOP de un byte (sin operación) a la longitud de la instrucción anterior.
La localización del comando para parchar en osk.exe puede requerir buscar si las compensaciones que proporciona el desensamblador están en el código y no en el archivo exe. Si el editor hexadecimal no admite la búsqueda de ensamblador, realice el desmontaje mientras enumera los bytes de instrucciones originales para que sepa qué bytes binarios buscar. Evite buscar instrucciones que contengan direcciones, ya que las direcciones pueden reubicarse en el archivo exe, por lo tanto, busque una secuencia de bytes cercana a dicha instrucción.
Puede crear los nuevos bytes de parche directamente en el editor hexadecimal si es compatible con el ensamblador. O si no lo hace y no se siente cómodo con el código de máquina Intel, busque un ensamblador para compilar su nuevo código y use su listado para obtener los bytes compilados que se usarán para parchear.
fuente
¿Puedo sugerir usar AutoIt para automatizar el clic?
La idea sería monitorear el ralentí del mouse cuando el cursor está dentro de la ventana en pantalla (por ejemplo, en un bucle de control, verificando a intervalos regulares si el cursor ha cambiado de posición) y hacer clic automáticamente (llamar a la función SendClick) después de, por ejemplo, 100 ms de inactividad
Supera ingeniería inversa un .exe.
fuente
Quizás no tenga que recompilar todo. En el mundo del juego es común usar entrenadores, que manipulan un valor en la memoria cuando el programa se está ejecutando. Si encuentra el valor mínimo en la memoria (0.5) y programa algo como un cargador para reducir ese número, podría funcionar.
fuente
500
lugar, ya que así es como lo carga, no como flotante.osk.exe
no está en la lista de procesos. Esto se debe a que se inicia en el contexto dewinlogon
tal manera que funciona en todos los usuarios, puede evitar esto iniciando el editor de memoria también en el contextowinlogon
.osk.exe
pero eso solo funcionaría si crea un iniciador que inicie tanto el editor de memoria como La copia de seguridadosk.exe
. Pero entonces tendrías que considerar que un cargador también necesitaría hacer eso. Parece que esta solución se está volviendo tan difícil como desarmar y ensamblar,osk.exe
es difícil ... :)