แก้ไขค่าการกำหนดค่าเฉพาะในแป้นพิมพ์บนหน้าจอของ Windows 7


9

ฉันต้องใช้แป้นพิมพ์บนหน้าจอของ Windows 7 เพื่อพิมพ์:

(ในกรณีที่คุณยังไม่ได้ใช้งานคุณสามารถรับมันได้ผ่าน: โปรแกรมทั้งหมด -> อุปกรณ์เสริม -> ความง่ายในการเข้าถึง -> คีย์บอร์ดบนหน้าจอ

หรือเพียงแค่ค้นหา "osk.exe")

แป้นพิมพ์บนหน้าจอ

มันมีคุณสมบัติในการ "โฮเวอร์" เกี่ยวกับปุ่ม Microsoft อธิบายดังต่อไปนี้:

ในโหมดโฮเวอร์คุณใช้เมาส์หรือจอยสติ๊กเพื่อชี้ไปที่ปุ่มสำหรับช่วงเวลาที่กำหนดไว้ล่วงหน้าและอักขระที่เลือกจะถูกพิมพ์โดยอัตโนมัติ

มีปัญหาเฉพาะของฉัน ระยะเวลาที่กำหนดไว้ล่วงหน้าของเวลาเป็นเวลานานเกินไปที่จะเป็นประโยชน์สำหรับฉัน ระยะเวลาต่ำสุดคือ 0.5 วินาที (สูงสุด 3 วินาที)

มีวิธีใดบ้างที่จะเปลี่ยนค่านี้เป็นบางสิ่งบางอย่าง< 0.5? ตัวอย่างเช่นผ่านการแก้ไขรีจิสทรี?

แก้ไข:รายการHKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriodไม่สามารถตั้งค่าต่ำกว่า 500 ms

แก้ไข (2):ฉันคิดว่าวิธีเดียวที่จะแก้ไขปัญหาของฉันคือ decompile. exe (ฉันเดาว่ามันเขียนใน C หรือ?) และเปลี่ยนเวลาขั้นต่ำ จากนั้นฉันก็ต้องคอมไพล์มันอีกครั้ง ขั้นตอนนี้สามารถใช้การได้หรือไม่ สิ่งที่อาจล้มเหลว

เคล็ดลับที่มีประโยชน์จะดีมาก!


1
การคอมไพล์ใหม่จะเป็นเรื่องยากมันจะเป็น 1) ส่วนใหญ่ไม่สามารถอ่านได้ (แม้ว่าคุณจะใช้ Symbols ของ Microsoft) และ 2) คุณไม่รู้ว่ามันทำการตรวจสอบที่ไหนเพื่อที่คุณจะได้รับถ้าคุณพบตัวแปรที่กำหนดให้ 500 หรือ 0.5 แต่ก็ยังคุณต้องติดตามเส้นทางที่มันไหลและ 3) คุณยังต้องได้รับการคอมไพล์ใหม่ทั้งหมดซึ่งมักเป็นไปไม่ได้เนื่องจากการถอดรหัสที่ไม่ดี น่าเศร้าที่การแก้จุดบกพร่องนั้นเป็นไปไม่ได้นอกจากคุณจะมีสายดีบั๊กและเชื่อมต่อคอมพิวเตอร์ของคุณกับอีกเครื่องหนึ่ง ...
Tamara Wijsman

ฉันคิดว่ามันจะเป็นการฉลาดที่จะทิ้งมันไว้ อักขระหนึ่งตัวทุกครึ่งวินาทีนั้นไม่เลวและถ้ามันผิดพลาดเร็วเกินไปก็จะเกิดขึ้น
cutrightjm

เนื่องจากฉันไม่สามารถแก้ไขความคิดเห็นของฉันในโพสต์นี้ได้อย่างสะดวกนี่อาจช่วยให้บางคนที่รู้จัก C # หรือภาษาอื่น ๆ สามารถเขียน patch สำหรับสิ่งนี้ได้: daniweb.com/hardware-and-software/microsoft-windows/threads/…
cutrightjm

@fnst: จริงๆถ้าคุณมีความสนใจในความเร็วพิจารณาแดชเชอร์ ฉันจะร่างไว้ในคำตอบของฉัน ...
Tamara Wijsman

@ekaj: นั่นเป็นเพียงการฝังแอปพลิเคชันเท่าที่ฉันสามารถบอกได้ คุณบอกเราได้ไหมว่าจะช่วยได้อย่างไร
Tamara Wijsman

