بعد فك الضغط وإصلاح عناوين الدوال المستوردة، البرنامج يبدأ من 0x0042006A. بتتبع أوامر التجميع (الأسملبي) يبدو أن البرنامج يقوم بالتالي
البرنامج يقوم بعمل xor مع العدد 5 لكل حرف من حروف مصفوفة الحروف text ويخزنه في مصفوفة حروف ولنسمها textForPrint، ومن ثم يقوم بعمل xor مع العدد 5 لكل حرف من حروف مصفوفة الحروف textForPrint ويتكب النتيجة في text. قيمة text لن تتغير لأن عملية xor مرتين مع نفس العدد لا تغير النتيجة أي
إذا كان البرنامج أكبر، فسنحتاج إلى كتابة decompressor عام.
ملاحظة: عند تتبع البرنامج ضع hardware break point عند 0x0042006A، لأن وضع software break point يغير من التعليمات المكتوبة في المنطقة التي سيقوم البرنامج بفك ضغطها.
char text[6] = "AT4RE";
char textToPrint[6] = "";
int a = 5;
int i;
for (i = 0; i <= a; i++) {
textToPrint[i] = (char) (text[i] ^ a);
}
for (i = 0; i < a; i++) {
text[i] = (char) (textToPrint[i] ^ a);
}
printf("%s", text);
getchar();
البرنامج يقوم بعمل xor مع العدد 5 لكل حرف من حروف مصفوفة الحروف text ويخزنه في مصفوفة حروف ولنسمها textForPrint، ومن ثم يقوم بعمل xor مع العدد 5 لكل حرف من حروف مصفوفة الحروف textForPrint ويتكب النتيجة في text. قيمة text لن تتغير لأن عملية xor مرتين مع نفس العدد لا تغير النتيجة أي
(x xor c) xor c = x
إذا كان البرنامج أكبر، فسنحتاج إلى كتابة decompressor عام.
ملاحظة: عند تتبع البرنامج ضع hardware break point عند 0x0042006A، لأن وضع software break point يغير من التعليمات المكتوبة في المنطقة التي سيقوم البرنامج بفك ضغطها.
I am homesick for a place I have not even visited
مَا ابْيَضَّ وجهٌ باكتساب كريمةٍ ... حتى يسوِّدهُ شُحوب المَطلبِ
مَا ابْيَضَّ وجهٌ باكتساب كريمةٍ ... حتى يسوِّدهُ شُحوب المَطلبِ