কাঁচা বাইনারি কোড থেকে প্রসেসরের ধরণ সনাক্ত করুন?


19

চিপগুলির সাথে আসলে সম্পর্কিত নয়, তবে আশা করি আমি এখান থেকে কিছু দিকনির্দেশনা পেয়ে যাব।

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


7
আপনি আমাদের কাঁচা হেক্স প্রথম 200 বাইট দিতে পারেন?
পিংসওয়েট

এটি একটি মজার প্রশ্ন। আপনি কোন ধরণের ডিভাইস হ্যাক করছেন?
ডেভিডগ্রেইসন 21

1
আপনি কয়েকজন পৃথক বিচ্ছিন্নকারীকে এটি খাওয়ানোর চেষ্টা করতে পারেন এবং দেখুন কী হয়।
জাস্টজেফ

2
আমি 100 বাইটে কোডটির নাম রাখব! = পি
জাস্টজেফ

দুর্দান্ত প্রশ্ন। স্ট্যাকওভারফ্লো এর জন্য আরও ভাল ফিট হতে পারে।
ধারালো দিন

উত্তর:


16

এটি GNU ফাইলের মাধ্যমে চালানোর চেষ্টা করুন। যদি এটির কোনও মানক শিরোলেখ পাওয়া যায় তবে তা এটি তুলে নেবে।

যেমন।

jrt@lin:~/src$ file foo
foo: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped

চেষ্টা করেছেন। জিএনইউ ফাইল বলছে এটি "ডেটা"।
মানসিকবিদ

3
আপনি এটি কিছু পোস্ট করতে পারেন? "স্ট্রিং" দিয়ে এএসসিআইআই-তে অনুসন্ধান করার চেষ্টা করেছেন?
টবি জাফি

9

এটি একটি খুব আকর্ষণীয় প্রশ্ন। সেখানে লক্ষ লক্ষ নির্দেশ রয়েছে, তবে খুব সাধারণভাবে ব্যবহৃত কয়েকটি মুষ্টিমেয়।

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

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

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

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

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

এই মুহুর্তে, আমি সর্বাধিক সাধারণ প্রসেসরের আর্কিটেকচার দিয়ে শুরু করব এবং কোনও কিছু সংযুক্ত কিনা তা দেখতে চাই see এক্স 86, আর্ম, মিপস, 8051, এভিআর, পিক, পাওয়ারপিসি, জেড 80, 68 কে, 6502, ইত্যাদি ইত্যাদি। সাধারণ প্রসেসর এবং নির্দেশের সেটগুলির তালিকা রয়েছে - কমপক্ষে ইংরেজি স্পিকিং ওয়ার্ল্ডে - যা সহায়ক হতে পারে।

আমি কোনও অটোমেটেড সরঞ্জাম সম্পর্কে সচেতন নই যা এটির সাহায্যে সহায়তা করবে তবে এমএএমএইএম অনেকগুলি প্রসেসরের আর্কিটেকচারকে অনুকরণ করে এবং একটি সম্ভাব্য পদ্ধতি হ'ল বেশ কয়েকটি প্রসেসরের মাধ্যমে কোড চালানো এবং কোনটি কি অনুসারে ক্লিক করে কিনা তা দেখতে নিবন্ধগুলি দেখুন watch আপনি ডিজাইন সম্পর্কে জানেন।


"এমনকি ইউরোপের কয়েকটি প্রসেসর রয়েছে যা অন্যদের চেয়ে বেশি সাধারণ" " ইউরোপে বাস করা, আমার কাছে এই ঘটনা কখনও ঘটেনি। আপনি উদাহরণ দিতে পারেন?
স্টিভেনভ

@ স্টেভেনভ একারন এবং সিনক্লেয়ার সংস্থাগুলির কারণে 6502 এবং জেড 80 ভিত্তিক এমবেডেড সিস্টেমগুলি খুব জনপ্রিয় ছিল। এবং, অবশ্যই, এআরএম প্রসেসরটি অ্যাকর্ন কম্পিউটারে শুরু হয়েছিল।
অ্যাডাম ডেভিস

5

আইডিয়া: আপনি কি সোর্সকোডের বয়স জানেন , অর্থাত্ এটি কখন / বছরটি তৈরি হয়েছিল?

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

দ্বিতীয় চিন্তায়, কেবল গত 20 বছরে প্রসেসরের ব্যাপক প্রসার দেওয়া, এটি একটি সুই-ইন-এ-হাইস্ট্যাক কৌশল হতে পারে এবং খুব ফলপ্রসূ নয়।


4

অনেক চাঁদ আগে, যখন চারপাশে এতগুলি বিভিন্ন প্রসেসরের কোর ছিল না, তখন আমি ফ্রিকোয়েন্সি বিশ্লেষণের মাধ্যমে জেড 80 কোডটি কয়েকবার সনাক্ত করেছি । জেড 80 এর CDজন্য মেশিন কোড call subroutineএবং C9এটি return from subroutine(আমি কখনই ভুলব না), এবং এগুলি প্রায়শই সর্বাধিক ঘটে যাওয়া কোডগুলি। এটির প্রয়োজন হয় তবে আপনি কোনও মেশিন কোড স্তরে থাকা নির্দেশিকা নির্দেশের সাথে পরিচিত। অ্যাসেমব্লিতে হাতছাড়া অভিজ্ঞতা লাভ করে (এটি অনেক কিছু করেছে এবং অফসেটগুলি গণনা করতে আমি এখনও হেক্সে পিছনে গুনতে পারি)।


3

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


1

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

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

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