لذا ، أيها الأصدقاء ، في 1 أبريل ، حان الوقت للكشف عن البطاقات ، ما هو بالضبط " 2B أم لا 2B ". هذا نص مشترك من مؤلف العمل.نحس ومألوف لك جدك كافر
تأكد من تنزيل الأرشيف مع العمل على Pouet وقراءة المقال التمهيدي (كذبة أبريل) ، بالإضافة إلى التعليقات عليه. شاهد الفيديو الأول مع شرح عملي لكيفية عمل رمز ثنائي البايت على x86. وعندها فقط حاول إتقان النص بأكمله أدناه.نعم ، 2B أم لا 2B هي حقًا بيئة لإطلاق العديد من أعمال التشفير ، بسيطة جدًا ، وربما أصغرها. ومع ذلك ، فقد متطلباتها وحدودها.إذا لم يكتشفها شخص آخر ، يتم تشغيل أداة 2b.com من تحت DOS (DOSBox و FreeDOS و MS-DOS) وتنتقل إلى منطقة سطر الأوامر (عند الإزاحة 82 * دولارًا من قطعة PSP) ، وتشغيل الرمز الذي تم نقله إلى التنفيذ سطر الأوامر في ثنائي. في الواقع ، قد يحتوي هذا الرمز على شكل سلسلة يمكن كتابتها على لوحة المفاتيح (أي تتكون من أحرف ASCII برموز من 33 إلى 126) ، ولكن المزيد عن ذلك لاحقًا.* الأرقام السداسية العشرية التي سنكتبها في تدوين باسكال $ XX ، وهذا مريح ، و fasm يسمح لك بذلك.ما هو المهم أن تعرف؟
لا شيء ، نوصي باستخدام fasm كمترجم ، جميع أدواتنا مكتوبة خصيصًا لذلك.أولاً ، يمكن أن يبلغ حجم الكود الرئيسي 125 بايت كحد أقصى (هذه هي القيود على طول سطر الأوامر) وسيبدأ كبرنامج COM عادي ، فقط مع إزاحة 82 دولارًا ، وليس 100 دولار ، كالمعتاد. مباشرة بعد الكود الرئيسي ، سيتم إضافة رمز إرجاع (CR) برمز 13 ($ 0D) تلقائيًا ، وسيتم تحديد الأمر jmp short $82
($ EB ، $ 80) بسعر 100 دولار .ثانيًا ، نظرًا لأنه من المفترض أن يكون الإطلاق من ملف BAT (جيدًا ، أو من مترجم سطر الأوامر) ، يجب ألا يحتوي الرمز على بعض الأحرف. بادئ ذي بدء ، هذه أحرف إعادة توجيه الإدخال / الإخراج ("<" و ">" و "|") ، بالإضافة إلى حرف استبدال المعلمات ومتغيرات البيئة ("٪"). في بعض الأنظمة (بما في ذلك Windows ، دعم إطلاق برامج DOS من تحت V86) ، فإن الأحرف "&" ، "^" لها أيضًا معنى خاص. الأحرف الخاصة ذات الرموز التي تصل إلى 32 غير مدعومة من قبل كل DOS ، وبعضها غير مدعوم من قبل أي أو لا شيء تقريبًا (DOSBox لديها مجموعة ضئيلة للغاية) ، لذلك نستبعد كل هذه الأحرف أيضًا.ثالثًا ، تكون قيم البدء لجميع السجلات والعلامات هي نفسها عند بدء تشغيل برنامج COM. في الغالبية العظمى من DOS ، سيكون في البداية: ax = bx = 0 (دائمًا تقريبًا) ، cx = $ FF ، dx = cs = ds = es = ss ، si = $ 100 ، di = sp = $ FFFE (مع ما يكفي من التشغيل ذاكرة) ، bp = $ 9XX (البايت المنخفض مختلف في كل مكان ، ولكن ارتفاع رابعه ، أي عاب ، عادة = 1) ، أعلام cf = df = 0. لاستخدامها أم لا ، الأمر متروك لك.الأهم من ذلك كله ، النقطة الثانية مربكة هنا ، أليس كذلك؟لنفترض أننا بحاجة إلى الكتابة: mov ah,0
int $16
cmp al,27
je x
ثم على الفور هناك 5 أحرف ممنوعة في وقت واحد: 0 في mov ah,0
، $ 16 في int $16
، $ 3C (الحرف "<") و 27 ($ 1B) في cmp al,27
بعض الأرقام مع رمز <32 in je x
إذا كان x
موجودًا في مكان قريب من الرمز.ماذا أفعل؟ ما يمكن استبداله بأوامر أخرى يتم استبداله بما يلي:- بدلاً من ذلك
mov ah,0
نكتب xor ah,ah
أو حتى cbw
(عند الإمكان) ؛ - بدلاً من ذلك ،
cmp al,27
نكتب not al
+ sub al,not 27
أو xor al,not 27
+ inc al
، بل والأفضل (لأننا هنا نحتاج إلى انتظار الضغط على المفتاح ومقارنة الرمز المستلم مع رمز المفتاح ESC) - dec ah
.
C int $16
أكثر تعقيدًا ، ولكن إذا فكرت في الأمر ، فيمكن استبدال البناء xor ah,ah
+ int $16
، على سبيل المثال ، بـ mov ah,$83
+ ror ah,1
+ int $21
.يبقى je $+10
. هناك طريقتان على الأقل: إما أن تقفز إلى الخلف (إلى مسافة كافية) ، ومن هناك تذهب إلى الأمام. أو استبدال البايت في التعليمات البرمجية. على سبيل المثال، يمكنك كتابة z: je ($*2+3)-x
، ولكن في مكان ما فوق: not byte [si-($100-(z+1))]
.نتيجة لذلك ، نحصل على: not byte [si-($100-(z+1))] ; 2- ( ) je si=$100
mov ah,$83
rol ah,1 ; ah=7
int $21 ; , al
not al
sub al,not 27 ; cmp al,27
z: je ($*2+3)-x ; x ( )
حلول بديلة
بالطبع ، في المقدمة النهائية لأكثر من 100 بايت من الشخصيات الممنوعة ، يمكن أن يكون هناك الكثير (على سبيل المثال ، 15-20 وأكثر) ، وفي كل مرة يكون مثل هذا التلاعب مهنة كئيبة نوعًا ما ، علاوة على ذلك ، غالبًا ما تؤدي إلى زيادة في طول الرمز.لذلك ، يمكنك اللجوء إلى التشفير. إما الرمز بالكامل ، أو الأماكن الفردية. في المثال 2b_life.asm ، نقوم بتشفير كل الكود بإضافة $ AC لكل بايت. بعد التشفير الأول ، يتبقى لدينا حوالي 4 أحرف ممنوعة ، والتي يمكننا العمل عليها من خلال استبدالها بأوامر أخرى. بالطبع ، فإن اختيار طريقة التشفير (إضافة ، فرعية ، xor ، لا ، إلخ) ، بالإضافة إلى المفتاح ، يستغرق أيضًا بعض الوقت ، ولكن هذا هو أقل الشرور. رمز وحدة فك الترميز هو 8 بايت فقط - وهذا مقبول تمامًا في هذه الحالة. يحدث التشفير تلقائيًا باستخدام التوجيهات.repeat
، load
و store
(أي نحصل على كود تشفير بالفعل).يتم تشفير المواقع الفردية في مثال 2b_note.asm . هنا ، مرة أخرى ، بمساعدة repeat
، load
ويتم إضافة store
القيمة $ 3D إلى بعض وحدات البايت ، ويتم تخزين قائمة عناوين هذه البايت بشكل منفصل (1 بايت من العنوان لكل بايت). في المجموع ، نقوم بتشفير 20 بايت + 13 بايت يشغلها برنامج فك التشفير. نعم ، كانت الطريقة الأولى أكثر اقتصادا :)في بداية المقال ، وعدنا بالتحدث عن الرمز ، والذي يمكن أن يتخذ شكل سلسلة تتكون من أحرف ASCII برموز من 33 إلى 126 (بحيث يمكن كتابتها ، على سبيل المثال ، دون صعوبات خاصة على لوحة المفاتيح). هذا ممكن ، على سبيل المثال ، إذا تم تشفير الرمز باستخدام أحرف سداسية عشرية أو ما شابه. نعم ، هذا مضيعة للوقت ، ولكن إذا تم تشفيره باستخدام طريقة BASE64 ، فقد يتضح أن النفقات أكبر ، لأن وحدة فك الترميز يجب أن تتكون من هذه الأحرف فقط.أدوات
لتسهيل كتابة التعليمات البرمجية ضمن " 2B أو لا 2B " تم إنشاء 4 ملفات:- 2b.draft.asm – 128- BAT-, 2b ( , - , ). , .
- 2b.draft44.asm – 44- , ASCII- 33 126. - : + «A» ( «A»...«P»), + «K» ( «K» «Z»). – 37 (+ 2
pusha
+ popa
, ). : (125 — 37) / 2 = 44 ( 43, pusha
+ popa
). :). , – 2b_snow.asm 2b_hello.asm - 2b.check.inc – include- . , , ( BAT-).
- 2b.debug.inc – include- ( COM- BIN- ).
?
ظلت مجموعة المنصات الحالية التي تم كتابة نصوصها الداخلية دون تغيير تقريبًا لسنوات عديدة ، إذا كنت لا تأخذ في الاعتبار فئة Wild (AON ، مكاوي اللحام ، براعم القطن). نحن نقدم لك ... ليس فقط منصة جديدة ، ولكن على الأقل بعض التنوع ، مع قيودها. إن القيود والتغلب عليها هي جوهر demoscene كعملية. سيكون من الممتع رؤية المسابقة بأكملها في إطار هذا المفهوم في أقرب مكان ديموباتي ، حيث سيتمكن مؤلفون مختلفون من تجربة أيديهم في "2B or not 2B compo" :)--- EOF ---#FF - والبايت بأكمله لا يكفي ... | الطيار)# 00 - ICBM ... | دعوة للمراجعة عبر الإنترنت 2020# 01 - IBMP ... | ما هي المقدمة؟# 02 - MBM ... | صليب التغييرات# 03 - IBMP ... | 2B أم لا 2B# 04 - MBM ... | نأخذ BC من الأبواق# 05 - ICBM ... | أنمي# 06 - IBMP ... |قناة الترفيه عن الأرصاد الجوية في Telegram:teleg.run/borndedهناك محادثة بجانب القناة. في ذلك ، يمكنك محاولة طرح أسئلة عن demoscene ، المجمع ، فن البكسل ، موسيقى المقتفي والجوانب الأخرى للعمليات. يمكن الرد عليك أو إرسالها إلى محادثات أخرى أكثر موضوعية.لذا فازوا - لذا فزنا!