আমি কীভাবে ডেটা স্ট্রাকচারটি সন্ধান করতে পারি যা স্মৃতিতে মাইনসুইপারের খনি বিন্যাসকে উপস্থাপন করে?


94

আমি নমুনা অ্যাপ্লিকেশন হিসাবে মাইনসুইপার ব্যবহার করে, বিপরীত প্রকৌশল সম্পর্কে শেখার চেষ্টা করছি। আমি একটি সাধারণ উইনডিবিজি কমান্ডে এই এমএসডিএন নিবন্ধটি পেয়েছি যা সমস্ত খনিগুলি প্রকাশ করে তবে এটি পুরানো, কোনও বিবরণে ব্যাখ্যা করা হয়নি এবং সত্যই আমি যা খুঁজছি তা নয়।

আমার আইডিএ প্রো ডিসেসেমব্লার এবং উইনডিবিজি ডিবাগার রয়েছে এবং আমি উভয়ের মধ্যে উইনমাইন.এক্সই লোড করেছি। খনি ক্ষেত্রের প্রতিনিধিত্ব করে এমন ডেটা স্ট্রাকচারের অবস্থান সন্ধানের ক্ষেত্রে কেউ এই প্রোগ্রামগুলির যে কোনও একটির জন্য কিছু ব্যবহারিক টিপস সরবরাহ করতে পারেন?

উইনডিবিজি-তে আমি ব্রেকপয়েন্টগুলি নির্ধারণ করতে পারি, তবে কোন মুহুর্তে ব্রেকপয়েন্ট স্থাপন করতে হবে এবং কোন মেমরির অবস্থান নির্ধারণ করা আমার পক্ষে ধারণা করা কঠিন। একইভাবে, আমি যখন আইডিএ প্রোতে স্থিতিশীল কোডটি দেখি তখন আমি নিশ্চিত নই যে খনি ক্ষেত্রের প্রতিনিধিত্ব করে এমন ফাংশন বা ডেটা কাঠামো কোথায় পাওয়া শুরু করব।

স্ট্যাকওভারফ্লোতে এমন কোনও বিপরীত প্রকৌশলী আছেন যা আমাকে সঠিক দিকে নির্দেশ করতে পারে?


27
শিক্ষার্থীদের জন্য একটি কার্যভারের জন্য কি দুর্দান্ত ধারণা। বিড়ালের মতো মাইনসুইপারের সাথে এনাটমি ল্যাবের মতো।
ojblass

4
আমাদের আন্তর্জাতিক পাঠকদের জন্য যেগুলি বিভ্রান্ত হতে পারে, মাইনসুইপার হ'ল উইন্ডোজ ভিস্তার সাহায্যে জাহাজের সুখী ফুলের সন্ধানের আমেরিকান সংস্করণ। মাইক্রোসফট.ব্লগউনস্ক্যানেল.com
index.php/

16
খুশি ফুলের খেলা? ও_ও রাজনৈতিক নির্ভুলতা অনেক বেশি এগিয়ে গেছে।
ইউজিন

10
ঠিক আছে, কমপক্ষে ভিস্তার সুইডিশ সংস্করণে মাইনসুইপার সংস্করণটি ডিফল্ট। আমি মনে করি যে তারা শুভ-ফুলের সংস্করণে ডিফল্ট হয়ে গেছে যেখানে মাইনগুলি আসলে বাচ্চাদের টুকরো টুকরো করে।
জেস্পেআর

4
সুতরাং ... কেবল কিছু এলোমেলো স্কোয়ারগুলিতে ক্লিক করে দেখুন যে তারা খনিগুলি কিনা এটির জন্য সহায়ক নয়, তাই না?
স্মন্ডোলি

উত্তর:


125

পার্ট 1 এর 1


যদি আপনি বিপরীতে ইঞ্জিনিয়ারিংয়ে গুরুতর হন - প্রশিক্ষক এবং প্রতারণামূলক ইঞ্জিনগুলি ভুলে যান।

গুড রিভার্স ইঞ্জিনিয়ারকে প্রথমে ওএস, কোর এপিআই ফাংশন, প্রোগ্রামের সাধারণ কাঠামো (কী রান লুপ, উইন্ডোজ স্ট্রাকচার, ইভেন্ট হ্যান্ডলিং রুটিন), ফাইল ফর্ম্যাট (পিই) জানতে হবে? পেটজোল্ডের ক্লাসিকগুলি "প্রোগ্রামিং উইন্ডোজ" অনলাইনে এমএসডিএন (www.amazon.com/exec/obidos/ISBN=157231995X) সহায়তা করতে পারে।

প্রথমে আপনার চিন্তা করা উচিত যেখানে মাইনফিল্ড সূচনা রুটিন বলা যেতে পারে। আমি নিম্নলিখিত সম্পর্কে ভেবেছিলাম:

  • আপনি যখন গেমটি চালু করবেন
  • আপনি যখন খুশি চেহারা ক্লিক করবেন
  • আপনি যখন খেলা-> নতুন ক্লিক করেন বা এফ 2 টিপুন
  • আপনি স্তর পরিবর্তন যখন

