kasus

6
ﻣﻌﻠﻮﻣﺎﺕ ﻧﻘﻄﺔ ﺍﻟﺪﺧﻮﻝ ﺍﻹﻋﺘﻴﺎﺩﻳﺔ ﻟﺒﻌﺾ ﺍﻟﻤﺠﻤﻌﺎﺕStandard Borland C++ OEP JMP SHORT WinRAR.00401012 just jumps to next MOV MOV EAX,DWORD PTR DS:[dword1] SHL EAX,2 MOV DWORD PTR DS:[dword2],EAX PUSH EDX PUSH 0 CALL GetModuleHandleA MOV EDX,EAX CALL procedure1 this procedure is not important, it is normally just a RETN POP EDX CALL procedure2 this procedure is not important, it is normally just a RETN CALL procedure3 this procedure is different from RETN only few times PUSH 0 CALL procedure4 this is first procedure executed for sure and easy to find POP ECX PUSH dword3 PUSH 0 CALL GetModuleHandleA MOV DWORD PTR DS:[dword4],EAX PUSH 0 JMP procedure ﺍﻹﺟﺮﺍﺋﻴﺔ ﺍﻟﺮﺍﺑﻌﺔProcedure4 ﻫﻲ ﺍﻟﻤﻬﻤﺔ ﻭﻫﻲ ﻧﻔﺴﻬﺎ ﻓﻲ ﺟﻤﻴﻊ ﺑﺮﺍﻣﺞBorland C++ ﻣﺜﻞCall Sysinit ﺑﺎﻟﻨﺴﺒﺔ ﻝDelphi J ﺇﺫﺍ ﻋﻠﻴﻚ ﺗﺘﺒﻌﻬﺎ ﻟﻠﻮﺻﻮﻝ ﺍﻟﻰOEP . ﻓﻲ ﺃﻏﻠﺐ ﺍﻷﺣﻴﺎﻥ ﺍﻝEP ﻟﺒﺮﺍﻣﺞBC++ ﺗﻜﻮﻥ ﻋﻨﺪ ﻫﺬﺍ ﺍﻟﻌﻨﻮﺍﻥ00401000h ﻭﺇﻥ ﻟﻢ ﺗﺠﺪﻫﺎ ﻓﻘﻂ ﺃﻧﻈﺮ ﺣﻮﻝ ﻫﺬﺍ ﺍﻟﻌﻨﻮﺍﻥ ﻓﻘﺪ ﺗﺠﺪﻫ... ﻛﻤﺎ ﺃﻥ ﺍﻟﻘﻔﺰﺓ ﺍﻷﻭﻟﻰ ﻓﻲ ﺍﻟﺒﻨﻴﺔ ﺃﻋﻼﻩ ﻟﺤﺴﻦ ﺍﻟﺤﻆ ﻻ ﻳﺨﺮﺑﻬﺎEC ﻟﺬﻟﻚ ﻳﻜﻔﻲ ﺍﻟﺒﺤﺚ ﻋﻨﻬﺎ.. Search For Binary EB 10 ﻟﻜﻦ ﺗﺬﻛﺮ ﺃﻧﻪ ﺭﻏﻢ ﺃﻥEC ﻻﻳﺨﺮﺏ ﻫﺬﻩ ﺍﻟﻘﻔﺰﺓ ﻓﻜﺬﻟﻚ ﻻ ﻳﻨﻔﺬﻩ... ﻭﺃﻳﻀﺎ ﻳﺨﺮﺏ ﺗﻘﺮﻳﺒﺎ ﻛﻞ ﺍﻟﻜﻮﺩ ﻓﻲ ﺍﻟﺒﻨﻴﺔ ﺃﻋﻼﻩ ﺑﺈﺳﺘﺜﻨﺎء ﺍﻹﺟﺮﺍﺋﻴﺔ ﺍﻟﺮﺍﺑﻌﺔProcedure4 . ﻟﺬﻟﻚ ﻭﺟﺐ ﺗﺘﺒﻌﻬﺎ ﻟﻠﺤﺼﻮﻝ ﻋﻠﻰdump ﻗﺮﻳﺐ ﻣﻦ ﺍﻝOEP ... ﺃﻣﺎ ﻋﻤﺎ ﻳﻮﺟﺪ ﻓﻲ ﺍﻝProcedure4 .. ﻓﺎﻟﺘﺎﻟﻲ: PUSH EBP MOV EBP,ESP ADD ESP,8 PUSH EBX MOV EBX,DWORD PTR SS:[EBP+8] TEST EBX,EBX SETNE AL AND EAX,1 TEST EBX,EBX JNZ SHORT address TEST EBX,EBX JNZ SHORT address LEA EDX,DWORD PTR SS:[EBP8] PUSH EDX CALL procedure1 POP ECX