คำตอบ:


7

รหัสอยู่ที่ไหนในคีย์ของเรา

ใช้การตรวจสอบกระบวนการขุดลงในเหตุการณ์ ETL เพื่ออ่านว่าการติดตามสแต็กค่าทำให้เรา:

"Frame","Module","Location","Address","Path"
...
"3","ntdll.dll","NtQueryValueKey + 0xa","0x7fbce17344a","C:\Windows\SYSTEM32\ntdll.dll"
"4","KERNELBASE.dll","LocalBaseRegQueryValue + 0x15d","0x7fbcb1a3e1d","C:\Windows\system32\KERNELBASE.dll"
"5","KERNELBASE.dll","RegQueryValueExW + 0xe9","0x7fbcb1a3c19","C:\Windows\system32\KERNELBASE.dll"
"6","ADVAPI32.dll","RegQueryValueExWStub + 0x1e","0x7fbcba412fe","C:\Windows\system32\ADVAPI32.dll"
"7","osk.exe","OSKSettingsManager::GetOskSetting + 0xc7","0x7f72356057f","C:\Windows\System32\osk.exe"
"8","osk.exe","OSKSettingsManager::Initialize + 0x6e","0x7f72355ffe2","C:\Windows\System32\osk.exe"
"9","osk.exe","OSKSettingsManager::GetOSKSettingsManager + 0x64","0x7f72355fee4","C:\Windows\System32\osk.exe"
"10","osk.exe","COskNativeHWNDHost::DetermineOSKWindowSizeAndLimits + 0x5a","0x7f72355d4fa","C:\Windows\System32\osk.exe"
"11","osk.exe","COskNativeHWNDHost::Initialize + 0xaa","0x7f72355d28e","C:\Windows\System32\osk.exe"
"12","osk.exe","PresentOSK + 0x112","0x7f723557882","C:\Windows\System32\osk.exe"
"13","osk.exe","wWinMain + 0x356","0x7f723557f16","C:\Windows\System32\osk.exe"
"14","osk.exe","operator new[] + 0x37a","0x7f723564b12","C:\Windows\System32\osk.exe"
"15","KERNEL32.DLL","BaseThreadInitThunk + 0x1a","0x7fbcd24298e","C:\Windows\system32\KERNEL32.DLL"
"16","ntdll.dll","RtlUserThreadStart + 0x1d","0x7fbce19e229","C:\Windows\SYSTEM32\ntdll.dll"

เราจะเห็นว่าOSKSettingsManager::GetOskSettingอ่านค่า

ดังนั้นส่วนนั้นมีลักษณะอย่างไร เราสามารถแก้ไขข้อบกพร่องได้หรือไม่

เมื่อมองเข้าไปในฟังก์ชั่นนั้นด้วย WinDBG จะสามารถเข้าถึงรีจิสตรีคีย์000007f7 23560517นั้นได้ก่อน