আমি এফ 2 এক্সিলারেটর কমান্ড চেক আউট করার সিদ্ধান্ত নিয়েছি।

এক্সিলারেটর হ্যান্ডলিং কোডটি সন্ধান করতে আপনি উইন্ডো বার্তা হ্যান্ডলিং পদ্ধতি (ডাব্লুড্রপোক) খুঁজে পাবেন। এটি তৈরি উইন্ডোএক্স এবং রেজিস্টারক্লাস কল দ্বারা সন্ধান করা যেতে পারে।

পড়তে:

আইডিএ খুলুন, উইন্ডো আমদানি করুন, "ক্রিয়েট উইন্ডো *" সন্ধান করুন, এটিতে ঝাঁপুন এবং এটি কোথায় ডাকা হয়েছে তা দেখতে "জিম্প এক্সরেফ অপারেন্ড (এক্স)" কমান্ডটি ব্যবহার করুন। সেখানে কেবল একটি কল করা উচিত।

এখন রেজিস্টারক্লাস ফাংশন জন্য দেখুন এবং এটি পরামিতি WndClass.lpfnWndProc roc আমি ইতিমধ্যে আমার ক্ষেত্রে ফাংশনটির নাম দিয়েছিলাম।

.text:0100225D                 mov     [ebp+WndClass.lpfnWndProc], offset mainWndProc
.text:01002264                 mov     [ebp+WndClass.cbClsExtra], edi
.text:01002267                 mov     [ebp+WndClass.cbWndExtra], edi
.text:0100226A                 mov     [ebp+WndClass.hInstance], ecx
.text:0100226D                 mov     [ebp+WndClass.hIcon], eax

.text:01002292                 call    ds:RegisterClassW

ফাংশন নামের এন্টার টিপুন (আরও ভাল কিছুতে এর নাম পরিবর্তন করতে 'এন' ব্যবহার করুন)

এখন একবার দেখুন

.text:01001BCF                 mov     edx, [ebp+Msg]

এটি মেসেজ আইডি, যা এফ 2 বোতামের ক্ষেত্রে WM_COMMAND মান থাকা উচিত ND আপনি এটি 111 ঘন্টা তুলনা করা হয় যেখানে খুঁজে পেতে হয়। এটি আইডিএ-তে এডেক্স ডাউন করে বা উইনডিবিজি-তে শর্তসাপেক্ষ ব্রেকআপপয়েন্ট সেট করে এবং গেমটিতে এফ 2 টি চাপিয়ে করা যায়।

যে কোনও উপায়ে এমন কিছু বাড়ে

.text:01001D5B                 sub     eax, 111h
.text:01001D60                 jz      short loc_1001DBC

111 ঘন্টা টিতে রাইট ক্লিক করুন এবং "সিম্বলিক ধ্রুবক" -> "স্ট্যান্ডার্ড সিম্বলিক ধ্রুবক ব্যবহার করুন", ডাব্লুএম_ এবং এন্টার লিখুন। আপনার এখন করা উচিত

.text:01001D5B                 sub     eax, WM_COMMAND
.text:01001D60                 jz      short loc_1001DBC

বার্তা আইডি মানগুলি খুঁজে বের করার এটি একটি সহজ উপায়।

এক্সিলারেটর হ্যান্ডলিং চেক আউট বুঝতে:

এটি একটি একক উত্তরের জন্য অনেকগুলি পাঠ্য। আপনি যদি আগ্রহী হন তবে আমি আরও দুটি পোস্ট লিখতে পারি। লম্বা গল্পের শর্ট মাইনফিল্ড বাইটের অ্যারে হিসাবে সঞ্চিত [24x36], 0x0F দেখায় যে বাইট ব্যবহৃত হয় না (ছোট ফিল্ড খেলছে), 0x10 - খালি মাঠ, 0x80 - খনি।

পার্ট 2 এর 2


ঠিক আছে, আসুন এফ 2 বোতামটি দিয়ে চলুন।

কীবোর্ড অ্যাকসিলারেটর ব্যবহার অনুসারে যখন F2 বোতামটি wndProc ফাংশন টিপানো হয়

... একটি WM_COMMAND বা WM_SYSCOMMAND বার্তা পায়। ডাব্লুপ্রাম প্যারামিটারের নিম্ন-অর্ডার শব্দটিতে ত্বরণকারীটির সনাক্তকারী রয়েছে contains

ঠিক আছে, আমরা ইতিমধ্যে খুঁজে পেয়েছি যেখানে ডাব্লুএম_সিএমএমএএনডি প্রসেসড, তবে কীভাবে সম্পর্কিত ডাব্লুআরপাম প্যারামিটার মান নির্ধারণ করবেন? এখানেই রিসোর্স হ্যাকার প্লে হয়। এটি বাইনারি দিয়ে খাওয়ান এবং এটি আপনাকে সমস্ত কিছু দেখায়। আমার জন্য এক্সিলিটর টেবিলের মতো।

