الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

anti debug

مغلق
بدأه مهند سليمان في 23 أكتوبر 2005 · 12 رد · 1,899 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذه الخدعة تستعمل لمعرفة المنقح إذا كان موجود في الذاكرة إم لا

وهي تتاخص في أن القيمة الموجودة في التسجبل DR7 تساوي

400h إن لم يكن هناك منقح في الذاكرة

الكود

mov eax,DR7

cmp eax,400h

jnz no

....

no:

........

والمشكلة أن هذه الخدعة لاتعمل إلا في ring 0

كيف يمكن الوصل إلي ring 0 في ويندوز NT

بأستخدم VXd or SEH

وشكرا

#2
Switch to Ring0 by LDT (Locale Descriptor Table):
-----------------------------------------------------------------------
.386p
.MODEL FLAT,STDCALL
locals
jumps
UNICODE=0
include w32.inc

Extrn SetUnhandledExceptionFilter : PROC

.data

msg1            db "Switch to Ring0 by LDT",0
msg2            db "Ring0 activated",0

gdt_            df 0
call_           dd 00
                dw 0Fh
o_gate          dw 0
                dw 028h          ;segment for RING0
                dw 0EC00h
                dw 0
.code

Start:

                mov  eax, offset ring0
                                  ;our Ring0 routine

                mov  [o_gate],ax  ;set address of our new Ring0 service to our "callgate"
                shr  eax,16
                mov  [o_gate+6],ax

                xor  eax, eax
                sgdt fword ptr gdt_
                                  ;save GDT
                mov  ebx,dword ptr [gdt_+2]
                                  ;GDT base address
                sldt ax
                add  ebx,eax      ;discriptor address

                mov  al,[ebx+4]
                mov  ah,[ebx+7]
                shl  eax,16      ;LDT address

                mov  ax,[ebx+2]  ;callgate's discriptor address

                add  eax,8
                mov  edi,eax      ;set in callgate for changes
                mov  esi,offset o_gate
                                  ;our "callgate" address
                movsd            ;move it to real callgate
                movsd            ;for jump to Ring0

                call fword ptr [call_]
                                  ;jump to Ring0 to our Ring0 service

                xor  eax, eax
                sub  edi,8        ;delete our changes in callgate
                stosd
                stosd


                call MessageBoxA,0, offset msg2, offset msg1,0

                call ExitProcess, -1


;----------------------------------------------------------
;Our new Ring0 service
;----------------------------------------------------------

ring0:
                mov eax, dr7      ;test for Ring0

                retf              ;back to RING3

ends
end Start

Switch to Ring0 by IDT (Interupt Descriptor Table) aka EliCZ's method:
--------------------------------------------------------------------------------------------------
.386p
.MODEL FLAT,STDCALL
locals
jumps
UNICODE=0
include w32.inc


Extrn SetUnhandledExceptionFilter : PROC

Interrupt       equ 5            ;interrupt number which we will use
                                  ;if you use Int 1h or 3h, it will be
                                  ;more harder debugg your program
.DATA

msg1            db "Switch to Ring0 by IDT",0
msg2            db "Ring0 activated",0


.CODE
Start:

                push edx
                sidt [esp-2]      ;read IDT to stack
                pop  edx          ;address of Interrupt table
                add  edx,(Interrupt*8)+4
                                  ;Interrupt table base+Int number+size for
                                  ;Int in Interrupt table=Int vector address
                mov  ebx,[edx]
                mov  bx,word ptr [edx-4]
                                  ;read old address our interrupt (INT 5h)

                lea  edi,InterruptHandler
                mov  [edx-4],di
                ror  edi,16      ;set our new interrupt handler
                mov  [edx+2],di

                push ds          ;save registers
                push es


                int  Interrupt    ;jump to Ring0 (our int 5h handler)

                pop  es          ;restore registers
                pop  ds


                mov  [edx-4],bx  ;set old int 5h handler
                ror  ebx,16
                mov  [edx+2],bx

                call MessageBoxA,0, offset msg2, offset msg1,0
                call ExitProcess, -1



;-----------------------------------------------------------------------------
;OUR NEW INT 5h HANDLER (it run in Ring0)
;-----------------------------------------------------------------------------

InterruptHandler:

                mov  eax,dr7      ;test for Ring0
                iretd            ;jump back to Ring3



ends
end Start

تم تعديل هذه المشاركة بواسطة Xacker في 23 أكتوبر 2005 في 16:34

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

مرفق

Pavol_Cerven.rar

