Tuesday, March 15, 2016

Reverse Engineering- ээс хамгаалах

Breakpoint
Breakpoint нь 3н төрөлтэй байна. Hardware, санах ой болон INT 3h breakpoint байна. Breakpoint нь r.e-н чухал хэсэг юм, энэ зүйл байхгүйгээр дүн шинжилгээ хийх  боломж бага байна. Breakpoint нь програмын ажиллагааг зогсоохыг зөвшөөрдөг, R.E нь windowsAPI-д breakpoint-ийг оруулсанаар мессежүүдийг хайхад хялбар болгодог. Энэ нь магадгүй хамгийн сайн кракдах техник байх, Тэмдэгтүүдээр хайх болно. Breakpoint нь API -ийн маш чухал  MessageBoxVirtualAlloc,CreateDialog  эдгээр зүйлсийг шалгана. 
INT 3h

INT 3h breakpoint нь IA-32 инструкц дотор cc(0xcc) опкодтой тавигдана. Breakpoint-ийн хамгийн их хэрэглэдэг жишээ нь 0xCD, 0x03 дараалалаар илэрхийлэгдэнэ энэ нь бас төвөгтэй. Breakpoint-ийн хайх төрөл нь харьцуулбал энгийн, зарим кодууд нь энгийн байдаг. Гэсэн хэдий ч бид энэ хайх аргыг хэрэглэж байхдаа болгоомжтой байх хэрэгтэй шүү.
INT 3h breakpoint-ийг шалгах өөр нэг obfuscate арга байна. Ингэж буцаж эргүүлэх нь дээрх кодтой ижил гэдэгийг санах нь чухал. Энд төөрөлдүүлэх зүйл нэмж өгсөн, ингэснээр таны програмыг хамгаалж болох юм. 
Memory Breakpoint

Memory Breakpoint нь хамгаалалтын хуудсуудыг ашиглаж дебаггер хийж гүйцэтгэдэг, Тэнд санах ойн хуудсанд хандах нэг удаагын дохиолол байна. Санах ойд хамгаалалтын хуудас байна тэгээд тэнд хандана. STATUS_GUARD_PAGE_VIOLATION энэ зүйлийг босгож дараа нь програм шийдэх болно. Энэ Memory Breakpoint-ийг шалгах зөв арга юм. Хэрвээ програмын дибаг доор ажиллаж байгаа бол түүнийг илрүүлж memory breakpoint-г гүйцэтгэлийг ашиглаж дебаггер хийх болно. Денамик буфферийг байршуулж буфферлүү RET бичнэ. Дараа нь хамгаалалтын хуудсыг тэмдэглэж дараа нь стек дээр буцах хаягийг байршуулна. Тэгээд өөрсдийн хуудасруу үсрэнэ.
Hardware Breakpoint 
Hardware Breakpoint нь процессорын архитектур дотор intel-р гүйцэтгэгдсэн техник юм, тусгай регистеруудыг ашиглаж удирддаг,  Dr0-Dr7 хүртэл байна, үүнд Dr0-Dr3 хүртэл breakpoint-ийн 32 битийн хаяг регистер байна. Dr4-5 хүртэл intel-д нөөцөлсөн бусад дебаг хийх регистерүүд байна, Dr6-7 breakpoint-ийн онцлог шинжийг удирдаж ашиглана. Dr6-7 жоохон бит-д хэтэрхий их мэдээлэл агуулж байдаг. Breakpoint-ийг устгах эсвэл хайя, Ингэхий тулд 2 арга байна. Win32 GetThreadContext болон SetThreadContext эсвэл Structured Exception Handling ашиглах.  Одоо жишээн дээр WIN32 API   Функцийг ашигласан байна.

Structured Exception Handling (SEH)
Timig Attack 
Timing attack-ийн гол онол нь кодын хэсэгийг ажиллуулна, зөвхөн хугацааны жижиг хэсэгийг л авах юм. Хэрвээ кодын жижиг хэсэгийг авчихвал түүнд хугацааг хязгаарлана, тэгээд дебаггер нэмсэнээр хэн нэгэн кодыг алгасаж болно. Энэ төрлийн халдлагад олон жижиг өөрчлөлт байна, ихэнх нь IA-32 RDTSC  инструкц ашигладаг. БУсад өөр арга нь timeGetTimeGetTickCount, болон QueryPerformanceCounter.


No comments:

Post a Comment