PDA

View Full Version : روشن کردن چراغ های کیبورد با اسمبلی؟



one hacker alone
شنبه 18 دی 1389, 16:18 عصر
با یاد خدا


با سلام خدمت برادر های عزیز


من یه قطعه کد میخوام که با زدن کلید شیفت (فرقی نداره کدومش) یکی از چراغ های کیبود یا نام لوک یا کپس لوک روشن بشه


من در این مورد زیاد سرچ کردم هم منابع فارسی و هم انگلیسی اما هیچ کدوم از کد ها کار نکردند


برای کار با کیبورد وقفه 16 استفاده میشه
کامپایل کردم و بر روی لپ تاپ با پردازنده اینتل اجرا کردم masmنمیدونم چرا کد ها کارنکردند من کد ها رو با برنامه


بعضی از برنامه ها اجرا نمی شدند و بعضی هم خطای زیر رو نشان میدهند


Invalid win32 application


اگه کسی کدی داره که کار کنه ممنون میشم کمک کنید

tdkhakpur
شنبه 18 دی 1389, 23:35 عصر
از کامپایلر خط فرمان برای کاربران اسمبلی (http://barnamenevis.org/showthread.php?203406-کامپایلر-خط-فرمان-برای-کاربران-اسمبلی) برای کامپایل استفاده کنید.





من یه قطعه کد میخوام که با زدن کلید شیفت (فرقی نداره کدومش) یکی از چراغ های کیبود یا نام لوک یا کپس لوک روشن بشه


من در این مورد زیاد سرچ کردم هم منابع فارسی و هم انگلیسی اما هیچ کدوم از کد ها کار نکردند


برای کار با کیبورد وقفه 16 استفاده میشه


همین وقفه ای که اشاره نمودید تابعی برای تغییر وضعیت کلیدهایی فوق داره میتونید یه نگاهی به جزئیات استفاده داخل کتاب اسمبلی بیندازید به نظرم تابع وضعیت صفحه کلید باشه.

vahid1
یک شنبه 19 دی 1389, 00:28 صبح
البته اين اطلاعات يك كم قديمي است ولي شايد كار شما را راحت تر كند.
صفحه‌ي كليد توسط 2 كنترلر يكي درون خود صفحه كليد و يكي برروي mother board كنترل مي‌شود. ارتباط اين دو كنترلر از طريق پورت‌هاي سخت‌افزاري 60H و 64H انجام مي‌شوند. اين دو پورت مكانيزم‌هاي لازم براي تبادل اطلاعات از صفحه كليد به كامپيوتر و برعكس را در اختيار مي‌گذارند. با مراجعه به IBM PC Reference guide مي‌تونيد روش برنامه نويسي اين پورت‌ها رو ياد بگيريد البته اين بحث‌ها در زمان‌هاي قديم (DOS) هم كار راحتي نبوده ، اين روزها در محيط ٌWindows كه اصلاً كار راحتي نيست.
علاوه بر اين پورت‌ها در آدرس‌هاي پائين حافظه‌ي RAM كه توسط BIOS و اينتراپت‌ها استفاده مي‌شود. بخش‌هايي وجود دارد كه يكي از آنها به بايت وضعيت صفحه كليد اختصاص داده شده . اين بايت در آدرس 0000:0417 است. با خواندن و نوشتن اين بايت مي‌تونيد وضعيت كليدها و چراغ‌هاي صفحه كليد را خوانده و تغيير دهيد. شرح بيت‌هاي اين بايت عبارت است از:
7 6 5 4 3 2 1 0
+-----+-----+-----+-----+-----+-----+-----+-----+
| INS | CAP | NUM | SCR | ALT | CTL | LSH | RSH |
+-----+-----+-----+-----+-----+-----+-----+-----+

Bit 0: Right-Shift key depressed: 1 = YES, 0 = NO.
Bit 1: Left-Shift key depressed: 1 = YES, 0 = NO.
Bit 2: Ctrl key depressed: 1 = YES, 0 = NO.
Bit 3: Alt key depressed: 1 = YES, 0 = NO.
Bit 4: Scroll Lock active: 1 = YES, 0 = NO.
Bit 5: Num Lock active: 1 = YES, 0 = NO.
Bit 6: Caps Lock active: 1 = YES, 0 = NO.
Bit 7: Insert mode: 1 = ACTIVATED, 0 = UNACTIVATED.

خوب با اين توضيحات مي‌تونيد حافظه را در اين آدرس بخونيد و با AND كردن اعداد دلخواه و باز نوشتن آن چراغ‌ها را به دلخواهتون روشن و خاموش كنيد. البته اين كار در Windows خيلي اما و اگر دارد.

و راه حل مطمئن براي windows: خوب هر چه سيستم‌عامل‌ها پيشرفته مي‌شوند اين جوركارها را بايد با اطلاع آن‌ها انجام داد. به عبارت ديگر اجازه‌ي خواندن و نوشتن روي پورت‌ها و آدرس‌هاي حافظه كار هر برنامه‌اي نخواهد بود پس سيستم‌عامل حداكثر امكانات مورد نياز را در قالب كتابخانه‌هاي استاندارد خود يا API ارائه مي‌كند تا هم برنامه نويسان بتوانند كارهاي عادي و مجاز را به راحتي انجام دهند و هم سطوح امنيتي سيستم عامل حفظ شود. سيستم‌عامل Windows تابع keybd_event را به همين منظور تعبيه كرده با فراخواني اين تابع هم مي‌توانيد وضعيت كليدها را بخوانيد و هم وضعيت جديد را تعيين كنيد.

موفق باشيد

one hacker alone
دوشنبه 20 دی 1389, 16:10 عصر
با یاد خدا
دوستان ممنون از کمکتون فقط یه مشکلی که هست چون من در اسمبلی تازه کار هستم کار با وقفه ها رو خوب نمیدونم مثلا همین استفاده از and , or برای تغییر محتویات ثبات رو میدونم اما نمیدونم اول باید چی بنویسم و چجوری وقفه رو بهش بدم و با چه ثباتی کار کنم
اگه کسی بلده فقط یه نمونه خیلی کوچیک بزاره خودم بقیه رو انجام میدم
چجوری به ادرس 0000:0417
و چکار کنم؟

یا
اگه بخوام از تابع keybd_event استفاده کنیم چه کامپایلری استفاده کنم که بتونه این تابع رو بشناسه و در واقع تو کتابخانه توابع داشته باشه؟؟؟؟؟؟؟؟؟؟

xman_1365_x
سه شنبه 21 دی 1389, 15:50 عصر
دوستان ممنون از کمکتون فقط یه مشکلی که هست چون من در اسمبلی تازه کار هستم کار با وقفه ها رو خوب نمیدونم مثلا همین استفاده از and , or برای تغییر محتویات ثبات رو میدونم اما نمیدونم اول باید چی بنویسم و چجوری وقفه رو بهش بدم و با چه ثباتی کار کنم

هنوز زوده اومدين اين تالار پله پله ، اول كار هاي ساده انجام بدين مثل محاسبات اعداد كوچك،تبديل عدد به اسكي و بلعكس اينارو با همون and ,or انجا بدي!
كمي هم با وقفه آشنا ميشي
در تاپيك هاي ديگه چيزي كه ميخواهيد هست!

چجوری به ادرس 0000:0417

اينو توي يك تاپيك جند دقيقه قبل جواب دادم توي صفحه اول بگردين پيداش مي كنيد

اگه بخوام از تابع keybd_event استفاده کنیم چه کامپایلری استفاده کنم که بتونه این تابع رو بشناسه و در واقع تو کتابخانه توابع داشته باشه؟؟؟؟؟؟؟؟؟؟
بايد از اسمبلر هاي 32 بيتي استفاده كنيد(مثل masm32,ml,nasm) كه هنوز زودتونه چون بايد با دستورات اسمبلي 16 و 32 آشنا شيد بعد استفاده از توابع api در كنارش
توابع api هم مثل وقفه ها كار خاصي انجام ميدن كه شما درگير نوشتنش نشيد(البته دليل امنيتي هم داره)
اونارو در برنامه فراخواني ميكنيد و در صورت آشنايي با توابع اون فايل ازش استفاده مي كنيد!
مرجع api هم به msdn مراجعه كنيد.

one hacker alone
جمعه 24 دی 1389, 13:34 عصر
دوست عزیز میدونم که خیلی زوده برای این کار اما من پروژه دارم و باید انجامش بدم نمی خوام پول بدم کسی برام انجامش بده چون کار بی ارزرشی هست اما اینکه شما دوستان کمک کنید تا بتونم لا اقل به اون چیزی که میخوام نزدیک بشم خیلی بهتره

ممنون

ظاهرا برای روشن کردن چراغ های کیبورد از وقفه 16h و پورت بایوس 60 استفاده میشه که با تغییر بیت های محتوای ثبات al با دستورات AND و ORوضعیت چراغ ها تغییر میکنه اما مشکل اینه که نمیدونم این کار دقیقا چجوری انجام میشه

tdkhakpur
جمعه 24 دی 1389, 13:51 عصر
ظاهرا برای روشن کردن چراغ های کیبورد از وقفه 16h و پورت بایوس 60 استفاده میشه که با تغییر بیت های محتوای ثبات al با دستورات AND و ORوضعیت چراغ ها تغییر میکنه اما مشکل اینه که نمیدونم این کار دقیقا چجوری انجام میشه
میتونید محتوای فلاگ مخصوص این چراغها رو با تغییر در آدرس 40:0017H روشن و خاموش کنید.
البته کدوم بیت مخصوص کدوم چراغ هست دقیقا خاطرم نیست ولی بصورت زیر میتونید این تغییر رو اعمال کنید.


mov dx, 40h
mov es, dx
mov bx, 17h
mov dl, byte ptr es:[bx] // دریافت وضعیت کنونی

or dl, 64
mov byte ptr es:[bx], dl // تغییر وضعیت چراغ