osk!OSKSettingsManager::GetOskSetting:
...
000007f7`2356050e ff15440bfeff    call    qword ptr [osk!_imp_RegOpenKeyExW (000007f7`23541058)]
000007f7`23560514 448bd8          mov     r11d,eax
000007f7`23560517 85c0            test    eax,eax
000007f7`23560519 751f            jne     osk!OSKSettingsManager::GetOskSetting+0x82 (000007f7`2356053a)
000007f7`2356051b 488b0b          mov     rcx,qword ptr [rbx]
...

ตอนนี้ปัญหาตรงนี้คือเมื่อฉันพยายามเบรกพอยต์ที่ตำแหน่งนั้นฉันไม่สามารถพิมพ์อะไรได้อีกเพราะosk.exeเพิ่มตัวเองลงในไดรเวอร์อินพุต นี้สามารถมองเห็นได้โดยการกดคีย์ปรับปรุงเช่นบนแป้นพิมพ์ของคุณนี้ไฟมันได้ในAltosk.exe

เมื่อดูรหัสสำหรับการเพิ่มหรือการลบฉันเห็นสิ่งที่เกิดขึ้นกับ40เลขฐานสิบหกซึ่งเป็น64ทศนิยม ดังนั้นมันจึงไม่มีอะไรเกี่ยวข้องกับตัวเลข

อาจเป็นหนึ่งในสี่cmpคำสั่ง (เปรียบเทียบ) แต่ต้องมีข้อมูลการดีบัก หรืออาจเกิดขึ้นในฟังก์ชั่นที่สูงขึ้นโดยสิ้นเชิงซึ่งจะต้องมีการตรวจสอบมากขึ้น แต่ถ้าไม่มีความสามารถในการดีบักโดยไม่สูญเสียความสามารถในการป้อนข้อมูลนี่เป็นสิ่งที่ยากมากที่จะทำ ...

ดูเหมือนว่าการค้นหาตำแหน่งที่ถูกต้องจะต้องใช้สายเคเบิลตรวจแก้จุดบกพร่องในขณะที่คอมพิวเตอร์ที่คุณตรวจแก้จุดบกพร่องสูญเสียความสามารถในการป้อนข้อมูลหรือช้าเกินไปเนื่องจากการดีบักโอเวอร์เฮด ขณะนี้ฉันไม่มีแล็ปท็อปที่มีพอร์ต 1943 ฉันจึงไม่สามารถแก้ไขข้อบกพร่องนี้ได้ด้วยตนเอง มันจะสามารถทำเช่นนี้ได้และใช่มันจะหยุดการทำงานของระบบปฏิบัติการของคุณอย่างแท้จริง การดีบักระบบปฏิบัติการแทนแอปพลิเคชันคือความสนุก ... ^^

เดี๋ยวก่อนเราสามารถเข้าถึงสัญลักษณ์! เราสามารถหารหัสที่ละเมิดได้หรือไม่?

OSKSettingsManager::ClearTransferKey(void)
OSKSettingsManager::GetOSKSettingsManager(OSKSettingsManager * *)
OSKSettingsManager::GetOskSetting(ulong,ulong *)
OSKSettingsManager::GetOskSetting(ulong,ulong *,int)
OSKSettingsManager::Initialize(void)
OSKSettingsManager::NotifyListeners(ulong,ulong)
OSKSettingsManager::RegisterListener(void (*)(ulong,ulong))
OSKSettingsManager::SQMStartupSettings(void)
OSKSettingsManager::SetOskSetting(ulong,ulong)
OSKSettingsManager::SetOskSetting(ulong,ulong,int)
OSKSettingsManager::_HandleUpdateAllListeners(void)
OSKSettingsManager::_KeepSettingValueInBounds(ulong,ulong *,int)
OSKSettingsManager::`scalar deleting destructor'(uint)

เมื่อมองเข้าไปใกล้ ๆ คุณจะสังเกตเห็นฟังก์ชั่นที่ละเมิด:

OSKSettingsManager::_KeepSettingValueInBounds(ulong,ulong *,int)

ถ้าเราเดินผ่านฟังก์ชั่นนั้นเราจะเห็นว่า:

mov     edi, edi
push    ebp
mov     ebp, esp
mov     eax, [ebp+arg_4]
imul    eax, 14h
cmp     dword_4B7598[eax], 0
jz      short loc_41BC36        

โอเคนี่เป็นการเปรียบเทียบบางอย่างแล้วข้ามไปยังตำแหน่งอื่น นั่นคืออะไร?

pop     ebp
retn    8

ดังนั้นหากเงื่อนไขตัดสินใจว่าจะต้องกระโดดมันก็จะออกจากฟังก์ชั่นและไม่เปลี่ยนแปลงอะไร

ดังนั้นเราจะทำให้มันออกจากฟังก์ชั่นได้อย่างไร?

เปลี่ยนjzคำแนะนำเป็นคำแนะนำที่มักจะทำกระโดดคุณสามารถค้นหาได้ที่ญาติชดเชยjmp 41BC10ในกรณีคำนวณโปรแกรมของคุณชดเชยแตกต่างกันคุณจำเป็นต้องรู้ว่าจะใช้เป็นพื้นฐานเพื่อการลบจะช่วยให้เราแน่นอนชดเชย4010001AC10

