รหัสอยู่ที่ไหนในคีย์ของเรา
ใช้การตรวจสอบกระบวนการขุดลงในเหตุการณ์ 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
ในกรณีคำนวณโปรแกรมของคุณชดเชยแตกต่างกันคุณจำเป็นต้องรู้ว่าจะใช้เป็นพื้นฐานเพื่อการลบจะช่วยให้เราแน่นอนชดเชย401000
1AC10
โปรดทราบว่าการเปลี่ยน74
( JZ
) ในตัวแก้ไขฐานสิบหกเป็นE9
( JMP
) จะไม่ทำงาน คุณไม่สามารถทำได้ในโปรแกรมแก้ไขฐานสิบหกคุณจะต้องมีบางสิ่งที่แยกส่วนและประกอบรหัสใหม่ แต่ไม่จำเป็นต้องค้นหาได้ง่าย (เช่น IDA Professional ซึ่งผู้คนจ่ายจริงไม่สามารถสร้างรหัส c ที่เหมาะสมหรือปฏิบัติการได้ OllyDBG ซึ่งใช้กันทั่วไปในชุมชนโปรแกรมแก้ไขไม่สามารถแม้แต่เปิดโปรแกรมปฏิบัติการได้) และแม้กระทั่ง Microsoft อาจปกป้องปฏิบัติการของตนจากการดัดแปลงแก้ไขเพราะสิ่งนี้สามารถพิจารณาได้จาก EULA โชคดี!
Meh! นี่เป็นเรื่องยากฉันแค่ต้องการพิมพ์เร็วโดยใช้เมาส์ / ดวงตา / ...
คุณควรตรวจสอบDasherซึ่งเป็นวิธีที่เร็วกว่าแป้นพิมพ์บนหน้าจอ มันใช้งานได้ง่ายโดยเลื่อนเมาส์ไปทางตัวอักษร การเคลื่อนไหวในแนวนอนเป็นตัวกำหนดความเร็วและการเคลื่อนที่ในแนวตั้งเพื่อเลือกตัวอักษร ด้วยพจนานุกรมในตัวสามารถปรับขนาดตัวอักษรที่มีแนวโน้มมากที่สุดให้ใหญ่ขึ้นได้นอกจากนี้ยังพยายามเรียนรู้จากการเคลื่อนไหวของคุณเพื่อให้ความเร็วและตัวอักษรคุ้นเคยกับการใช้งานของคุณ
รูปภาพพูดมากกว่าหนึ่งพันคำ ...
แน่นอนว่ามันค่อนข้างเล็กและไม่เร็วอย่างที่มันเป็นตัวอย่าง แต่คุณสามารถปรับขนาดมันให้อยู่ทางด้านขวาของหน้าจอของคุณเพื่อที่มันจะได้ไม่รบกวนหน้าจอของคุณ สิ่งนี้ช่วยให้คุณพิมพ์เร็วเท่าที่คุณสามารถ ...
นี่คือตัวอย่างที่ดีของการคาดการณ์ที่ช่วยให้คุณพิมพ์ภาษาใด ๆ ได้เร็วขึ้น:
โปรดทราบว่าตัวอักษรทางด้านขวาจะถูกจัดเรียงตามลำดับเฉพาะเช่นทิศทางหลัก (ขึ้น, กลางหรือล่าง) เลือกระหว่างประเภทต่าง ๆ (ตัวพิมพ์เล็ก, ตัวพิมพ์ใหญ่, ตัวเลขและเครื่องหมายวรรคตอน); และจากนั้นในทิศทางหลักดังกล่าวทิศทางย่อยของคุณจะเลือกระหว่าง AZ, az, 0-9 และอื่น ๆ ฉันเคยใช้สิ่งนี้ในอดีตและรู้สึกทึ่งกับความจริงที่ว่าเมื่อเทียบกับคู่แข่งรายอื่น ...
โปรดทราบว่า Dasher มีการกำหนดค่าบางอย่างดังนั้นคุณอาจปรับบางสิ่งที่คุณไม่ชอบ