PDA

View Full Version : سوال: خواندن سکتور صفر هارد دیسک



saber187518
شنبه 02 خرداد 1394, 20:45 عصر
سلام دوستان
من میخوام سکتور صفر هارد یا همون MBR رو بخونم
توی وب زیاد سرچ زدم
اما بیشتر کدهایی رو که بهم داد با استفاده از API ویندوز بود.
من میخوام این کار رو بدون استفاده از این توابع انجام بدم. به تحوی که توی سیستم عامل لینوکس (اوبونتو 14.10) هم کار کنه.
لطفا کمکم کنید.
با تشکر

saber187518
جمعه 08 خرداد 1394, 09:16 صبح
سلام دوستان
کسی نیست بتونه کمک کنه.

MohammadReza1994
شنبه 09 خرداد 1394, 19:34 عصر
فرقی نداره ویندوز باشه یا لینوکس یا بی اس دی یا ... ، سیستم عامل ها اجازه دسترسی مستقیم به سخت افزار نمیدن البته تا اونجایی که من میدونم. اصن یکی از وظایف سیستم عامل فراهم کردن امکانات دسترسی به سخت افزاره. اگه قرار باشه هر کی به هر سخت افزاری که دلش خواست دسترسی داشته باشه پس مسئله انحصار متقابل چی میشه؟

BORHAN TEC
شنبه 09 خرداد 1394, 19:57 عصر
با سلام،
سکتور صفر هارد رو نمیدونم، چون تاحالا باهاش درگیر نبودم ولی در خصوص خواندن و نوشتن سکتورها قبلاً کد کاملی را در لینک زیر قرار داده بودم:
http://barnamenevis.org/showthread.php?413999
موفق باشید...

reza_noei
شنبه 09 خرداد 1394, 20:59 عصر
در لینوکس شما میتوانید از دستور dd استفاده کنید.
در سیستم عامل لینوکس تمام دستگاه ها به شکل فایل قابل استفاده هستند پس شما میتوانید از هاردتون مثل یک فایل بخوانید.

sudo dd if = /dev/sda of = [file name] bs = 512 count = 1


if فایل ورودی را مشخص میکند که در مثال من sda است اگر شما از چند هارد دیسک استفاده میکنید ممکن است سیستم عاملتان برروی هارد دیسک دوم نصب شده باشد (sdb)
of فایل خروجی را مشخص میکند یعنی فایلی که شما قصد دارید اطلاعات خوانده شده را در آن بریزید
bs اندازه بلاک خوانده شده را مشخص میکند. در مثال من 512 بایت بعنوان طول بلاک در نظر گرفته شده
count تعداد بلاک جهت خواندن را مشخص میکند. در مثال بالا خواستیم تنها یک بلاک بخوانیم.

گزینه های دیگری تیز برای کار با این دستور وجود دارد.
همچنین این برنامه نسخه ویندوزی هم دارد.

مهم ترین نکته ای که در هنگام کار با این دستور باید به آن توجه کنید خطرناک بودن این دستور است یعنی اگر در وارد کردن گزینه ها اشتباهی از جانب شما سر بزند
بی شوخی عملیات را برروی سیستم شما انجام میدهد و ممکن است با یک اشتباه کوچک به اطلاعاتتان آسیب برسانید.