Alt পাঠ্য http://files.getDPbox.com/u/1478671/2009-07-29_161532.jpg

আপনি এখানে দেখতে পাচ্ছেন, ডাব্লুপিআরএমে F2 বোতামটি 510 এর সাথে সম্পর্কিত।

এখন আসুন কোডটিতে ফিরে আসুন, যা ডাব্লুএম_কোম্যান্ড পরিচালনা করে। এটি বিভিন্ন ধাপের সাথে ডাব্লুপ্রামের তুলনা করে।

.text:01001DBC HandleWM_COMMAND:                       ; CODE XREF: mainWndProc+197j
.text:01001DBC                 movzx   eax, word ptr [ebp+wParam]
.text:01001DC0                 mov     ecx, 210h
.text:01001DC5                 cmp     eax, ecx
.text:01001DC7                 jg      loc_1001EDC
.text:01001DC7
.text:01001DCD                 jz      loc_1001ED2
.text:01001DCD
.text:01001DD3                 cmp     eax, 1FEh
.text:01001DD8                 jz      loc_1001EC8

দশমিক মানগুলি প্রদর্শন করতে প্রসঙ্গ মেনু বা 'এইচ' কীবোর্ড শর্টকাট ব্যবহার করুন এবং আপনি আমাদের লাফ দেখতে পারেন

.text:01001DBC HandleWM_COMMAND:                       ; CODE XREF: mainWndProc+197j
.text:01001DBC                 movzx   eax, word ptr [ebp+wParam]
.text:01001DC0                 mov     ecx, 528
.text:01001DC5                 cmp     eax, ecx
.text:01001DC7                 jg      loc_1001EDC
.text:01001DC7
.text:01001DCD                 jz      loc_1001ED2
.text:01001DCD
.text:01001DD3                 cmp     eax, 510
.text:01001DD8                 jz      loc_1001EC8 ; here is our jump

এটি কোড খণ্ডের দিকে নিয়ে যায় যা কিছু প্রোকে কল করে এবং ডাব্ল্যান্ডড্রোক থেকে প্রস্থান করে।

.text:01001EC8 loc_1001EC8:                            ; CODE XREF: mainWndProc+20Fj
.text:01001EC8                 call    sub_100367A     ; startNewGame ?
.text:01001EC8
.text:01001ECD                 jmp     callDefAndExit  ; default

এটি কি নতুন গেমের সূচনা করে ফাংশন? শেষ অংশে এটি সন্ধান করুন! সাথে থাকুন.

পার্ট 3 এর 3

আসুন সেই ফাংশনের প্রথম অংশটি একবার দেখুন

.text:0100367A sub_100367A     proc near               ; CODE XREF: sub_100140C+CAp
.text:0100367A                                         ; sub_1001B49+33j ...
.text:0100367A                 mov     eax, dword_10056AC
.text:0100367F                 mov     ecx, uValue
.text:01003685                 push    ebx
.text:01003686                 push    esi
.text:01003687                 push    edi
.text:01003688                 xor     edi, edi
.text:0100368A                 cmp     eax, dword_1005334
.text:01003690                 mov     dword_1005164, edi
.text:01003696                 jnz     short loc_10036A4
.text:01003696
.text:01003698                 cmp     ecx, dword_1005338
.text:0100369E                 jnz     short loc_10036A4

রেজিস্টার ইੈਕਸ এবং ইক্সে দুটি পাঠ্য (ডওয়ার্ড_10056 এ্যাক, ইউভ্যালু) রয়েছে এবং অন্য দুটি মানের সাথে তুলনা করা হয় (dword_1005164, dword_1005338)।

উইনডিবিজি ('বিপি 01003696'; ব্রেক 'পি ইক্স; পি এক্সেক্স') ব্যবহার করে প্রকৃত মানগুলি একবার দেখুন - এগুলি আমার কাছে মাইনফিল্ডের মাত্রা বলে মনে হয়েছিল। কাস্টম মাইনফিল্ড আকারের সাথে খেলতে দেখা গেছে যে প্রথম জোড়াটি নতুন মাত্রা এবং দ্বিতীয়টি - বর্তমান মাত্রা। নতুন নাম সেট করা যাক।

.text:0100367A startNewGame    proc near               ; CODE XREF: handleButtonPress+CAp
.text:0100367A                                         ; sub_1001B49+33j ...
.text:0100367A                 mov     eax, newMineFieldWidth
.text:0100367F                 mov     ecx, newMineFieldHeight
.text:01003685                 push    ebx
.text:01003686                 push    esi
.text:01003687                 push    edi
.text:01003688                 xor     edi, edi
.text:0100368A                 cmp     eax, currentMineFieldWidth
.text:01003690                 mov     dword_1005164, edi
.text:01003696                 jnz     short loc_10036A4
.text:01003696
.text:01003698                 cmp     ecx, currentMineFieldHeight
.text:0100369E                 jnz     short loc_10036A4

একটু পরে নতুন মানগুলি ওভাররাইট বর্তমান এবং সাবরুটাইন বলা হয়