โปรดทราบว่าการเปลี่ยน74( JZ) ในตัวแก้ไขฐานสิบหกเป็นE9( JMP) จะไม่ทำงาน คุณไม่สามารถทำได้ในโปรแกรมแก้ไขฐานสิบหกคุณจะต้องมีบางสิ่งที่แยกส่วนและประกอบรหัสใหม่ แต่ไม่จำเป็นต้องค้นหาได้ง่าย (เช่น IDA Professional ซึ่งผู้คนจ่ายจริงไม่สามารถสร้างรหัส c ที่เหมาะสมหรือปฏิบัติการได้ OllyDBG ซึ่งใช้กันทั่วไปในชุมชนโปรแกรมแก้ไขไม่สามารถแม้แต่เปิดโปรแกรมปฏิบัติการได้) และแม้กระทั่ง Microsoft อาจปกป้องปฏิบัติการของตนจากการดัดแปลงแก้ไขเพราะสิ่งนี้สามารถพิจารณาได้จาก EULA โชคดี!

Meh! นี่เป็นเรื่องยากฉันแค่ต้องการพิมพ์เร็วโดยใช้เมาส์ / ดวงตา / ...

คุณควรตรวจสอบDasherซึ่งเป็นวิธีที่เร็วกว่าแป้นพิมพ์บนหน้าจอ มันใช้งานได้ง่ายโดยเลื่อนเมาส์ไปทางตัวอักษร การเคลื่อนไหวในแนวนอนเป็นตัวกำหนดความเร็วและการเคลื่อนที่ในแนวตั้งเพื่อเลือกตัวอักษร ด้วยพจนานุกรมในตัวสามารถปรับขนาดตัวอักษรที่มีแนวโน้มมากที่สุดให้ใหญ่ขึ้นได้นอกจากนี้ยังพยายามเรียนรู้จากการเคลื่อนไหวของคุณเพื่อให้ความเร็วและตัวอักษรคุ้นเคยกับการใช้งานของคุณ

รูปภาพพูดมากกว่าหนึ่งพันคำ ...

แน่นอนว่ามันค่อนข้างเล็กและไม่เร็วอย่างที่มันเป็นตัวอย่าง แต่คุณสามารถปรับขนาดมันให้อยู่ทางด้านขวาของหน้าจอของคุณเพื่อที่มันจะได้ไม่รบกวนหน้าจอของคุณ สิ่งนี้ช่วยให้คุณพิมพ์เร็วเท่าที่คุณสามารถ ...

นี่คือตัวอย่างที่ดีของการคาดการณ์ที่ช่วยให้คุณพิมพ์ภาษาใด ๆ ได้เร็วขึ้น:

โปรดทราบว่าตัวอักษรทางด้านขวาจะถูกจัดเรียงตามลำดับเฉพาะเช่นทิศทางหลัก (ขึ้น, กลางหรือล่าง) เลือกระหว่างประเภทต่าง ๆ (ตัวพิมพ์เล็ก, ตัวพิมพ์ใหญ่, ตัวเลขและเครื่องหมายวรรคตอน); และจากนั้นในทิศทางหลักดังกล่าวทิศทางย่อยของคุณจะเลือกระหว่าง AZ, az, 0-9 และอื่น ๆ ฉันเคยใช้สิ่งนี้ในอดีตและรู้สึกทึ่งกับความจริงที่ว่าเมื่อเทียบกับคู่แข่งรายอื่น ...

โปรดทราบว่า Dasher มีการกำหนดค่าบางอย่างดังนั้นคุณอาจปรับบางสิ่งที่คุณไม่ชอบ


@harrymc: ถ้าคุณอ่านUsing Process Monitor, digging into the for the ETL event reading out that value stack trace gives us:คุณจะรู้ว่าฉันตรวจสอบการติดตามสแต็คสำหรับเหตุการณ์ ETL ฉันเดาว่าคุณกำลังพูดถึงคำตอบของคุณเองที่นี่? เนื่องจากการตอบรับจำนวนมากคำตอบของคุณจึงขาดคุณภาพอย่างจริงจัง พิจารณาการปรับปรุงและ / หรือลบคำตอบของคุณแทนที่จะวางคำตอบที่สกปรกหรือความคิดเห็นที่ไม่ฉลาดซึ่งไม่ต้องการปรับปรุงคำถาม & คำตอบ; คุณสามารถเดาได้ว่าวิธีการใดที่จะช่วยชุมชนได้มากที่สุด ...
Tamara Wijsman