saber187518
پنج شنبه 14 خرداد 1394, 02:55 صبح
با تشکر فراوان از جناب reza_noei (http://barnamenevis.org/member.php?352547-reza_noei)
من در واقع قصد دارم با دستورات C++ این کار رو انجام بدم.
کتاب Advanced Programming in Linux رو هم مطالعه کردم ولی نتونستم به جواب برسم.
متاسفانه هنوز هم جستجوهای بنده به جواب مثبت ختم نشده.
اگر در مورد کد نویسی با C++ اطلاعاتی دارید راهنمایی بفرمایید.
با تشکر

saber187518
پنج شنبه 14 خرداد 1394, 03:00 صبح
با تشکر فراوان از جناب BORHAN TEC (http://barnamenevis.org/member.php?75214-BORHAN-TEC)
من قصد دارم این برنامه رو با زبان C++ و تحت لینوکس اجرا کنم.
لطفا راهنمایی بفرمایید.

saber187518
پنج شنبه 14 خرداد 1394, 03:36 صبح
با سلام
دوستان عزیز من کد زیر رو اجرا میکنم با خطا مواجه میشم
متن خطا هم segmentation fault (core dumped) هست.
در واقع اجازه دسترسی نمیده.
چکار کنم که بتونم این مشکل رو برطرف کنم؟
لطفا کمک کنید.

#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
FILE *HDD;
int b = 0;
unsigned int c = 0;
char Bytes[512];
cout <<"ok";
HDD=fopen("/dev/sda","r");
while (!feof(HDD))
{
b=0;
fgets (Bytes , 512 , HDD);
for(b=0;b<512;b++)
printf("%x",Bytes[b]);
}
}

one hacker alone
پنج شنبه 14 خرداد 1394, 22:47 عصر
سلام
چیزی که شما میخواید با خود c++ نمیشه باید با asm استفاده کنید در واقع وسط کد های c++ می تونید از asm استفاده کنید
تو اسمبلی هم اینکار با وقفه ها امکان پذیر هست
یکم روندش طولانیه یعنی شما باید یه ارایه بخونید و بهش بگید سکتور سکتور بخونه و بره جلو تا 100 بایت مثلا
پس اینجا دو نکته مهم هست
اول : کامپایلری انتخاب کنید که بتونه وقفه ها رو پشتیبانی کنه
دوم: مطمئن بشید که اجازه ی فراخوانی وقفه ی مورد نظرتون رو دارید
سوم: شما برای اینکار به وقفه ی شماره ی 13h نیاز دارید

pbm_soy
جمعه 15 خرداد 1394, 02:33 صبح
برای اینکار شما احتیاج دارید به دیسک بصورت سطح پایین مراجعه کنید که دو روش به ذهن میرسه البته اینکارها را تقریبا البته بازم میگم تقریبا با انواع زبانها انجام بدید (اسمبلی ، سی ، پاسکال ، حتی بیسیک مثل qbasic)

1- دسترسی مستقیم به پورتهای کنترلر دیسک با استفاده از توابع زیر که من در نسخه borland c++ 3.1 امتحان کردم
inp , inpw , inport , inportb اینها برای خواندن مقداری از یک پورت سخت افزاری خاص
outp , outpw , outport , outportb اینها هم برای نوشتن مقداری در پورت سخت افزاری خاص

2- استفاده از اینتراپتهای بایوس یا همون API های بایوس
اینتراپت شماره 13h تابع 02h آن برای خواندن یک سکتور میباشد

* این دو مورد فوق را میتوانید در همه سیستم عاملها بروی کامپیوترهای سری PC اجرا کنید (کامپیوترهای سازگار با IBM PC باشند)
* کامپایلرهای تحت داس یا همون ویندوز (مایکروسافتی) تابع biosdisk هم داشت که تمام امکانات اینتراپت 13h را به شما میداد یعنی اگر نمیتوانستید در زبان سی آن اینتراپت را فراخوانی کنید میتوانستید از این تابع استفاده کنید

دقت کنید که برخی از سیستم عاملها به شما اجازه دسترسی های سطح پایین و یا دسترسیهای مستقیم به سخت افزار را نمیدهند (مخصوصا از ویندوز XP به بعد برای اینکار باید از برنامه نویسی سطح کرنل و درایور نویسی استفاده کنید) من خودم همین روشهایی که گفتم را ترجیح میدهم چون روشهای اصلی و پایه ای است و ینا دستورات یا روشهایی هستند که خود سیستم عاملها از آنها استفاده میکنند

pbm_soy
جمعه 15 خرداد 1394, 02:52 صبح
در این زمینه مطلب زیاد است و این تاپیک به نحوی یادآور دوران قدیم برای من بود!
برای اینکار کتابهای زیر را معرفی میکنم و به تمام دوستانی که به برنامه نویسی سیستم علاقه دارند توصیه میکنم حتی برای تمام دانشجویان کامپیوتر که تخصص برنامه نویسی میخواهند داشته باشند به عنوان یک کتاب مبانی کامپیوتر قوی معرفی میکنم

* کتاب برنامه نویسی سیستم کامپیوترهای شخصی نوشته مایکل تیشر ترجمه امیر صادقی اگه اشتباه نکنم (دو جلدی)
* کتاب PC INTERN نوشته مایکل تیشر (3 جلدی) در واقع نسخه جدیدتر و ترجمه نشده کتاب فوق می باشد
* اابته این کتاب را با PC INTERN Windows 2000 که یک کتاب دوجلدی می باشد ، اشتباه نگیرید (این کتاب را هم برای دوستانی که در سطح کرنل و درایور در ویندوز میخواهند بنویسند پیشنهاد میکنم)

این کتاب فوق العاده کامل و جامع است و در انتهای جلد آخر لیست تمام اینتراپتهای را با توضیحات مختصر نوشته است و هر بحثی که عنوان میکند یک برنامه جامع و کامل را با زبانهای سی و پاسکال و بیسیک و اسمبلی می نویسد یعنی هر برنامه را با سه زبان مینویسد (دسترسی به کی بورد ، کارت گرافیک ، دیسکها و غیره ) و در هر زمینه هم برنامه مینویسد من تقریبا همه این برنامه ها را باید داشته باشم (ااین روشها ، روشهایی بودند که یک زمانی در ویروسها و قفلها استفاده میشدند البته شاید الان هم استفاده بشن که من نمیدونم خیلی وقت است که دیگر ویروس جمع نمکنم!)
متاسفانه نسخه جدیدتر و آپدید شده این کتاب را پیدا نکردم !!!

* کتاب IBM Technical Reference نویسنده و انتشاراتش یادم نمیاد (داخلش کدهای اسمبلی خود اینتراپتها هم نوشته شده است)
* کتاب PC Underground البته در این کتاب بیشتر مباحث کارت گرافیک و صوت بود