.text:010036A7                 mov     currentMineFieldWidth, eax
.text:010036AC                 mov     currentMineFieldHeight, ecx
.text:010036B2                 call    sub_1002ED5

এবং যখন আমি এটি দেখেছি

.text:01002ED5 sub_1002ED5     proc near               ; CODE XREF: sub_1002B14:loc_1002B1Ep
.text:01002ED5                                         ; sub_100367A+38p
.text:01002ED5                 mov     eax, 360h
.text:01002ED5
.text:01002EDA
.text:01002EDA loc_1002EDA:                            ; CODE XREF: sub_1002ED5+Dj
.text:01002EDA                 dec     eax
.text:01002EDB                 mov     byte ptr dword_1005340[eax], 0Fh
.text:01002EE2                 jnz     short loc_1002EDA

আমি পুরোপুরি নিশ্চিত ছিলাম যে মাইনফিল্ড অ্যারেটি পেয়েছি। চক্রের কারণ যা 0xF দিয়ে 360h বাইট দৈর্ঘ্যের অ্যারে (dword_1005340) এনে দেয়।

কেন 360h = 864? এই সারির নীচে কিছু সংকেত রয়েছে যা 32 বাইট নেয় এবং 864 কে 32 দ্বারা ভাগ করা যায়, তাই অ্যারে 27 * 32 কোষ ধারণ করতে পারে (যদিও ইউআই সর্বাধিক 24 * 30 ক্ষেত্রের অনুমতি দেয়, সীমানার জন্য অ্যারের চারপাশে একটি বাইট প্যাডিং রয়েছে)।

নিম্নলিখিত কোডটি মাইনফিল্ড শীর্ষ এবং নীচের সীমানা (0x10 বাইট) উত্পন্ন করে। আমি আশা করি আপনি এই জগতে লুপ পুনরাবৃত্তিটি দেখতে পাবেন;) আমাকে কাগজ এবং কলম ব্যবহার করতে হয়েছিল

.text:01002EE4                 mov     ecx, currentMineFieldWidth
.text:01002EEA                 mov     edx, currentMineFieldHeight
.text:01002EF0                 lea     eax, [ecx+2]
.text:01002EF3                 test    eax, eax
.text:01002EF5                 push    esi
.text:01002EF6                 jz      short loc_1002F11    ; 
.text:01002EF6
.text:01002EF8                 mov     esi, edx
.text:01002EFA                 shl     esi, 5
.text:01002EFD                 lea     esi, dword_1005360[esi]
.text:01002EFD
.text:01002F03 draws top and bottom borders
.text:01002F03 
.text:01002F03 loc_1002F03:                            ; CODE XREF: sub_1002ED5+3Aj
.text:01002F03                 dec     eax
.text:01002F04                 mov     byte ptr MineField?[eax], 10h ; top border
.text:01002F0B                 mov     byte ptr [esi+eax], 10h       ; bottom border
.text:01002F0F                 jnz     short loc_1002F03
.text:01002F0F
.text:01002F11
.text:01002F11 loc_1002F11:                            ; CODE XREF: sub_1002ED5+21j
.text:01002F11                 lea     esi, [edx+2]
.text:01002F14                 test    esi, esi
.text:01002F16                 jz      short loc_1002F39

এবং সাবরোটিনের বাকি অংশগুলি বাম এবং ডান সীমানা আঁকবে

.text:01002F18                 mov     eax, esi
.text:01002F1A                 shl     eax, 5
.text:01002F1D                 lea     edx, MineField?[eax]
.text:01002F23                 lea     eax, (MineField?+1)[eax+ecx]
.text:01002F23
.text:01002F2A
.text:01002F2A loc_1002F2A:                            ; CODE XREF: sub_1002ED5+62j
.text:01002F2A                 sub     edx, 20h
.text:01002F2D                 sub     eax, 20h
.text:01002F30                 dec     esi
.text:01002F31                 mov     byte ptr [edx], 10h
.text:01002F34                 mov     byte ptr [eax], 10h
.text:01002F37                 jnz     short loc_1002F2A
.text:01002F37
.text:01002F39
.text:01002F39 loc_1002F39:                            ; CODE XREF: sub_1002ED5+41j
.text:01002F39                 pop     esi
.text:01002F3A                 retn

উইনডিবিজি কমান্ডগুলির স্মার্ট ব্যবহার আপনাকে কুল মাইনফিল্ড ডাম্প সরবরাহ করতে পারে (কাস্টম সাইজ 9x9)। সীমানা দেখুন!

0:000> db /c 20 01005340 L360
01005340  10 10 10 10 10 10 10 10-10 10 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005360  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005380  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
010053a0  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
010053c0  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
010053e0  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005400  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005420  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005440  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005460  10 0f 0f 0f 0f 0f 0f 0f-0f 0f 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
01005480  10 10 10 10 10 10 10 10-10 10 10 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
010054a0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
010054c0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................
010054e0  0f 0f 0f 0f 0f 0f 0f 0f-0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f 0f  ................................

