কোডটিতে এটি আমাদের কীটি খুঁজে পায়?
প্রসেস মনিটর ব্যবহার করে, 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
মানটি পড়ে reads
তো, সেই অংশটি কেমন দেখাচ্ছে? আমরা কি এটি ডিবাগ করতে পারি?
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
নিজেকে ইনপুট ড্রাইভারগুলিতে যুক্ত করে। Altআপনার কীবোর্ডের মতো একটি সংশোধক কী ধরে রাখার মাধ্যমে এটি সহজেই দেখা যায় , এটি এতে আলোকিত করে osk.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
ঠিক আছে, এটি কিছু তুলনা করে এবং পরে অন্য স্থানে লাফ দেয় to সেখানে কি?
pop ebp
retn 8
সুতরাং, যদি শর্তটি স্থির করে যে এটি অবশ্যই লাফিয়ে উঠবে এটি কেবল ফাংশনটি ছেড়ে যাবে এবং কোনও কিছু পরিবর্তন করবে না।
সুতরাং, আমরা কীভাবে এটি সর্বদা ফাংশনটি ছেড়ে দেব?
jz
নির্দেশকে এমন নির্দেশে পরিবর্তন করুন jmp
যা সর্বদা ঝাঁপ দেয়, আপনি এটি অফসেটে খুঁজে পেতে পারেন 41BC10
। যদি আপনার প্রোগ্রাম অফসেটগুলি পৃথক করে গণনা করে তবে আপনাকে জানতে হবে যে এটি 401000
একটি ভিত্তি হিসাবে ব্যবহার করে তাই বিয়োগ আমাদের পরম অফসেট দেয় 1AC10
।
দয়া করে মনে রাখবেন পরিবর্তন 74
( JZ
) এর হেক্স এডিটরে E9
( JMP
) না হবে। আপনি এটি কোনও হেক্স সম্পাদকে করতে পারবেন না, আপনার এমন কিছু প্রয়োজন হবে যা কোডকে বিচ্ছিন্ন ও পুনর্ব্যবহৃত করতে পারে তবে এটি সন্ধান করা অগত্যা সহজ নয় (উদাহরণস্বরূপ, আইডিএ পেশাদার যা লোকেরা আসলে প্রদান করে, উপযুক্ত সি কোড বা এক্সিকিউটেবল উত্পাদন করতে পারে না। ওলিডিবিজি, সাধারণত প্যাচ সম্প্রদায়ের মধ্যে ব্যবহৃত হয়, এমনকি সম্পাদনযোগ্যকেও খুলতে পারে না))। এবং তারপরেও, মাইক্রোসফ্ট তার নির্বাহযোগ্যকে টেম্পারিংয়ের বিরুদ্ধে রক্ষা করতে পারে, কারণ এটি EULA এর বিরুদ্ধে বিবেচনা করা যেতে পারে; সুতরাং ভালো থাকুন!
সাধরণ! এটি শক্ত, আমি কেবল আমার মাউস / চোখ / ... ব্যবহার করে দ্রুত টাইপ করতে চাই
আপনার অবশ্যই ড্যাশারটি চেক আউট করা উচিত যা কোনও অন-স্ক্রীন কীবোর্ডের চেয়ে দ্রুত গতিযুক্ত । এটি কেবল আপনার মাউসকে অক্ষরের দিকে নিয়ে যাওয়ার মাধ্যমে কাজ করে; অনুভূমিক চলন গতি নির্ধারণ করে এবং উল্লম্ব আন্দোলন অক্ষর নির্বাচন করে select এতে নির্মিত একটি অভিধানের সাহায্যে এমনকি বড় অক্ষরগুলির আকারও বড় হতে পারে, এটি আপনার গতিবিধি থেকেও শিখতে চেষ্টা করে যে গতি এবং অক্ষরগুলি সত্যই আপনার ব্যবহারের সাথে অভ্যস্ত।
একটি চিত্র হাজার হাজার শব্দের চেয়ে বেশি কথা বলে ...
অবশ্যই এটি বরং ছোট এবং এটির উদাহরণস্বরূপ দ্রুত নয় তবে এটি আপনার পর্দার ডানদিকে থাকতে এটি আকার পরিবর্তন করতে পারে যাতে এটি আপনার পর্দার সাথে হস্তক্ষেপ না করে। এটি আপনাকে যত দ্রুত সম্ভব টাইপ করতে দেয় ...
ভবিষ্যদ্বাণীগুলি কীভাবে আপনাকে যে কোনও ভাষা আরও দ্রুত টাইপ করতে দেয় তার একটি উত্তম উদাহরণ এখানে:
এছাড়াও নোট করুন যে ডানদিকের বর্ণগুলি একটি নির্দিষ্ট ক্রমে বাছাই করা হয়েছে, যেমন প্রধান দিক (উপরে, মধ্য বা নীচে) বিভিন্ন ধরণের (ছোট হাতের অক্ষর, বড় হাতের সংখ্যা, এবং বিরামচিহ্ন) এর মধ্যে চয়ন করে; এবং তারপরে এই জাতীয় প্রধান দিকের মধ্যে আপনার গৌণ দিকটি এজেড, এজেড, 0-9 এবং এর মধ্যে বেছে নেবে। আমি এটি অতীতে ব্যবহার করেছি এবং অন্যান্য প্রতিযোগীদের তুলনায় এটি কতটা সাবলীলভাবে তুলনা করা যায় তা দেখে অবাক হয়েছি ...
এছাড়াও লক্ষ করুন যে ড্যাশারের কিছু কনফিগারেশন রয়েছে, তাই আপনি নিজের পছন্দমতো কিছু সামঞ্জস্য করতে সক্ষম হতে পারেন।