Do pisania muszę używać klawiatury ekranowej systemu Windows 7:
(Jeśli jeszcze go nie używałeś, możesz uzyskać: Wszystkie programy -> Akcesoria -> Łatwość dostępu -> Klawiatura ekranowa
lub po prostu wyszukaj „osk.exe”)
Oferuje funkcję „najechania” przyciskami. Microsoft opisuje to jako:
W trybie najechania myszą lub joystickiem wskazujesz klawisz na zdefiniowany wcześniej czas, a wybrany znak jest wpisywany automatycznie.
Jest mój konkretny problem. Z góry określony czas jest zbyt długi, aby był dla mnie użyteczny. Minimalny czas wynosi 0,5 sekundy (maks. 3 sekundy).
Czy jest jakiś sposób na zmianę tej wartości na coś < 0,5? Na przykład poprzez edycję rejestru?
Edycja: Wpisu HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriod
nie można ustawić na mniej niż 500 ms.
Edycja (2): Myślę, że jedynym sposobem na rozwiązanie mojego problemu jest dekompilacja pliku .exe (chyba napisany w C lub?) I zmiana minimalnego czasu. Potem muszę go skompilować ponownie. Czy ta procedura jest w ogóle wykonalna? Co może zawieść?
Każda pomocna wskazówka byłaby świetna!
źródło
Odpowiedzi:
Gdzie w kodzie znajduje się nasz klucz?
Korzystając z Monitora procesów, zagłębianie się w zdarzenie ETL odczytujące ślad stosu wartości daje nam:
Widzimy, że
OSKSettingsManager::GetOskSetting
odczytuje wartość.Jak więc wygląda ta część? Czy możemy to debugować?
Patrząc na tę funkcję w WinDBG, uzyskuje dostęp do tego klucza rejestru już wcześniej
000007f7 23560517
.Problem polega na tym, że kiedy próbuję dokonać punktu przerwania w tej lokalizacji, nie mogę już nic pisać, ponieważ
osk.exe
dodaje się do sterowników wejściowych. Można to łatwo zauważyć, przytrzymując klawisz modyfikujący Altna klawiaturze, co powoduje jego podświetlenieosk.exe
.Przeglądając kod dodawania lub odejmowania, widzę tylko, że coś się dzieje z wartością
40
szesnastkową, która jest64
dziesiętna. To też nie ma nic wspólnego z liczbą.Może to być jedna z czterech
cmp
instrukcji (porównaj), ale wymagałoby to informacji o debugowaniu. Może się to zdarzyć w przypadku funkcji wyższego poziomu, co wymagałoby więcej badań. Ale bez możliwości debugowania bez utraty możliwości wprowadzania danych jest to bardzo trudne ...Wydaje się, że znalezienie właściwej lokalizacji będzie wymagało kabla debugowania, ponieważ komputer, na którym debugujesz, traci możliwości wprowadzania danych lub jest zbyt wolny z powodu obciążenia związanego z debugowaniem. Ponieważ obecnie nie mam laptopa z portem z 1943 r., Nie jestem w stanie samodzielnie przeprowadzić debugowania. Byłby w stanie to zrobić i tak, dosłownie zawiesiłby twój system operacyjny. Debugowanie systemu operacyjnego zamiast aplikacji jest fajne ... ^^
Czekaj, mamy dostęp do symboli! Czy możemy znaleźć obrażający kod?
Przy bliższym przyjrzeniu zauważysz funkcję obrażającą:
Jeśli przejdziemy przez tę funkcję, najpierw zobaczymy:
Ok, to coś porównuje, a następnie przeskakuje w inne miejsce. Co tam jest?
Więc jeśli warunek zdecyduje, że musi skoczyć, po prostu opuści funkcję i niczego nie zmieni.
Jak więc sprawić, że zawsze opuszcza funkcję?
Zmień
jz
instrukcję najmp
instrukcję, która zawsze wykonuje skok, można ją znaleźć z względnym przesunięciem41BC10
. Jeśli Twój program oblicza różne przesunięcia, musisz wiedzieć, że używa ich401000
jako podstawy, więc odjęcie daje nam absolutne przesunięcie1AC10
.Pamiętaj, że zmiana
74
(JZ
) w edytorze szesnastkowym naE9
(JMP
) nie będzie działać. Nie możesz tego zrobić w edytorze szesnastkowym, potrzebujesz czegoś, co deasembluje i ponownie składa kod, ale niekoniecznie jest łatwe do znalezienia (np. IDA Professional, za które ludzie faktycznie płacą, nie może wytworzyć odpowiedniego kodu c lub pliku wykonywalnego. OllyDBG, często używany w społeczności łatek, nie może nawet otworzyć pliku wykonywalnego.). A nawet Microsoft może chronić swój plik wykonywalny przed manipulacją, ponieważ można to rozważyć w kontekście umowy EULA; więc powodzenia!Meh! To trudne, chcę tylko szybko pisać za pomocą myszy / oczu / ...
Zdecydowanie powinieneś sprawdzić Dasher, który jest znacznie szybszy niż klawiatura ekranowa. Po prostu działa, przesuwając mysz w kierunku liter; ruch poziomy określa prędkość, a ruch pionowy wybierz litery. Dzięki wbudowanemu słownikowi można nawet dopasować wielkość liter, które mogą być większe, stara się także uczyć na podstawie ruchu, tak aby szybkość i litery były naprawdę przyzwyczajone do użycia.
Obraz mówi więcej niż tysiąc słów ...
Oczywiście jest to raczej niewielkie i niezbyt szybkie, ponieważ jest to przykład, ale można zmienić jego rozmiar, aby znajdował się po prawej stronie ekranu, aby nie zakłócał ekranu. Dzięki temu możesz pisać tak szybko, jak to możliwe ...
Oto dobry przykład tego, jak podpowiedzi pozwalają szybciej pisać dowolny język:
Należy również pamiętać, że litery po prawej stronie są sortowane w określonej kolejności, tak że główny kierunek (góra, środek lub dół) wybiera pomiędzy różnymi typami (małe litery, wielkie litery, cyfry i znaki interpunkcyjne); a następnie w tak dużym kierunku, twój mniejszy kierunek wybierze między AZ, az, 0-9 i tak dalej. Korzystałem z tego w przeszłości i byłem naprawdę zaskoczony, jak płynnie jest to porównywane z innymi konkurentami ...
Pamiętaj też, że Dasher ma pewną konfigurację, więc możesz dostosować coś, co ci się nie podoba.
źródło
Using Process Monitor, digging into the for the ETL event reading out that value stack trace gives us:
, wiedziałbyś, że sprawdziłem ślad stosu dla zdarzenia ETL. Chyba mówisz tu o swoich odpowiedziach? Z powodu dużej ilości odpowiedzi twoje odpowiedzi poważnie nie mają pewnej jakości. Rozważ ulepszenie i / lub usunięcie swoich odpowiedzi zamiast umieszczania szybkich i brudnych odpowiedzi lub głupich komentarzy, które nie mają na celu poprawy pytań i odpowiedzi; możesz zgadnąć, które podejście najbardziej pomoże społeczności ...The decompilation help. Once located, you should patch the binary code.
przydaje, wolałbym raczej długie ćwiczenia na wynos zamiast drapania włosów ...Obawiam się, że większość dekompilatorów nie da wystarczająco dobrego wyniku, który można ponownie skompilować.
Dekompilacja może jedynie pomóc w określeniu
HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriod
używanego obszaru , aby dowiedzieć się, gdzie ta wartość jest odczytywana i gdzie jest przestrzegany limit 500 ms.Po zlokalizowaniu należy łatać kod binarny, aby wyłączyć test i zmusić HoverPeriod do zmniejszenia. Patchowanie pliku binarnego jest znacznie bardziej wykonalne niż ponowna kompilacja.
Może być konieczne powtórzenie wysiłku, jeśli plik osk.exe zostanie kiedykolwiek zastąpiony przez usługę Windows Update (czego tak naprawdę nie oczekuję).
[EDYTOWAĆ]
Aby ci pomóc w drodze, oto kilka słów o narzędziach i ich użyciu.
Możesz użyć dekompilatora C lub dezasemblera. Późniejszy typ może być bardziej przydatny, chociaż wymaga niewielkiej wiedzy na temat zestawu instrukcji Intel. Będziesz także potrzebował dobrego edytora szesnastkowego, a niektóre z nich reklamują możliwości deasemblera (patrz link poniżej).
projekt fenris reklamuje się jako „zestaw narzędzi odpowiednich do analizy kodu, debugowania, analizy protokołów, inżynierii wstecznej, kryminalistyki, diagnostyki, audytów bezpieczeństwa, badań podatności i wielu innych celów”. Brzmi dobrze i jest polecany przez wielu, ale nie mam z tym doświadczenia.
REC Studio Decompiler próbuje stworzyć reprezentację C kodu i danych użytych do zbudowania pliku wykonywalnego.
Boomerang to ogólny dekompilator programów maszynowych o otwartym kodzie źródłowym.
Wiele innych takich narzędzi można znaleźć w Google lub w:
wikibooks x86 Narzędzia do demontażu / analizy
wikibooks x86 Demontaż / deasemblery i dekompilatory
Open Directory: Disassemblers
Wstępnym krokiem jest zdemontowanie oska. Wynikowa lista może być obszerna i wymagać dobrego edytora tekstu (zwykle wystarczy notatnik ++).
Wyszukaj ciąg „HoverPeriod” (bez rozróżniania wielkości liter). Jeśli masz szczęście, deasembler zidentyfikował go jako ciąg znaków i możesz go znaleźć w obecnej postaci. Jeśli nie, musisz wyszukać bajt po bajcie. Jako ciąg znaków Unicode będzie wyglądał, jak
H,0,o,0,v,0...
litery powinny być zastąpione ich kodami numerycznymi.Po znalezieniu ciągu „HoverPeriod” deasembler powinien umieścić gdzieś przed nim etykietę. Użyj nazwy tej wygenerowanej etykiety, aby wyszukać, gdzie jest używana, aby określić, gdzie jest pobierana z rejestru i w której zmiennej globalnej przechowywany jest wynik.
Po zlokalizowaniu zmiennej, która zawiera liczbę, wyszukaj, gdzie jest używana. To, co zrobisz, zależy od formatu kodu, który znajdziesz. Następnie możesz zdecydować, którą łatkę chcesz.
Na przykład możesz użyć edytora szesnastkowego, aby zastąpić w osk.exe polecenie, takie jak:
w
Uważaj na różne długości poleceń, ponieważ jeśli nowe polecenie jest krótsze, będzie musiało zostać uzupełnione jednobajtowymi instrukcjami NOP (brak operacji) do długości starej instrukcji.
Lokalizowanie polecenia łatania w osk.exe może wymagać wyszukiwania, jeśli przesunięcia, które daje deasembler, znajdują się w kodzie, a nie w pliku exe. Jeśli edytor szesnastkowy nie obsługuje wyszukiwania w asemblerze, wykonaj demontaż, wymieniając oryginalne bajty instrukcji, abyś wiedział, które bajty binarne mają szukać. Unikaj wyszukiwania instrukcji zawierających adresy, ponieważ adresy mogą być relokowane w pliku exe, więc raczej szukaj sekwencji bajtów w pobliżu takiej instrukcji.
Możesz utworzyć nowe bajty łaty bezpośrednio w edytorze szesnastkowym, jeśli obsługuje on asembler. A jeśli tak nie jest i nie czujesz się komfortowo z kodem maszynowym Intela, znajdź asembler do skompilowania nowego kodu i użyj jego listy, aby uzyskać skompilowane bajty do łatania.
źródło
Czy mogę zasugerować użycie AutoIt do automatyzacji klikania?
Pomysł polegałby na monitorowaniu biegu jałowego myszy, gdy kursor znajduje się w oknie ekranowym (np. W pętli sterowania, sprawdzanie w regularnych odstępach czasu, czy kursor zmienił pozycję) i automatycznym kliknięciu (funkcja wywołania SendClick) po, powiedzmy, 100ms bezczynności.
Uderza w inżynierii wstecznej.
źródło
Może nie musisz wszystko kompilować ponownie. W świecie gry często używa się trenerów, które manipulują wartością w pamięci podczas działania programu. Jeśli znajdziesz minimalną wartość w pamięci (0,5) i zaprogramujesz program ładujący, aby zmniejszyć tę liczbę, może to zadziałać.
źródło
500
ponieważ właśnie tak to ładuje, a nie jako zmiennoprzecinkowe.osk.exe
nie ma jej na liście procesów. Wynika to z faktu, że jest uruchamiany w kontekście wwinlogon
taki sposób, że działa na różnych użytkownikach, można to obejść, uruchamiając edytor pamięci również w kontekściewinlogon
.osk.exe
ale zadziałałoby tylko, jeśli utworzysz program uruchamiający, który uruchamia zarówno edytor pamięci, jak i kopia zapasowaosk.exe
. Ale wtedy musisz wziąć pod uwagę, że moduł ładujący również musiałby to zrobić. Wydaje się, że to rozwiązanie staje się tak trudne, jak demontaż i montaż,osk.exe
jest trudne ... :)