description

kasus sehari-hari

Transcript of kasus

Page 1: kasus

 معلومات نقطة الدخول اإلعتيادية لبعض المجمعات

Standard Borland C++ OEP 

JMP SHORT WinRAR.00401012 ß just jumps to next MOV ……MOV EAX,DWORD PTR DS:[dword1] SHL EAX,2 MOV DWORD PTR DS:[dword2],EAX PUSH EDX PUSH 0 CALL GetModuleHandleA MOV EDX,EAX CALL procedure1 ß this procedure is not important, it is normally just a RETN POP EDX CALL procedure2 ß this procedure is not important, it is normally just a RETN CALL procedure3 ß this procedure is different from RETN only few times PUSH 0 CALL procedure4 ß this is first procedure executed for sure and easy to find POP ECX PUSH dword3 PUSH 0 CALL GetModuleHandleA MOV DWORD PTR DS:[dword4],EAX PUSH 0 JMP procedure 

 إذا ☺Delphi بالنسبة ل Call Sysinit مثل ++Borland C هي المهمة وهي نفسها في جميع برامج Procedure4 اإلجرائية الرابعة . OEP عليك تتبعها للوصول الى

 كما أن ... ا وإن لم تجدها فقط أنظر حول هذا العنوان فقد تجده 00401000h تكون عند هذا العنوان ++BC لبرامج EP في أغلب األحيان ال.. لذلك يكفي البحث عنها EC القفزة األولى في البنية أعاله لحسن الحظ ال يخربها

 Search For Binary à EB 10  وأيضا يخرب تقريبا كل الكود في البنية أعاله بإستثناء اإلجرائية الرابعة ... اليخرب هذه القفزة فكذلك ال ينفذه EC لكن تذكر أنه رغم أن

Procedure4 . لذلك وجب تتبعها للحصول على dump قريب من ال OEP ... أما عما يوجد في ال Procedure4 .. فالتالي : 

PUSH EBP MOV EBP,ESP ADD ESP,­8 PUSH EBX MOV EBX,DWORD PTR SS:[EBP+8] TEST EBX,EBX SETNE AL AND EAX,1 TEST EBX,EBX JNZ SHORT address TEST EBX,EBX JNZ SHORT address LEA EDX,DWORD PTR SS:[EBP­8] PUSH EDX CALL procedure1 POP ECX

Page 2: kasus

MOV EBX,DWORD PTR SS:[EBP­4] PUSH 9C PUSH EBX CALL procedure2 ……RETN 

 ++Borland C هذا كل شيء بالنسبة ل

Standard Microsoft Visual C++ OEP’s 

 وأيضا خصائص المشروع أثناء التجميع Compiler ألن ذلك يختلف حسب إصدار ال OEP بالنسبة لهذه اللغة ليست هناك بنية محددة لشكل ال .. لكن اإلختالفات ليس كثيرة ويمكننا سردها

Version 6.0 – Method1 

� PUSH EBP  OEP MOV EBP,ESP PUSH ­1 PUSH dword1 PUSH JMP.&MSVCRT._except_handler3 MOV EAX,DWORD PTR FS:[0] PUSH EAX MOV DWORD PTR FS:[0],ESP SUB ESP,68 PUSH EBX PUSH ESI PUSH EDI MOV DWORD PTR SS:[EBP­18],ESP XOR EBX,EBX MOV DWORD PTR SS:[EBP­4],EBX PUSH 2 CALL DWORD PTR DS:[MSVCRT.__set_app_type] ß from here EC never virtualize code POP ECX OR DWORD PTR DS:[dword2],FFFFFFFF OR DWORD PTR DS:[dword3],FFFFFFFF CALL DWORD PTR DS:[MSVCRT.__p__fmode] MOV ECX,DWORD PTR DS:[dword4] MOV DWORD PTR DS:[EAX],ECX CALL DWORD PTR DS:[MSVCRT.__p__commode] 

 إذا .. MSVCRT.__set_app_type ال يخرب اإلستدعاء لل EC ألن ال OEP في مثل هذه الحاالت فالداعي للبحث عن إجرائية قريبة لل . ☺ فقط ضع نقطة توقف في هذا اإلستدعاء وأصلح ما تم تخريبه حسب البنية أعاله