হুম, দেখে মনে হচ্ছে বিষয়টি বন্ধ করতে আমার আরও একটি পোস্ট দরকার


4
@ স্ট্যানিস্লাভ, ভাল উত্তর স্ট্যানিস্লাভ। আপনি যদি এটিতে কিছুটা ব্যাখ্যা করতে পারেন তবে দয়া করে এটি করুন। এই দীর্ঘ, তথ্যবহুল উত্তরগুলি সেরা। মাইনফিল্ড ডেটা স্ট্রাকচারটিতে আপনি কীভাবে শূন্য করলেন এই বিষয়ে আরও কিছুটা?
কিং নেস্টর

@ স্ট্যানিসালভ, আমি আপনার উত্তরটি মেনে নিয়েছি কারণ 250 জনের রেপটি শেষ হয়েছিল। অভিনন্দন!
কিং নেস্টর

4
@ স্ট্যানিসালভ, আমি আপনার বহু অংশের উত্তরটি একটি একক উত্তরে সম্পাদনা করেছি। আপনি আপনার একক উত্তরের আকারের সীমাতে পৌঁছান নি এবং আমি মনে করি সাধারণত বেশ কয়েকটি পোস্টের পরিবর্তে একটি উত্তর দেওয়া ভাল। আপনার আসল উত্তরটি (এটির একটি) সম্পাদনা করতে নির্দ্বিধায় এবং আপনার উপযুক্ত হিসাবে এটি যুক্ত করুন।
এমএমসিডল

4
এছাড়াও, মহাকাব্য উত্তর স্ট্যানিস্লাভ। আপনার পরিশ্রমের জন্য অনেক ধন্যবাদ!
এমএমসিডল

15

দেখে মনে হচ্ছে আপনি উত্সকে বিচ্ছিন্ন করার চেষ্টা করছেন তবে আপনাকে যা করা দরকার তা হল চলমান প্রোগ্রামের মেমরির স্থানটি দেখুন। হেক্স সম্পাদক এইচএক্সডি-র একটি বৈশিষ্ট্য রয়েছে যা আপনাকে এটি করতে দেয়।

http://www.freeimagehosting.net/uploads/fcc1991162.png

আপনি একবার মেমোরি স্পেসে পৌঁছে গেলে বোর্ডের সাথে গোলমাল করার সময় মেমরির স্ন্যাপশট নেওয়ার বিষয়টি। কি পরিবর্তন না বনাম কি বিচ্ছিন্ন করুন। যখন আপনি মনে করেন যে হেক্স মেমরিতে ডেটা স্ট্রাকচারটি রয়েছে সেখানে আপনার একটি হ্যান্ডেল রয়েছে, তখন এটি মেমোরিতে থাকাকালীন সম্পাদনা করে দেখুন এবং ফলস্বরূপ বোর্ডটি পরিবর্তন হয় কিনা।

আপনি যে প্রক্রিয়াটি চান তা কোনও ভিডিও গেমের জন্য 'প্রশিক্ষক' তৈরির বিপরীতে নয়। এগুলি সাধারণত যেখানে স্বাস্থ্য এবং গোলাগুলির মতো মানগুলি স্মৃতিতে বাস করে এবং ফ্লাইতে সেগুলি পরিবর্তনের উপর ভিত্তি করে। গেম ট্রেনার কীভাবে তৈরি করবেন সে সম্পর্কে আপনি কয়েকটি ভাল টিউটোরিয়াল পেতে সক্ষম হতে পারেন।


4
ঠিক আছে, আপনি স্থির বিযুক্তির মাধ্যমে মেমরির অবস্থানটি সনাক্ত করতে পারেন। খনি ক্ষেত্রটি উত্পন্ন করার জন্য র্যান্ড () ফাংশনগুলির মতো জিনিসগুলির সন্ধানের জন্য আপনি সমাবেশ সংক্রান্ত নির্দেশাবলী অনুসরণ করতে পারেন এবং তারপরে ক্ষেত্রটি মেমোরিতে (এবং কীভাবে) সংরক্ষণ করা হয় তা দেখতে সেখান থেকে সন্ধান করতে পারেন।
এমএমসিডল

উভয় পদ্ধতির চ্যালেঞ্জিং। আমি অতীতে অ্যাপ্লিকেশনগুলি বিচ্ছিন্ন করার চেষ্টা করেছি এবং এটি আমার খুব বেদনাদায়ক বলে মনে হয়েছে। আপনি ঠিক কীভাবে কোনও র‌্যান্ড () ফাংশনটি চিহ্নিত করেন?
জেমস ম্যাকমাহন

আপনার উত্তর নিমোর জন্য আপনাকে ধন্যবাদ।
কিং নেস্টর

11

এই কোড প্রকল্পের নিবন্ধটি দেখুন, আপনি উল্লিখিত ব্লগ পোস্টের তুলনায় এটি গভীরতার চেয়ে আরও কিছুটা বেশি।

http://www.codeproject.com/KB/trace/minememoryreader.aspx

