Saya harus menggunakan Keyboard Di Layar Windows 7 untuk mengetik:
(Jika Anda belum menggunakannya, Anda bisa mendapatkannya melalui: Semua Program -> Aksesori -> Kemudahan Akses -> Keyboard Di Layar
atau cukup cari "osk.exe")
Ini menawarkan fitur untuk "mengarahkan" tentang tombol. Microsoft menjelaskannya sebagai berikut:
Dalam mode melayang, Anda menggunakan mouse atau joystick untuk menunjuk ke tombol untuk periode waktu yang telah ditentukan, dan karakter yang dipilih diketik secara otomatis.
Ada masalah khusus saya. The periode yang telah ditetapkan waktu terlalu lama untuk menjadi berguna bagi saya. Jumlah waktu minimum adalah 0,5 detik (maks. 3 detik).
Apakah ada cara untuk mengubah nilai ini menjadi sesuatu < 0,5? Misalnya melalui pengeditan registri?
Sunting: Entri HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriod
tidak dapat diatur lebih rendah dari 500 ms.
Sunting (2): Saya pikir satu-satunya cara untuk memperbaiki masalah saya, adalah dengan mendekompilasi .exe (saya kira itu ditulis dalam C, atau?) Dan mengubah waktu minimum. Maka saya harus mengkompilasinya lagi. Apakah prosedur ini bisa diterapkan? Hal-hal apa yang bisa gagal?
Setiap tip bermanfaat akan sangat bagus!
sumber
Jawaban:
Di mana dalam kode itu menemukan kunci kami?
Menggunakan Process Monitor, menggali untuk acara ETL membaca bahwa jejak tumpukan nilai memberi kita:
Kita bisa melihat yang
OSKSettingsManager::GetOskSetting
membacakan nilainya.Jadi, seperti apa bagian itu? Bisakah kita debug itu?
Melihat ke fungsi itu dengan WinDBG, ia mengakses kunci registri itu sebelumnya
000007f7 23560517
.Sekarang, masalahnya di sini adalah ketika saya mencoba untuk breakpoint di lokasi itu saya tidak bisa lagi mengetik apa pun karena
osk.exe
menambahkan sendiri ke driver input. Ini dapat dengan mudah dilihat dengan menahan tombol pengubah seperti Altpada keyboard Anda, ini menyalakannyaosk.exe
.Melihat melalui kode untuk penambahan atau pengurangan, saya hanya melihat sesuatu terjadi dengan
40
heksadesimal yang64
desimal. Jadi itu juga tidak ada hubungannya dengan angka.Mungkin dalam salah satu dari empat
cmp
(bandingkan) instruksi, tetapi itu akan membutuhkan informasi debug. Atau itu bisa terjadi pada fungsi yang lebih tinggi sama sekali, yang akan membutuhkan penyelidikan lebih lanjut. Tetapi tanpa kemampuan untuk debug tanpa kehilangan kemampuan input, ini adalah hal yang sangat sulit untuk dilakukan ...Tampaknya menemukan lokasi yang tepat akan memerlukan kabel debug karena komputer tempat Anda debug kehilangan kemampuan inputnya, atau terlalu lambat karena overhead debugging. Karena saya saat ini tidak memiliki laptop dengan port 1943, saya tidak dapat melakukan debugging ini sendiri. Itu akan dapat melakukan ini, dan ya, itu benar-benar akan membekukan OS Anda. Mendebug OS bukan aplikasi itu menyenangkan ... ^^
Tunggu, kami memiliki akses ke simbol! Bisakah kita menemukan kode yang menyinggung?
Melihat lebih dekat, Anda akan melihat fungsi yang menyinggung:
Jika kita berjalan melalui fungsi itu pertama-tama kita melihat:
Oke, ini membandingkan sesuatu dan kemudian melompat ke lokasi lain. Ada apa disana?
Jadi, jika kondisinya memutuskan bahwa ia harus melompat, ia hanya akan meninggalkan fungsinya dan tidak mengubah apa pun.
Jadi, bagaimana kita membuatnya selalu meninggalkan fungsinya?
Ubah
jz
instruksi menjadijmp
instruksi yang selalu melakukan lompatan, Anda dapat menemukannya di offset relatif41BC10
. Jika program Anda menghitung offset berbeda, Anda perlu tahu bahwa itu digunakan401000
sebagai dasar sehingga mengurangi memberi kita offset absolut1AC10
.Harap perhatikan bahwa mengubah
74
(JZ
) di hex editor keE9
(JMP
) tidak akan berfungsi. Anda tidak dapat melakukan ini dalam hex editor, Anda akan membutuhkan sesuatu yang membongkar dan menyusun kembali kode tetapi itu tidak selalu mudah ditemukan (mis. IDA Professional yang orang bayar sebenarnya, tidak dapat menghasilkan kode c yang tepat atau dapat dieksekusi. OllyDBG, yang biasa digunakan dalam komunitas patch, bahkan tidak bisa membuka executable.). Dan bahkan kemudian, Microsoft mungkin melindungi executable-nya dari gangguan, karena ini dapat dianggap melawan EULA; jadi, semoga berhasil!Ah! Ini sulit, saya hanya ingin mengetik cepat menggunakan mouse / mata / ...
Anda pasti harus memeriksa Dasher yang jauh lebih cepat daripada Keyboard di Layar. Ini hanya bekerja dengan menggerakkan mouse Anda ke arah huruf; gerakan horizontal menentukan kecepatan dan gerakan vertikal memilih huruf. Dengan kamus yang terpasang di dalamnya, bahkan ukuran surat yang paling besar kemungkinan akan lebih besar, ia juga mencoba belajar dari gerakan Anda sehingga kecepatan dan huruf benar-benar terbiasa dengan penggunaan Anda.
Sebuah gambar berbicara lebih dari seribu kata ...
Tentu saja ini agak kecil dan tidak terlalu cepat sebagai contoh, tetapi Anda dapat mengubah ukurannya agar berada di sisi kanan layar Anda sehingga tidak mengganggu layar Anda. Ini memungkinkan Anda mengetik secepat mungkin ...
Berikut adalah contoh yang bagus tentang bagaimana prediksi memungkinkan Anda mengetikkan bahasa apa pun dengan lebih cepat:
Juga perhatikan bahwa huruf-huruf di sebelah kanan diurutkan dalam urutan tertentu, sehingga arah utama (atas, tengah atau bawah) memilih antara jenis yang berbeda (huruf kecil, huruf besar, angka dan tanda baca); dan kemudian dalam arah utama seperti itu, arah minor Anda akan memilih antara AZ, az, 0-9 dan seterusnya. Saya telah menggunakan ini di masa lalu dan benar-benar kagum dengan betapa fasihnya ini dibandingkan dengan pesaing lain ...
Perhatikan juga bahwa Dasher memiliki beberapa konfigurasi, jadi Anda mungkin dapat menyesuaikan sesuatu yang tidak Anda sukai.
sumber
Using Process Monitor, digging into the for the ETL event reading out that value stack trace gives us:
Anda akan tahu bahwa saya memeriksa jejak stack untuk acara ETL. Saya kira Anda berbicara tentang jawaban Anda sendiri di sini? Karena menjawab dengan jumlah tinggi, jawaban Anda benar-benar kurang berkualitas. Pertimbangkan untuk meningkatkan dan / atau menghapus jawaban Anda alih-alih menempatkan jawaban cepat yang kotor atau komentar konyol yang tidak bermaksud untuk meningkatkan T&J; Anda bisa menebak pendekatan mana yang paling membantu komunitas ...The decompilation help. Once located, you should patch the binary code.
berguna, saya lebih suka latihan yang sangat panjang dan dibawa pulang daripada menggaruk rambut ...Saya khawatir sebagian besar pengurai tidak akan menghasilkan hasil yang cukup baik yang dapat dikompilasi ulang.
Dekompilasi hanya dapat membantu menentukan area yang
HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriod
digunakan, untuk mengetahui di mana nilai ini dibaca dan di mana batas 500 ms ditegakkan.Setelah ditemukan, Anda harus menambal kode biner untuk menonaktifkan tes dan menegakkan HoverPeriod menjadi lebih kecil. Menambal biner jauh lebih layak daripada mengkompilasi ulang.
Anda mungkin perlu mengulangi upaya ini jika osk.exe pernah diganti oleh Pembaruan Windows (yang saya tidak benar-benar harapkan terjadi).
[EDIT]
Untuk membantu Anda lebih lanjut dalam perjalanan, berikut adalah beberapa kata tentang utilitas dan penggunaannya.
Anda bisa menggunakan dekompiler C atau disassembler. Jenis yang lebih baru mungkin lebih bermanfaat, meskipun memerlukan sedikit pengetahuan tentang set instruksi Intel. Anda juga akan memerlukan hex editor yang baik, dan ada beberapa yang mengiklankan kemampuan disassembler (lihat tautan di bawah).
proyek fenris mengiklankan dirinya sebagai "seperangkat alat yang cocok untuk analisis kode, debugging, analisis protokol, rekayasa terbalik, forensik, diagnostik, audit keamanan, penelitian kerentanan dan banyak tujuan lain". Kedengarannya bagus dan direkomendasikan oleh banyak orang, tetapi saya tidak memiliki pengalaman dengannya.
REC Studio Decompiler berupaya menghasilkan representasi kode-C seperti dan data yang digunakan untuk membangun file yang dapat dieksekusi.
Boomerang adalah dekompiler program kode mesin yang umum, open source, dan dapat ditargetkan ulang.
Banyak lagi utilitas semacam itu dapat ditemukan dengan googling, atau di:
wikibooks x86 Disassembly / Alat Analisis
wikibooks x86 Disassembly / Disassembler dan Decompiler
Direktori Terbuka: Disassembler
Langkah awal adalah membongkar osk. Daftar yang dihasilkan mungkin banyak dan memerlukan editor teks yang baik (biasanya notepad ++ sudah cukup).
Cari string "HoverPeriod" (case-sensitive). Jika Anda beruntung, disassembler telah mengidentifikasinya sebagai string dan Anda dapat menemukannya apa adanya. Jika tidak, Anda harus mencarinya byte-by-byte. Sebagai string Unicode akan terlihat seperti di
H,0,o,0,v,0...
mana huruf harus diganti dengan kode numerik mereka.Setelah Anda menemukan string "HoverPeriod", disassembler harus meletakkan label di suatu tempat sebelumnya. Gunakan nama label yang dihasilkan ini untuk mencari di mana ia digunakan, untuk mengidentifikasi di mana ia diambil dari registri dan di mana variabel global adalah hasilnya disimpan.
Setelah Anda menemukan variabel yang menyimpan hitungan, cari tempat variabel itu digunakan. Apa yang akan Anda lakukan tergantung pada format kode yang akan Anda temukan. Anda kemudian dapat memutuskan tambalan yang Anda inginkan.
Misalnya, Anda mungkin ingin menggunakan hex editor untuk menggantikan perintah osk.exe seperti:
ke
Hati-hati dengan panjang perintah yang berbeda, di mana jika perintah baru lebih pendek maka perlu diisi dengan instruksi NOP satu byte (tidak ada operasi) dengan panjang instruksi lama.
Menemukan perintah untuk menambal di osk.exe mungkin memerlukan pencarian jika offset yang diberikan disassembler ada dalam kode dan bukan di file exe. Jika hex editor tidak mendukung pencarian assembler, lakukan pembongkaran sambil mendaftar byte instruksi asli sehingga Anda akan tahu byte biner mana yang harus dicari. Hindari mencari instruksi yang berisi alamat, karena alamat mungkin dipindahkan di exe, jadi cari urutan byte dekat dengan instruksi tersebut.
Anda dapat membuat patch byte baru secara langsung di hex editor jika mendukung assembler. Atau jika tidak dan Anda merasa tidak nyaman dengan kode mesin Intel, cari assembler untuk mengkompilasi kode baru Anda dan gunakan listing untuk mendapatkan byte yang dikompilasi untuk digunakan untuk patching.
sumber
Bolehkah saya menyarankan menggunakan AutoIt untuk mengotomatiskan klik?
Idenya adalah untuk memantau idling mouse ketika kursor berada di dalam jendela di layar (misalnya dalam loop kontrol, memeriksa pada interval reguler apakah kursor telah berubah posisi) dan klik otomatis (fungsi panggil SendClick) setelah, katakanlah, 100 ms tidak aktif.
Mengalahkan rekayasa terbalik .exe.
sumber
Mungkin Anda tidak perlu mengkompilasi ulang semuanya. Dalam dunia permainan, pelatih biasa digunakan, yang memanipulasi nilai dalam memori saat program berjalan. Jika Anda menemukan nilai minimum dalam memori (0,5) dan memprogram sesuatu seperti loader untuk membuat angka itu lebih kecil, itu bisa berfungsi.
sumber
500
bukan karena itu cara memuatnya, bukan sebagai pelampung.osk.exe
tidak ada dalam daftar proses. Ini karena diluncurkan dalam kontekswinlogon
sehingga berfungsi lintas pengguna, Anda dapat menyiasatinya dengan meluncurkan editor memori dalam kontekswinlogon
juga.osk.exe
tetapi itu hanya akan berfungsi jika Anda membuat peluncur yang meluncurkan editor memori dan yang didukungosk.exe
. Tetapi Anda harus mempertimbangkan bahwa loader juga perlu melakukan itu. Tampaknya solusi ini semakin sulit seperti pembongkaran dan perakitan,osk.exe
sulit ... :)