Version 6.0 – Method2 

PUSH EBP ß OEP MOV EBP,ESP PUSH ­1 PUSH dword1 PUSH dword2 MOV EAX,DWORD PTR FS:[0]

Page 3: kasus

PUSH EAX MOV DWORD PTR FS:[0],ESP SUB ESP,58 PUSH EBX PUSH ESI PUSH EDI MOV DWORD PTR SS:[EBP­18],ESP CALL DWORD PTR DS:[GetVersion] ß from here EC never virtualize code XOR EDX,EDX MOV DL,AH MOV DWORD PTR DS:[dword3],EDX 

 إذا يكفي البحث عنها ووضع نقطة توقف عندها ثم إصالح GetVersion اليخرب اإلستدعاء للدالة EC نفس الشيء بالنسبة لهذه البنية فبرنامج ... ما تم تخريبه

Version 7.x – Method1 

PUSH const ß OEP PUSH dword1 CALL procedure1 ß this is an important procedure XOR EBX,EBX MOV DWORD PTR SS:[EBP­20],EBX PUSH EBX MOV EDI,DWORD PTR DS:[GetModuleHandleA] CALL EDI ß call to GetModuleHandleA CMP WORD PTR DS:[EAX],5A4D JNZ SHORT address MOV ECX,DWORD PTR DS:[EAX+3C] ADD ECX,EAX CMP DWORD PTR DS:[ECX],4550 JNZ SHORT address … 

 , OEP قريب من dump إلنشاء ملف procedure1 يخرب الكثير في هذه البنية لذلك يجب أن نبحث عن اإلجرائية األولى EC في هذه الحالة : وهذه اإلجرائية تكون كالتالي

PUSH JMP.&MSVCR71._except_handler3 MOV EAX,DWORD PTR FS:[0] PUSH EAX MOV EAX,DWORD PTR SS:[ESP+10] MOV DWORD PTR SS:[ESP+10],EBP LEA EBP,DWORD PTR SS:[ESP+10] SUB ESP,EAX PUSH EBX PUSH ESI PUSH EDI MOV EAX,DWORD PTR SS:[EBP­8] MOV DWORD PTR SS:[EBP­18],ESP PUSH EAX MOV EAX,DWORD PTR SS:[EBP­4] MOV DWORD PTR SS:[EBP­4],­1 MOV DWORD PTR SS:[EBP­8],EAX LEA EAX,DWORD PTR SS:[EBP­10] MOV DWORD PTR FS:[0],EAX RETN

Page 4: kasus

 . ☺ في اإلجرائية Push إذا يجب أن تضع نقطة توقف في أول ... اليخرب هذه اإلجرائية EC كالعادة

Version 7.x – Method2 

PUSH 60 PUSH dword1 CALL procedure1 ß first useful procedure MOV EDI,94 MOV EAX,EDI CALL procedure2 ß second useful procedure MOV DWORD PTR SS:[EBP­18],ESP MOV ESI,ESP MOV DWORD PTR DS:[ESI],EDI PUSH ESI CALL DWORD PTR DS:[GetVersionExA] 

 .. ل قليل اإلجرائية األولى هي نفسها التي وضعت قب .. يخرب كثيرا في هذه البنية لكن لدينا إجرائيتين للمساعدة EC في هذه الحالة أيضا

PUSH JMP.&MSVCR71._except_handler3 MOV EAX,DWORD PTR FS:[0] PUSH EAX MOV EAX,DWORD PTR SS:[ESP+10] MOV DWORD PTR SS:[ESP+10],EBP LEA EBP,DWORD PTR SS:[ESP+10] SUB ESP,EAX PUSH EBX PUSH ESI PUSH EDI MOV EAX,DWORD PTR SS:[EBP­8] MOV DWORD PTR SS:[EBP­18],ESP PUSH EAX MOV EAX,DWORD PTR SS:[EBP­4] MOV DWORD PTR SS:[EBP­4],­1 MOV DWORD PTR SS:[EBP­8],EAX LEA EAX,DWORD PTR SS:[EBP­10] MOV DWORD PTR FS:[0],EAX RETN 

 : أما اإلجرائية الثاتية فكالتالي