সম্পাদনা করুন

এবং এই নিবন্ধটি যদিও সরাসরি মাইনসুইপার সম্পর্কে নয়, উইনডিবিজি ব্যবহার করে মেমরির মাধ্যমে শিকারের বিষয়ে আপনাকে ধাপে নির্দেশিকা দেয়:

http://www.codingthewheel.com/archives/extracting-hided-text-with-windbg

সম্পাদনা 2

আবার এটি মাইনসুইপার সম্পর্কে নয়, তবে এটি অবশ্যই আমার স্মৃতি ডিবাগিংয়ের জন্য চিন্তার জন্য কিছু খাবার দিয়েছে, এখানে টিউটোরিয়ালগুলির প্রচুর পরিমাণ আছে:

http://memoryhacking.com/forums/index.php

এছাড়াও, চিটইঙ্গাইন (নিক ডি দ্বারা উল্লিখিত) ডাউনলোড করুন এবং এটি যে টিউটোরিয়ালটি আসে তা ব্যবহার করুন।


9

"উইনডিবিজি-তে আমি ব্রেকপয়েন্টগুলি নির্ধারণ করতে পারি, তবে কোন ব্রেকআপপয়েন্ট এবং কোন মেমরির অবস্থান নির্ধারণ করা উচিত তা আমার পক্ষে ধারণা করা কঠিন। একইভাবে, আমি যখন আইডিএ প্রোতে স্থির কোডটি দেখি, তখনও আমি নিশ্চিত হতে পারি না যে এমনকি কোথায় শুরু করতে হবে খনি ক্ষেত্রের প্রতিনিধিত্ব করে এমন ফাংশন বা ডেটাস্ট্রাকচার সন্ধান করতে।

হুবহু!

ভাল, আপনি এলোমেলো () এর মতো রুটিনগুলি সন্ধান করতে পারেন যা খনি সারণীর নির্মাণের সময় ডাকা হবে। আমি যখন বিপরীত প্রকৌশল নিয়ে পরীক্ষা করছিলাম তখন এই বইটি আমাকে অনেক সহায়তা করেছিল। :)

সাধারণভাবে, ব্রেক পয়েন্ট নির্ধারণের জন্য ভাল জায়গাগুলি ম্যাসেজ বাক্সগুলিতে কল, একটি শব্দ বাজানোর কল, টাইমার এবং অন্যান্য উইন 32 এপিআই রুটিন।

বিটিডাব্লু, আমি এখনই অলিডিবিজি দিয়ে মাইনসুইপার স্ক্যান করছি ।

আপডেট: নিমো আমাকে একটি দুর্দান্ত সরঞ্জাম স্মরণ করিয়ে দিয়েছে, এরিক "ডার্ক বাইট" হিজেনেন দ্বারা চিট ইঞ্জিন

চিট ইঞ্জিন (সিই) অন্য প্রক্রিয়াগুলির মেমরির স্থান দেখার ও পরিবর্তন করার জন্য দুর্দান্ত সরঞ্জাম। সেই বেসিক সুবিধার বাইরেও সিই এর আরও বিশেষ বৈশিষ্ট্য রয়েছে যেমন কোনও প্রক্রিয়ার বিচ্ছিন্ন মেমরি দেখতে এবং অন্যান্য প্রক্রিয়াগুলিতে কোড ইনজেকশন দেওয়ার মতো।

