سمعت أن القراصنة يقومون بعمل هندسة عكسية للبرامج بغرض قرصنتها . السؤال هو هل يشترط المعرفة بنوع معين من لغة التجميع MASM,NASM,YASM ...الخ لعمل ذلك ؟؟
أي نوع من لغات التجميع يستخدمونها لعمل الكراكات ؟
الهيئة التى تستخدم من قبل المجمعات مثل MASM,NASM,YASM تسمى macros و directives اما لغة التجميع فهى instructions و operands و للهندسة العكسية انت تحتاج لـ disassembler جيد و معرفة بلغة التجميع و كذلك معرفة بالـ instructions و انواعها و يمكنك الحصول عليهم من توثيق المعالج، فمعالجات x86-64 يمكنك الحصول على توثيقها من intel و الإختلافات بينها و بين AMD و VIA بسيطة و لمعالجات عائلة POWER PC يمكنك الحصول عليها من توثيق Power ISA من خلال power.org.
يمكنك كتابة crack من خلال اى لغة برمجة.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة C++er في 3 مارس 2014 في 18:37
مدونتي: C++ Tips and Tricks
C++er كتب:و للهندسة العكسية انت تحتاج لـ disassembler جيد و معرفة بلغة التجميع
شكراً لاهتمامك....
الذي أعرفه أن برنامج فك التجميع Disassembler يقوم بتحويل لغة الآلة (الموجودة في الملف التنفيذي) إلى لغة التجميع . وبعد ذلك يمكن تعديل تلك التعليمات وإعادة تجميع الملف.
هل جميع برامج فك التجميع تنتج نفس لغة التجميع ؟ وما هي تلك اللغة ؟ (لغات التجميع التي تستعملها YASM و NASM على سبيل المثال مختلفة قليلاً)
اقتباسالذي أعرفه أن برنامج فك التجميع Disassembler يقوم بتحويل لغة الآلة (الموجودة في الملف التنفيذي) إلى لغة التجميع
القيم الموجوده داخل الملف التنفيذى إسمها operation codes و إختصارا opcodes و هى تمثل instruction بشكل معين، مثلا
+------------------+-----------------+-------+-------------+-----------------+-----------------------------+ | Opcode | Instruction | Op/En | 64-bit Mode | Compat/Leg Mode | Description | +------------------+-----------------+-------+-------------+-----------------+-----------------------------+ | 0F BC /r | BSF r16, r/m16 | RM | Valid | Valid | Bit scan forward on r/m16. | +------------------+-----------------+-------+-------------+-----------------+-----------------------------+ | 0F BC /r | BSF r32, r/m32 | RM | Valid | Valid | Bit scan forward on r/m32. | +------------------+-----------------+-------+-------------+-----------------+-----------------------------+ | REX.W + 0F BC /r | BSF r64, r/m64 | RM | Valid | N.E. | Bit scan forward on r/m64. | +------------------+-----------------+-------+-------------+-----------------+-----------------------------+
BSF تستخدم للبحث عن بت بقيمة 1 من اليمين لليسار و إذا وجدت تقوم بوضع مكانه فى المسجل الذى تحدده كـ destination.
فى العمود Opcode توجد الصيغه الرقمية التى يستخدامها المعالج و هذه هى الصيغه التى يقوم الـ disassembler بقرائتها و بعدها يقوم بمطابقة الرقم 0F BC مع الإسم BSF و حيث ان هذه الـ instruction لها نفس القيمة داخل نمط 32 بت و 16 بت فيتم إستخدام الوضع الإتفراضي بناءا على نوع الملف التنفيذي أو بناءا على إعداداته إن كان لا يقرأ من ملف تنفيذي - ملف Binary مثلا - و أيضا توجد حالات أخرى و لكن الفكره وصلت لك.
إسم الـ Instruction و قيمة الـ Operands الموجوده فى الملف الذى يتم القراءة منه يتم وضعهم بالصيغه التى يستخدمها المعالج فإذا كان يستخدم صيغة Intel سيجعل ناتج الـ Opcode لهذه التعليمه بالشكل التالي:
MOV EAX, 200hBSF EAX, EAX
أما إذا كان يعمل بصيغة AT&T فالنتيجه ستكون كالتالي:
movl $200h, %eaxbsfl %eax, %eax
مع العلم ان الـ Opcode و الـ operand واحد فإن الصيغه الناتجه مختلفه لأنها تعتمد على مولد الكود الموجود بالـ disassembler و تحتاج لمراجعة توثيقه لتعرف كيف تغييرها حسب رغبتك.
اقتباسهل جميع برامج فك التجميع تنتج نفس لغة التجميع ؟
ليس تماما، فبعض الـ instructions لها نفس الـ Opcode عند Intel و AMD و لكن الإسم يختلف و فى هذا تحتاج لمراجعة توثيق الأداة التى تستخدمها لتعرف مثل هذه الامور.
اقتباسوما هي تلك اللغة
بإختصار لغة الأله هى محتوى عمود الـ Opcode و لغة التجميع هى محتوى عمود Instruction و الصيغه التى سيتم إستخدامها لكتابة البرنامج تعود إليك و للـ Assembler.
اقتباسلغات التجميع التي تستعملها YASM و NASM على سبيل المثال مختلفة قليلاً
إذا اردت كتابة برنامج بالـ Assembler فيمكنك إستخدام لغة التجميع مباشرة و معها يمكنك إستخدام Macros و Directives لتسهيل عملك و هذه العناصر هى ما تختلف من Assembler لأخر حيث لكل منهم صيغة خاصه به و ايضا تحتاج لمراجعة توثيق الأسمبلر الذى تستخدمه لمعرفة هذه الصيغه.
و الله ولي التوفيق
تم تعديل هذه المشاركة بواسطة C++er في 3 مارس 2014 في 18:36
مدونتي: C++ Tips and Tricks
أشكرك بارك الله فيك.
الآن بهذا الرد تعقدت الأمور أكثر وفتحت الباب للكثير من التساؤلات :)
ذكرت في ردك على سبيل المثال "ليس تماما، فبعض الـ instructions لها نفس الـ Opcode عند Intel و AMD و لكن الإسم يختلف" فهذا الجواب أعطاني انطباع أنه على الأرجح أن جميع برامج الهندسة العكسية تعمل بطريقة متشابهة جداً وربما يمكنك (وهذا يعتمد على البرنامج نفسه) توليف configure برنامج الهندسة العكسية ليولد instructions متوافقة مع برنامج assembler معين حتى يعمل البرنامجان في توافق . هندسة عكسية -> تعديل -> إعادة تجميع.
صح كده ؟ (يارب يكون صح)
ما أعرفه أن الأسمبلي ماهي إلا تعليمات وأومر وضعت لتسهيل على المبرمج البرمجه بدلا من الـ 0 و 1 مثل MOV على سبيل المثال تعوض 110 مجرد مثال ولتحويها من تعليمه إلى الـ 0 و الواحد هناك الكومبيلر مثل MASM , NASM وغيرها أما التعليمات فتقريبا نفس التعليمات
فمثلا قمت بكتابه كود عن طريق الكومبيلر MASM وتم تحويله إلى الـ 0 و 1 ليفهمه الكمبيوتر فعندما تريد استخدام الهندسه العكسيه تستخدم disassembler الذي يحول الـ 0 و 1 إلى الأسمبلي أي تعليمات الأسمبلي وهو لا يعيد الملف 100/100 هذا راجع ّإلى أن هناك التصريح بالمتغيرات وغيرها من الأمور التي لا أعرفها
المهم أرجو أن أكون قد وفقت ف :rolleyes:
ما شاء الله عليك اخي c++er والله افدتنا جميعاً بارك الله فيك
الاخ "docesam"
بما انني تلميذ متقاعد في مجال الهندسة العكسية فأحببت ان اضيف بعض النقاط الهامة بخصوص هذا العلم الرائع
اولاً: الهندسة العكسية ليست كما تظن "تكريك" برامج وبرمجيات وإما هي طريقة تفكير "منهج برمجي تستطيع ان تسميه هكذا " .
ثانياً: فرع من الهندسة العكسية يهتم بتطبيق هذا المفهوم على البرمجيات من اجل فهم آلية عمل البرامج "وليس كسرها "
ثالثاًً: فرع الفرع هذا هناك اناس يحبون ان يقوموا بتحدي التقنيات الأمنية المستخدمة في البرامج وهناك الكثير منهم لديه اعمال عظيمة سواءً في مجال فك الضغط اليدوي او في مجال كسر خوارزمية التحقق من التسجيل وهكذا وهؤلاء
لانسميهم مهندسين عكسيين وإنما "Crackers"
لكي تقوم بعمل Cracking لأي برنامج فانت بحاجة اولا لتعرف مالذي يحصل في الملف التنفيذي منذ ان يتم الضغط بالماوس عليه وإنتهاء بوصوله للذاكرة وتنفيذه سطر سطر
الأدوات المستخدمة في ال cracking تختلف من كرار لآخر ومن لغة برمجية لأخرى "بحسب لغة البرمجة التي تم برمجة التطبيق المستهدف عليها فمثلاً تطبيقات الدوت نت لا يمكن تكريكها عن طريق OllyDbg "
هناك الكثيرين ممن يفضلون OllyDbg للغات المعروفة مثل c++ و delphi إلخ
وهناك من يستخدم .Net Reflector من اجل تطبيقات ال .Net
المهم ان يكون لديك طريقة التفكير هذه التي يتمتع بها المهندسون العكسيون وان يكون لديك الرغبة ب "فهم" آلية عمل البرنامج قبل الرغبة "بكسره" فعندها ستكون مهندس عكسي ناجح بكل ماتعنى الكلمة
بالتوفيق ان شاء الله
تم تعديل هذه المشاركة بواسطة Install في 9 مارس 2014 في 12:35
{ وَيَوْمَ تَقُومُ السَّاعَةُ يُقْسِمُ الْمُجْرِمُونَ مَا لَبِثُوا غَيْرَ سَاعَةٍ ۚ كَذَٰلِكَ كَانُوا يُؤْفَكُونَ () وَقَالَ الَّذِينَ أُوتُوا الْعِلْمَ وَالْإِيمَانَ لَقَدْ لَبِثْتُمْ فِي كِتَابِ اللَّهِ إِلَىٰ يَوْمِ الْبَعْثِ ۖ فَهَٰذَا يَوْمُ الْبَعْثِ وَلَٰكِنَّكُمْ كُنْتُمْ لَا تَعْلَمُونَ } الروم 55-56
Install كتب:ما شاء الله عليك اخي c++er والله افدتنا جميعاً بارك الله فيك
الاخ "docesam"
بما انني تلميذ متقاعد في مجال الهندسة العكسية فأحببت ان اضيف بعض النقاط الهامة بخصوص هذا العلم الرائع
اولاً: الهندسة العكسية ليست كما تظن "تكريك" برامج وبرمجيات وإما هي طريقة تفكير "منهج برمجي تستطيع ان تسميه هكذا " .
ثانياً: فرع من الهندسة العكسية يهتم بتطبيق هذا المفهوم على البرمجيات من اجل فهم آلية عمل البرامج "وليس كسرها "
ثالثاًً: فرع الفرع هذا هناك اناس يحبون ان يقوموا بتحدي التقنيات الأمنية المستخدمة في البرامج وهناك الكثير منهم لديه اعمال عظيمة سواءً في مجال فك الضغط اليدوي او في مجال كسر خوارزمية التحقق من التسجيل وهكذا وهؤلاء
لانسميهم مهندسين عكسيين وإنما "Crackers"
لكي تقوم بعمل Cracking لأي برنامج فانت بحاجة اولا لتعرف مالذي يحصل في الملف التنفيذي منذ ان يتم الضغط بالماوس عليه وإنتهاء بوصوله للذاكرة وتنفيذه سطر سطر
الأدوات المستخدمة في ال cracking تختلف من كرار لآخر ومن لغة برمجية لأخرى "بحسب لغة البرمجة التي تم برمجة التطبيق المستهدف عليها فمثلاً تطبيقات الدوت نت لا يمكن تكريكها عن طريق OllyDbg "
هناك الكثيرين ممن يفضلون OllyDbg للغات المعروفة مثل c++ و delphi إلخ
وهناك من يستخدم .Net Reflector من اجل تطبيقات ال .Net
المهم ان يكون لديك طريقة التفكير هذه التي يتمتع بها المهندسون العكسيون وان يكون لديك الرغبة ب "فهم" آلية عمل البرنامج قبل الرغبة "بكسره" فعندها ستكون مهندس عكسي ناجح بكل ماتعنى الكلمة
بالتوفيق ان شاء الله
شكرا لك ، في الواقع أرغب بأن أكون خبير في مجال أمن البيانات ومن ذلك عمل الهندسة العكسية للأجهزة المضمنة embedded لاستكشاف الثغرات الأمنية فيها.
أما مسألة عمل كراك للبرامج فهي قديمة فأغلب ما تحتاجه اليوم من برامج متوفر مجاناً عن طريق البرامج الحرة والمفتوحة المصدر. حيث أصبح متصفح الإنترنت هو الغالب على الاستخدام.