1
@harrymc: (1) มันบอกว่าฉันแตกที่ไหน ฉันเพิ่งจะแสดงจุดเริ่มต้นที่นี่ฉันไม่ได้ล้มเหลวและฉันได้แสดงให้เห็นว่าอุปกรณ์เพิ่มเติมหรือการบ้านเป็นสิ่งที่จำเป็นเพื่อดำเนินการต่อไป คุณภาพอยู่ในคำตอบของฉันปริมาณจะต้องทำโดยผู้อ่านหรือเมื่อฉันเจอการตั้งค่าการดีบักระยะไกล (2) Googling Process Monitor และ WinDBG ไม่ใช่วิทยาศาสตร์จรวด (3) ขอบคุณสำหรับคำชมบางทีฉันควรอธิบายว่าชุดประกอบทำงานอย่างไรในคำตอบของฉันด้วย?
Tamara Wijsman

@harrymc: คำตอบของฉันคือจุดเริ่มต้นที่ดี ความผิดพลาดของคุณอยู่ที่การให้รายละเอียดไม่เพียงพอดังที่แสดงโดยคำตอบและความคิดเห็นของคุณในคำถามนี้ คุณเพียงแค่พบว่ามันจำเป็นที่จะวางยังความคิดเห็นอื่นที่ไม่ได้มีเจตนาที่จะปรับปรุงคำตอบของฉันหรือไม่ได้บอกอะไรผิดปกติกับมันก็จะใช้เวลาที่คุณมีเวลามากขึ้นบางอย่างที่จะนำขึ้นคำตอบที่แสดงให้เห็นถึงความพยายามแทนที่จะเป็นที่กว้างเกินไป ฉันไม่เห็นว่าคุณThe decompilation help. Once located, you should patch the binary code.มีประโยชน์อย่างไรฉันชอบที่จะออกกำลังกายเป็นเวลานานและกลับบ้านแทนการเกาผม ...
Tamara Wijsman

@harrymc: คุณคิดว่ามันมีวัตถุประสงค์ทั่วไป แต่ถ้าคุณจะตรวจสอบการอ้างอิงและการอ้างอิงคุณจะเห็นว่ามันไม่ได้ทำลายพฤติกรรมใด ๆ ที่ผ่านมาแทนที่การกำหนดค่าของตัวเองซึ่งจะถูกโหลดจากรีจิสตรีคีย์เพียงอย่างเดียว ฉันได้ตรวจสอบการอ้างอิงและการอ้างอิงดังนั้นฉันรู้ว่าการใช้งาน คุณจะลบความคิดเห็นล่าสุดของคุณด้วยหรือไม่ ;)
Tamara Wijsman

หากคุณแตกมันจริงๆแล้วคุณเพียงไม่กี่นาทีจากการสร้าง osk ที่ได้รับการติดตั้งแล้ว ทำไมไม่ทำงานให้เสร็จและให้ผู้ตัดสินโปสเตอร์?
harrymc

2

ฉันกลัวว่าตัวถอดรหัสส่วนใหญ่จะไม่ให้ผลลัพธ์ที่ดีพอที่จะสามารถคอมไพล์ใหม่ได้

การคอมไพล์สามารถช่วยระบุพื้นที่ที่HKEY_CURRENT_USER\Software\Microsoft\Osk\HoverPeriodใช้เพื่อค้นหาตำแหน่งที่อ่านค่านี้และการบังคับใช้ขีด จำกัด 500 ms

คุณควรแก้ไขรหัสไบนารี่เพื่อปิดการทดสอบและบังคับให้ HoverPeriod มีขนาดเล็กลง การปรับปรุงไบนารีเป็นไปได้มากกว่าการคอมไพล์ซ้ำ

คุณอาจต้องพยายามซ้ำถ้า osk.exe ถูกแทนที่ด้วย Windows Update (ซึ่งฉันไม่คาดว่าจะเกิดขึ้นจริง ๆ )

[แก้ไข]

เพื่อช่วยให้คุณทำงานได้มากขึ้นต่อไปนี้เป็นคำศัพท์บางคำเกี่ยวกับระบบสาธารณูปโภคและการใช้งาน

คุณสามารถใช้ C-decompiler หรือ Disassembler ประเภทที่ใหม่กว่าอาจมีประโยชน์มากกว่าแม้ว่าจะต้องมีความรู้เล็กน้อยเกี่ยวกับชุดคำสั่งของ Intel คุณจะต้องมีโปรแกรมแก้ไข hex ที่ดีและมีบางอย่างที่โฆษณาความสามารถในการแยกส่วน (ดูลิงค์ด้านล่าง)