(এই প্রকল্পের আসল মানটি হ'ল আপনি সোর্স কোডটি ডাউনলোড করতে পারেন - ডেলফি- এবং দেখুন যে কীভাবে এই প্রক্রিয়াগুলি বাস্তবায়িত হয়েছিল - আমি বহু বছর আগে এটি করেছি: ও)


5

এই বিষয়ে খুব সুন্দর একটি নিবন্ধ আনইনফর্মযুক্ত পাওয়া যাবে । এটি মাইনসুইপারকে (বিপরীত প্রকৌশল উইন 32 অ্যাপ্লিকেশনগুলির পরিচিতি হিসাবে) বিস্তৃতভাবে চমত্কার বিস্তৃতভাবে কভার করে এবং এটি প্রায় এক দুর্দান্ত দুর্দান্ত সংস্থান জুড়ে।


4

এই ওয়েবসাইটটি আরও সহায়ক হতে পারে:

http://www.subversity.net/reversing/hacking-minesweeper

এটি করার সাধারণ উপায়টি হ'ল:

  1. একরকম সোর্স কোড পান।
  2. বিচ্ছিন্ন করা এবং আশা করা বাকী চিহ্নগুলি আপনাকে সহায়তা করতে পারে।
  3. ডেটা টাইপটি অনুমান করুন এবং এটিকে কাজে লাগানোর চেষ্টা করুন এবং সম্ভাবনাগুলি সীমাবদ্ধ করতে একটি মেমরি স্ক্যানার ব্যবহার করুন।

বাউন্টির জবাবে

ঠিক আছে, দ্বিতীয় পাঠে, এটি প্রদর্শিত হবে যেন আপনি ইঞ্জিনিয়ারকে কীভাবে বিপরীতমুখী করবেন তার সাধারণ প্রশ্নের চেয়ে বরং উইনডিবিজির মতো কোনও ডিবাগার কীভাবে ব্যবহার করবেন সে সম্পর্কে একটি গাইড চান wanted আমি ইতিমধ্যে আপনাকে এমন ওয়েবসাইট দেখিয়েছি যা আপনাকে অনুসন্ধান করার জন্য প্রয়োজনীয় মূল্যবোধগুলি বলে দেয়, সুতরাং প্রশ্নটি হল আপনি কীভাবে এটি অনুসন্ধান করবেন?

আমি এই উদাহরণে নোটপ্যাড ব্যবহার করছি কারণ আমার কাছে মাইনসুইপার ইনস্টল করা নেই। তবে ধারণাটি একই।

বিকল্প পাঠ

তুমি টাইপ কর

s <options> <memory start> <memory end> <pattern>

সহায়তাটি দেখতে "?" এবং তারপরে "এস" টিপুন।

আপনি যখন চান মেমরি প্যাটার্নটি খুঁজে পেয়েছেন, তারপরে আপনি একটি দুর্দান্ত ডিসপ্লেতে মেমরি দর্শকের সামনে আনতে Alt + 5 টিপুন।

বিকল্প পাঠ

উইনডিবিজি কিছুটা অভ্যস্ত হয়ে ওঠে তবে এটি অন্য কোনও ডিবাগারের মতোই ভাল।


4
"কোনওভাবে সোর্স কোড পান" মিনসুইপারকে সোর্স ছাড়াই পাঠানো হওয়ায় একটি নির্বোধ বক্তব্য। এবং উত্স সহ বিপরীত প্রকৌশল বিপরীত প্রকৌশল নয় ... এটি উত্স-কোড বিশ্লেষণ।
mrduclaw

@ শ্রীডাক্লাওতে এমন অ্যাপ্লিকেশন রয়েছে যা উত্স ভাষাতে অ্যাসেম্বলিটি বিভক্ত করতে পারে। "উত্স-কোড বিশ্লেষণ" নামে কোনও শব্দ নেই।
অজানা

4
@ অজানা এমন অ্যাপ্লিকেশন রয়েছে যা প্রদত্ত সংকলিত বাইনারি থেকে উত্স ভাষায় একটি প্রোগ্রাম পুনর্গঠনের চেষ্টা করে। তবে আপনি কোনও সংকলিত বাইনারি থেকে লেখকের মন্তব্য এবং উদ্ধৃতি সহ "উত্স কোড" পেতে পারেন না। অবশ্যই, এই "ডেকম্পিলার "গুলির মধ্যে কিছু অন্যের চেয়ে ভাল কাজ করে তবে তারা আপনাকে লেখক যে কোডটি লিখেছিল তা দিচ্ছে না (সংকলক অনুকূলিত কোডটি প্রায়শই প্রোগ্রামার কোড থেকে খুব আলাদা হয়)। এবং আপনি কি কখনও মানের নিশ্চয়তা পরীক্ষা করেননি? প্রিফেষ্ট এবং স্পারসের মতো সরঞ্জামগুলি কী করে? স্থির উত্স কোড বিশ্লেষণ।
mrduclaw

প্রিফেষ্ট এবং স্পার্সে স্ট্যাটিক সোর্স কোড বিশ্লেষণ হ্যাক করার জন্য ড্যাম্পপাইলড কোডটি ম্যানুয়ালি পড়া থেকে সম্পূর্ণ আলাদা। আমি মনে করি না যে কেউ এই দুটি ভিন্ন ধারণা একে অপরের হিসাবে বিভ্রান্ত করবে।
অজানা

@ অজানা আমি এটিকে আরও এগিয়ে নিয়েছি এবং সম্মত হচ্ছি যে উত্স কোডটি দেখে আপনার বিপরীত ইঞ্জিনিয়ারিং বিচ্ছিন্নতা বিভ্রান্ত করা উচিত নয় (পচে যাওয়া বা অন্যথায় যদি আপনার উত্স থাকে তবে আপনার উত্স কোড বিশ্লেষণ করছেন)। এটা আমার পুরো বিষয়টি ছিল। সুতরাং দয়া করে, দুজনকে বিভ্রান্ত করা বন্ধ করুন। :)
mrduclaw

0

ডিবাগারে ট্রেসিং শুরু করার জন্য একটি ভাল পয়েন্টটি হবে মাউস আপে। সুতরাং মূল উইন্ডো পদ্ধতিটি সন্ধান করুন (আমি মনে করি স্পাইএক্সএক্সএক্সের মতো সরঞ্জামগুলি উইন্ডোজ বৈশিষ্ট্যগুলি পরীক্ষা করতে পারে এবং ইভেন্ট হ্যান্ডলারের ঠিকানাগুলির মধ্যে একটি)) এটিতে বিরতি দিন এবং এটি মাউসের ইভেন্টগুলি যেখানে পরিচালনা করে তা সন্ধান করুন - একটি স্যুইচ আসবে, যদি আপনি এটি সমাবেশে সনাক্ত করতে পারেন (উইন্ডোজে মাউস আপ করার জন্য ডাব্লুএম_এক্সএক্সএক্সের মান দেখুন)।