CMP EAX,1000 JNB SHORT address NEG EAX ADD EAX,ESP ADD EAX,4 TEST DWORD PTR DS:[EAX],EAX XCHG EAX,ESP MOV EAX,DWORD PTR DS:[EAX] PUSH EAX RETN PUSH ECX

Page 5: kasus

LEA ECX,DWORD PTR SS:[ESP+8] SUB ECX,1000 SUB EAX,1000 TEST DWORD PTR DS:[ECX],EAX CMP EAX,1000 JNB SHORT address SUB ECX,EAX MOV EAX,ESP TEST DWORD PTR DS:[ECX],EAX MOV ESP,ECX MOV ECX,DWORD PTR DS:[EAX] MOV EAX,DWORD PTR DS:[EAX+4] PUSH EAX RETN 

 ال و dump ماعليك سوى أن تتوقف عند إحداهما ثم عمل . OEP قريب من dump تتبع اإلجرائية األولى أو الثانية يمكناننا من إنشاء ملف . و المسجالت فقد تحتاجهما stack تنسى قيم

Version 8.x – All methods 

CALL procedure1 ß OEP JMP procedureMAIN ß This jumps to main starting of program 

 حسب تجربتي لمجموعة ... يدا ال يتسطيع حمايتهما ج EC فكما ترى فإن هذا اإلصدار متميز فهو يحتوي على تعليميتن فقط تميزانه لحسن الحظ Dump لذلك يمكننا تتبع إحداهما إلنشاء ملف ... من األمثلة وبتغيير الخصائص للمجمع فلم ألحظ حالة تم حماية فيها اإلجرائية األولى أو القفزة

 . OEP قريب من

 : ) أقصد هاته ( لتعليميتين إذا ألصالح الملف في هذه الحالة فقط إبحث عن مكان فارغ في الملف ثم إحقن فيه هاتين ا

CALL procedure1 ß OEP JMP procedureMAIN ß This jumps to main starting of program 

 : فهكذا Call Procedure 1 بالنسبة لل : أما عن اإلجرائيتن فتكون بهذا الشكل

PUSH EBP MOV EBP,ESP SUB ESP,10 MOV EAX,DWORD PTR DS :[dword1] AND DWORD PTR SS :[EBP­8],0 AND DWORD PTR SS :[EBP­4],0 PUSH EBX PUSH EDI MOV EDI,const1 CMP EAX,EDI MOV EBX,const2 JE SHORT adress TEST EBX,EAX JE SHORT address NOT EAX MOV DWORD PTR DS :[dword2],EAX JMP SHORT address PUSH ESI LEA EAX,DWORD PTR SS :[EBP­8] PUSH EAX CALL DWORD PTR DS :[GetSystemTimeAsFileTime] …

Page 6: kasus

 JMP ProceduteMAIN أقصد : وأيضا يمكن أن تبحث للمكان الذي تذهب إليه القفزة وهي كالتالي

PUSH const PUSH dword1 CALL procedure1 XOR EBX,EBX MOV DWORD PTR SS:[EBP­1C],EBX MOV DWORD PTR SS:[EBP­4],EBX LEA EAX,DWORD PTR SS:[EBP­6C] PUSH EAX CALL DWORD PTR DS:[GetStartupInfoW] 

 و stack وال تنسى قيم .. Dump ليخرب هاتين اإلجرائيتن لذلك حاول وضع نقطة توقف عند إحداهما ثم عمل EC لحسن الحظ كذلك ف .. جالت المس

Standard Microsoft Visual Basic OEP 

 وتكون غالبا .. ألنها تكون ضعيفة VB بالنسبة لتطبيقات Virtualization كما ذكرت في المقال فأنه قليال مانتدحدث عن حماية تستخدم تقنية ال : فهي كالتالي VB application لكن البأس ولنجعل الملحق أشمل سأضع بنية نقطة الدخول لل ... سهلة الفك

MP DWORD PTR DS:[MSVBVM60.#100]ß jumps to ThunRTMain DB 00 DB 00 PUSH dword1 ß OEP CALL <JMP.&MSVBVM60.#100>ß call to ThunRTMain 

 ... في الغالب تكون مخربة لكنها سهلة اإلجياد الوإصالح

.. العديد من األمثلة للغات أخرى إلتقان فك هذا المشفر الرائع وتذكر أنه يجب أن تطلع على .. وبهذا ننهي هذا الملحق