โครงการ fenrisโฆษณาว่า "ชุดเครื่องมือที่เหมาะสมสำหรับการวิเคราะห์รหัส, การดีบัก, การวิเคราะห์โปรโตคอล, วิศวกรรมย้อนกลับ, นิติเวช, การวินิจฉัย, การตรวจสอบความปลอดภัย, การวิจัยช่องโหว่และวัตถุประสงค์อื่น ๆ " ฟังดูดีและแนะนำโดยหลาย ๆ คน แต่ฉันไม่มีประสบการณ์

REC Studio Decompilerพยายามสร้างการแสดงรหัส C และข้อมูลที่ใช้ในการสร้างไฟล์ปฏิบัติการ

บูมเมอแรงเป็นเครื่องคอมไพเลอร์ทั่วไปแบบโอเพนซอร์สเครื่องถอดรหัสแบบกำหนดเป้าหมายซ้ำได้

สามารถพบยูทิลิตี้ดังกล่าวจำนวนมากได้โดย googling หรือใน:

wikibooks x86 เครื่องมือถอดแยกชิ้นส่วน / วิเคราะห์
wikibooks x86 เครื่องมือถอดแยกชิ้นส่วน / ตัวแยก
เปิดไดเร็คทอรี่ Open Directory: Disassemblers

ขั้นตอนเบื้องต้นคือการแยกชิ้นส่วน osk รายการผลลัพธ์อาจมีมากมายและต้องใช้ text-editor ที่ดี (ปกติคือ notepad ++ ก็เพียงพอแล้ว)

ค้นหาสตริง "HoverPeriod" (ตัวพิมพ์เล็กและใหญ่) หากคุณโชคดี disassembler ได้ระบุว่าเป็นสตริงและคุณสามารถค้นหาได้ตามที่เป็น ถ้าไม่คุณจะต้องค้นหามันทีละไบต์ ในฐานะที่เป็นสตริง Unicode มันจะมีลักษณะH,0,o,0,v,0...ที่ตัวอักษรควรถูกแทนที่ด้วยรหัสตัวเลขของพวกเขา

เมื่อคุณพบสตริง "HoverPeriod" ตัวแยกชิ้นส่วนควรวางป้ายกำกับไว้ที่ใดที่หนึ่งก่อนหน้า ใช้ชื่อของป้ายกำกับที่สร้างขึ้นนี้เพื่อค้นหาตำแหน่งที่จะใช้เพื่อระบุตำแหน่งที่จะดึงข้อมูลจากรีจิสตรีและตัวแปรส่วนกลางเป็นผลลัพธ์ที่เก็บไว้

เมื่อคุณพบตัวแปรที่มีการนับแล้วให้ค้นหาตำแหน่งที่ใช้ สิ่งที่คุณจะทำขึ้นอยู่กับรูปแบบของรหัสที่คุณจะพบ จากนั้นคุณสามารถตัดสินใจเลือกแพตช์ที่คุณต้องการ

ตัวอย่างเช่นคุณอาจต้องการใช้ตัวแก้ไข hex เพื่อแทนที่ในคำสั่ง osk.exe เช่น:

move AX,<HoverPeriod milliseconds count variable>

เข้าไป

mov AX,200       (your count of 200 milliseconds)

ระวังด้วยความยาวของคำสั่งที่แตกต่างกันซึ่งหากคำสั่งใหม่สั้นกว่านั้นจะต้องมีการเสริมด้วยคำสั่ง NOP แบบหนึ่งไบต์ (ไม่มีการดำเนินการ) กับความยาวของคำสั่งเก่า

การค้นหาคำสั่งเพื่อแก้ไขใน osk.exe อาจต้องค้นหาว่าออฟเซ็ตที่ disassembler ให้นั้นอยู่ในรหัสแทนที่จะเป็นไฟล์ exe หากตัวแก้ไข hex ไม่รองรับการค้นหาแอสเซมเบลอร์ให้ทำการถอดแยกชิ้นส่วนในขณะที่แสดงรายการคำสั่งดั้งเดิมไบต์ดังนั้นคุณจะทราบว่าไบนารี่ไบท์ตัวใดที่ต้องการค้นหา หลีกเลี่ยงการค้นหาคำแนะนำที่มีที่อยู่เนื่องจากที่อยู่อาจถูกย้ายใน exe ดังนั้นจึงควรค้นหาลำดับของไบต์ที่ใกล้เคียงกับคำสั่งดังกล่าว