সেখানে একটি ব্রেকপয়েন্ট রাখুন এবং পদক্ষেপটি শুরু করুন you

ধৈর্য ধরুন, যে কোনও সময় কী করা হচ্ছে তা সনাক্ত করার চেষ্টা করুন, তবে আপনার বর্তমান উদ্দেশ্যটির জন্য উদ্বেগজনক হওয়ার আশঙ্কায় আপনার কোডটি খুব গভীরভাবে দেখে বিরক্ত করবেন না। এটি কমাতে ডিবাগারে বেশ কয়েকটি রান লাগতে পারে।

সাধারণ win32 অ্যাপ্লিকেশন কর্মপ্রবাহ সম্পর্কে জ্ঞান খুব সহায়তা করে।


0

খনিগুলি সম্ভবত একরকম দ্বি-মাত্রিক অ্যারেতে সংরক্ষণ করা হবে। এর অর্থ এটি পয়েন্টারগুলির একটি অ্যারে বা একক সি স্টাইলের বুলিয়ান ray

যখনই ফর্মটি একটি মাউস-আপ ইভেন্ট পায় এই ডেটা কাঠামোটি রেফারেন্স করা হয়। সূচকটি মাউস স্থানাঙ্ক ব্যবহার করে গণনা করা হবে, সম্ভবত পূর্ণসংখ্যা বিভাগ ব্যবহার করে। তার অর্থ হল আপনার সম্ভবত কোনও cmpবা অনুরূপ নির্দেশের সন্ধান করা উচিত , যেখানে অপারেটরগুলির মধ্যে একটি অফসেট ব্যবহার করে গণনা করা হয় এবং xযেখানে xপূর্ণসংখ্যা বিভাগকে জড়িত কোনও গণনার ফলাফল। অফসেটটি তখন ডাটা স্ট্রাকচারের শুরুতে পয়েন্টার হবে।


0

এটি ধরে নেওয়া মোটামুটি যুক্তিযুক্ত যে খনি সম্পর্কে তথ্য কমপক্ষে সারিগুলির জন্য স্মৃতিতে স্বচ্ছলভাবে ছড়িয়ে দেওয়া হয় (যেমন এটি একটি 2 ডি-অ্যারে, বা অ্যারে অফ-অ্যারে)। সুতরাং, আমি একই সারিতে বেশ কয়েকটি সংলগ্ন কক্ষগুলি খোলার চেষ্টা করব, প্রক্রিয়াটির মেমরি ডাম্পগুলি যেতে যেতে তৈরি করব এবং তারপরে সেগুলি পৃথক করে এবং একই মেমরি অঞ্চলে কোনও পুনরাবৃত্তি পরিবর্তনগুলি অনুসন্ধান করুন (অর্থাত্ প্রথম ধাপে 1 বাইট পরিবর্তিত হয়েছে, পরের ধাপে) বাইট পরবর্তী পদক্ষেপে ঠিক একই মান হিসাবে পরিবর্তিত হয়, ইত্যাদি)।

এটি একটি প্যাকেট বিট অ্যারেরও সম্ভাবনা রয়েছে (আমার প্রতি 3 বিটগুলি সমস্ত সম্ভাব্য রাজ্য - বদ্ধ / উন্মুক্ত, খনি / না-খনি, পতাকাযুক্ত / অ-পতাকাঙ্কিত) রেকর্ড করার জন্য যথেষ্ট হওয়া উচিত, তাই আমি এটিও সন্ধান করবো ( নিদর্শনগুলিও পুনরাবৃত্তিমূলক হবে, যদিও স্পট করা শক্ত। তবে এটি মোকাবেলা করার জন্য সুবিধাজনক কাঠামো নয় এবং আমি মনে করি না মাইনসুইপারের জন্য মেমরির ব্যবহারটি একটি বাধা ছিল, সুতরাং এই ধরণের জিনিসটি ব্যবহার হওয়ার সম্ভাবনা কম।


0

কঠোরভাবে কোনও "বিপরীত প্রকৌশলের সরঞ্জাম" নয়, এবং খেলনা বেশি এমনকি আমার মতো একজন বোকাও ব্যবহার করতে পারে, চেট ইঞ্জিনটি দেখুন । মেমরির কোন অংশগুলি পরিবর্তিত হয়েছে, কখন, এবং পয়েন্টারগুলির মাধ্যমে পরিবর্তিত মেমরির অংশগুলি ট্র্যাক করার বিধান রয়েছে তা ট্র্যাক করা কিছুটা সহজ করে তোলে (যদিও আপনার সম্ভবত এটির প্রয়োজন নেই)। একটি সুন্দর ইন্টারেক্টিভ টিউটোরিয়াল অন্তর্ভুক্ত করা হয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.