d4baa0.gif
#4

للتنبيه، الملف المرفق من الاخ Delta يحوي على نفس السورس في المشاركة اعلاه بالاضافة الى سورس بلغة C (لكنه ليس بالسهل على مبرمجي الـ C الجدد)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

بصراحة لم اجد وقت كافي للكتابة في المنتدى... ولكن لفت إنتباهي هذا السؤال

-

هذا السؤال لي قصة معه وهي التعرف على الداله الغامضة GetThreadSelectorEntry

-

بإختصار تريد الوصول لمسجلات المعالج التابعة للنظام في بيئة 32 بت

القصة بسيطة ... لاحظ هذا الكود من مايكروسوفت

CONTEXT Context;
   LDT_ENTRY SelEntry;
   DWORD dwDsBase;
   DWORD DR7;
   BYTE Buffer[4];

   /* Get Context */
   Context.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;
   GetThreadContext( hThread, &Context );

   /* Calculate the base address of DS */
   GetThreadSelectorEntry(hThread, Context.SegDs, &SelEntry);
   dwDsBase = ( SelEntry.HighWord.Bits.BaseHi << 24) |
                (SelEntry.HighWord.Bits.BaseMid << 16) |
                SelEntry.BaseLow;

   /*
    * Disable all hardware breakpoints before reading the process
    * memory. Not doing so will lead to nested breapoints.
    */
   DR7 = Context.Dr7;
   Context.Dr7 &= ~0x3FF;
   SetThreadContext( hThread, &Context );

   /* Read DWORD at the location of DR0 */
   ReadProcessMemory( hProcess,
                      (LPVOID)((DWORD)Context.Dr0-dwDsBase),
                      Buffer, sizeof(Buffer), NULL);

   /* Restore hardware breakpoints */
   Context.Dr7 = DR7;
   SetThreadContext( hThread, &Context );

وبالتوفيق ,,

http://www.jaascois.com

*************************************************

مجموعة مواضيع - إحتراف البرمجة -

ّ~~~~~~~~~~~~~~~~~~~~~~

البرمجة المتقدمة & الهندسة العكسية & برمجة وأمن الأنظمة

/index.php?showtopic=45002

آخر المواضيع :

+- تحليل جرائم الكمبيوتر -+

أنظمة اليونكس(Solaris,HP, AIX,SCO)وانواع المعالجات

ثغرة SMS لأجهزة الجوال Siemens 3568i !

أخطاء وثغرات البرامج العربية !!!

سلسلة مواضيع - أمن وحماية مواقع الويب -

E البرمجة المتقدمة X للملفات التنفيذية E

سلسلة مواضيع ثغرات الأنظمة وإختراق الأجهزة

**************************************************

<span style='font-size:14pt;line-height:100%'>الإرادة تحـــقق السيـــادة</span>

**************************************************

#6

السلام عليكم

مشكورين إخواتي علي الردود وجاري التطبيق والقراءة

وإن شاء الله سأضع مجموعة من الخدع ضد التنقيح

ومشكورين مرة أخرى وماقصرتم

#7

:) الواحد يظهر علشان بقاله فترة مقرأش فى الأسيمبلي نقريبا نسيت كل حاجة :D ربنا يستر و الواحد يحاول يبدأ من تانى :) أدعولي يا جماعة أنا تقريبا جالى "ذهيمر" :D

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#8

الله يكون بعون الزهايمر :D

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

لم يعمل في winXp

#10

اعتقد ان الانتقال من ring3 الى ring0 يخضع لقوانين عديدة خصوصا انه قد تم رفع مستوى الامان لمنع الفيروسات من الانتقال الى طبقة الـ ring0 بسهولة.. يمكن الحل يكون في الـ vxd او الـ sys لكن مش متاكد من هالنقطة..

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#11

كيف يمكن أن أبرمج vXD

وأسف على تاخري في الرد

#13

للانتقال من Ring3 الى Ring0 في الغالب يتطلب عمل driver اما vxd أو wdm .

في مقال هنا بعنوان

ٌWIN NT/2K/XP Running Ring0 code without driver

كاتب المقال webcrazy

http://www.geocities.jp/webcrazyjp/ntring0.htm

هناك جزء من مقال بالانجليزية هنا

المقال باسم Crazyl0rd

http://www.phrack.org/phrack/59/p59-0x10.txt

لم أطلع على الموضوعين بشكل دقيق ( ليس لدي وقت لذلك ) ..

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

هذا الموضوع مغلق.

مواضيع مشابهة