คุณสามารถสร้างแพทช์ใหม่ได้โดยตรงในตัวแก้ไข hex หากสนับสนุนแอสเซมเบลอร์ หรือถ้ามันไม่เป็นเช่นนั้นและคุณรู้สึกไม่สบายใจกับรหัสเครื่องของ Intel ค้นหาแอสเซมเบลอร์เพื่อรวบรวมรหัสใหม่ของคุณ


การเปลี่ยนค่าจะไม่ทำงานเนื่องจากถูกแทนที่ด้วยฟังก์ชันทั่วไปที่มากกว่า การเปลี่ยนค่าทุกอย่างที่ได้รับจากรีจิสตรีจะทำให้แอปพลิเคชันหยุดทำงาน ดูคำตอบของฉันสำหรับฟังก์ชั่นทั่วไปนี้ ตัวแก้ไขฐานสิบหกจะไม่ทำงานดังนั้นมันจึงลงมาที่การค้นหาคอมไพเลอร์ด้านขวา (หรือ) คอมไพเลอร์ (หรือ [de] คอมไพเลอร์)
Tamara Wijsman

1

ฉันขอแนะนำให้ใช้AutoItเพื่อทำการคลิกอัตโนมัติได้ไหม

ความคิดที่จะตรวจสอบเมาส์ไม่ทำงานเมื่อเคอร์เซอร์อยู่ในหน้าต่างบนหน้าจอ (เช่นในวงควบคุมการตรวจสอบในช่วงเวลาปกติว่าเคอร์เซอร์เปลี่ยนตำแหน่ง) และคลิกอัตโนมัติ (ฟังก์ชั่นโทร SendClick) หลังจากพูด 100ms ของการไม่ใช้งาน

เต้นวิศวกรรมย้อนกลับเป็น. exe


+1 สำหรับการเปลี่ยน "ฉันต้องการให้คลิกเร็วขึ้น" เป็น "ฉันปล่อยให้คลิกเร็วกว่าวิธีที่ชาญฉลาด"
Tamara Wijsman

0

บางทีคุณอาจไม่ต้องคอมไพล์ใหม่ทุกอย่าง ในโลกแห่งเกมมันเป็นเรื่องปกติที่จะใช้ผู้ฝึกสอนซึ่งจัดการค่าในหน่วยความจำเมื่อโปรแกรมกำลังทำงาน หากคุณพบว่าค่าต่ำสุดในหน่วยความจำ (0.5) และเขียนโปรแกรมเช่นโหลดเดอร์เพื่อทำให้ตัวเลขนั้นเล็กลงมันอาจทำงานได้


ที่อาจทำงานได้เฉพาะถ้าค่าอยู่ในสถานที่เดียวกันหรือค่า Xth ที่มีค่านั้น ไม่ว่าในกรณีใดตัวค้นหา T และตัวแก้ไขหน่วยความจำด่วนจะเป็นเครื่องมือสองอย่างที่น่าลองใช้ คุณอาจต้องการค้นหา500แทนเนื่องจากเป็นวิธีที่โหลดไว้ไม่ใช่ลอยตัว
Tamara Wijsman

เมื่อลองครั้งแรกปรากฏว่าไม่ได้osk.exeอยู่ในรายการกระบวนการ นี่เป็นเพราะมีการเปิดตัวในบริบทwinlogonที่สามารถทำงานได้กับผู้ใช้คุณสามารถแก้ไขได้โดยการเปิดตัวแก้ไขหน่วยความจำในบริบทของwinlogonเช่นกัน
Tamara Wijsman

ดูstackoverflow.com/questions/9868079/…และstackoverflow.com/a/3143055/47064สำหรับวิธีการทำสิ่งนี้วิธีที่ง่ายคือการแทนที่osk.exeแต่จะใช้งานได้ก็ต่อเมื่อคุณสร้างตัวเรียกใช้งานที่เปิดตัวทั้งตัวแก้ไขหน่วยความจำและ osk.exeสำรอง แต่คุณต้องพิจารณาว่าตัวโหลดจะต้องทำเช่นนั้น ดูเหมือนว่าวิธีนี้จะได้รับเป็นยากในขณะที่แยกส่วนและประกอบosk.exeเป็นยาก ... :)
Tamara Wijsman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.