السلام عليكم
لنفرض ان لدينا string كالتالي مثلا:
"allko"
ستبدوا هكذا في اي محرر هكس : (الصورة التالية مأخوذة من Olly )

كما ترون فـ allko هي بالهكس
61 6C 6C 6B 6F
اما بالبايناري فهي كالتالي
1100001 1101100 1101100 1101011 1101111
اريد جعلها كالتالي
1100001 1101100 1101100 1101011 1101111 00
اي اضافة صفرين الى نهايتها ثم .ليس شرطا صفرين ، ...المهم عدد ليس من مضاعفات 8 ،
(سيتضح لماذا بعد قليل)
طبعا السؤال الذي يطرح نفسه ما الحاجة الى اضافة صفر او اثنين ؟
اقوم بمحاولة عمل خوارزمية تشبه الـ MD-5 ، حيث سأتعامل مع البيانات
المدخلة ك blocks بحجم 256 بت .
أي أنه سيتم تقسيم البيانات المدخلة الى مجموعات كل منها بحجم 256بت .
اذن على فرض ان لدي string طولها 1150 بت مثلا ، سيكون لدينا
1150/256=4 بلوكات ويتبقى 126 بت
هذه الـ 126 بت سأقوم باضافة اصفار اليها (في الحقيقة ليست كل ما ساضيفه اصفار
لكن لا اريد الدخول في تفاصيل...لنفرض ان كل ما اريد اضافته هو اصفار وان اخر بت سيكون
1 ، حتى يمثل نهاية الستنرج كي يسهل النتعامل معها )
والان عدد الاصفار التي سنضيفها هو 256-126 يساوي 130بت
اذن عندما اضيف الـ 130بت الى الـ 126 بت يكون الناتج256 اي بلوك كامل.
اذن باختصار اريد اضافة 129 بت من فئة "0" ، و 1بت من فئة "1"
بالطبع لسنا بحاجة عمليا لان نضيف اصفار
يمكننا ان نضيف الـ "1" على بعد 129بت من نهاية السترنج المدخلة
وبذلك المسافة بينهما هي عبارة عن 129بت من فئة "0"
المشكلة انك لا تستطيع التعامل الا مع بايت.
فمثلا
invoke lstrcat,addr string+[129],addr anything
هذه العبارة لن تضيف ال anything على بعد 129 بت من string
بل ستضيفها على بعد 129*8 اي 1032 بت
قد يقترح احدكم ان نقسم 129/8 = 16.125
وهنا المشكلة فلدينا كسور وهي تمثل 0.125*8=1 بت
الحل قد يكون في api تشبه lstrcat لكن باستطاعتها التعامل مع بت وليس بايت
كي استطيع تحديد البعد بدقة.
هل لدى اي احد فكرة او حل ممكن ؟