TO DONATE : BTC => 1D8Aq4q2jQnvGD1GaK9vbNwKgm1K5zUEWL || PM => U4089661


اهم قوانين :1- منع الردود الباهتة مثل شكرااااا و أخواتها 2- لا يسمح بالمشاحنات الطائفية باآ شكل من الأشكال 3- عدم استعمال الألفاظ التافهة و الكلام البذىء 4- عدم وضع معرفات التواصل الأجتماعى بالردود 5- الأطلاع على كامل القوانين واجب 


العودة   الحماية للأبد -Security 4 Ever > قسم البرمجـــة > أساسيات لغة الأسمبلي

أساسيات لغة الأسمبلي يهتم بلغة الآلة (التجميع) Assembly و طرق بناء بعض أجزاء التطبيقات من خلالها

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 04-09-2015, 02:56 PM
الصورة الرمزية GEOIX
GEOIX
عضو مبدع
 
حـالة التــواجـد : GEOIX غير متواجد حالياً
تاريخ التسجيل: Jan 2013
مكـان الإقامـة : etc/passwd
الجــــنــــــس: ذكـر
المشاركات: 969
شكراً:1,178
تم شكره 2,257 مرة في 551 مشاركة
معدل تقييم المستوى: 0
GEOIX بدون تقييم
Lightbulb كشف المنقّحات | DBG Detection

السلام عليكم ورحمة الله
شرح بسيط ، و لمن لم يفهم يسأل .

1 - باستخدام بحث في العناوين
يمكن تخطيها بسهولة ، السر موجود هنا (CALL FindWindow::TEST EAX,EAX)

كود PHP:
.data
GEOIX_NoFTitle db 
"Debugger status:",0h
GEOIX_NotF db 
"Debugger not found!",0h
GEOIX_F db 
"Debugger found!",0h
OdbgFWindow db 
"OLLYDBG",0h
.code
start
:
    
PUSH 0
    PUSH offset OdbgFWindow
    CALL FindWindow
    TEST EAX
,EAX
    JNE 
@DebuggerDetected
    invoke MessageBox
NULLADDR GEOIX_NotFADDR GEOIX_NoFTitleNULL
    JMP 
@exit
  @
DebuggerDetected:
    
PUSH NULL
    PUSH offset GEOIX_FoTitle
    PUSH offset GEOIX_F
    PUSH NULL
    CALL MessageBox
  
@exit:
PUSH 0
CALL ExitProcess
end start 
2- ثانيا بطريقة TLS Callbacks + IsDebuggerPresent
الاولى تعتمد على PE_ و الثانية بالـ API

كود PHP:
    .data
       DbgNotFoundTitle db 
"Debugger status:",0h
       DbgFoundTitle db 
"Debugger status:",0h
       DbgNotFoundText db 
"Debugger not found!",0h
       DbgFoundText db 
"Debugger found!",0h

;    TLS Structure {See PE Format info}

       
dd offset Tls1
       dd offset Tls2
       dd offset Tls3
       dd offset TlsCallBack
       dd 0
       dd 0
       Tls1 dd     0
       Tls2 dd     0
       Tls3 dd     0
       TlsCallBack dd  offset TLS
       dd     0
       dd     0
    
.data?
       
TLSCalled db ?
    .
code

start
:
;    
MASM32 antiOllyDBG example 
;    coded by ap0x


PUSH 0
CALL ExitProcess
RET

;    Code below is executed before .code section
TLS
:
CMP BYTE PTR[TLSCalled],1
JE 
@exit
MOV BYTE PTR[TLSCalled],1
CALL IsDebuggerPresent

CMP EAX
,1
JE 
@DebuggerDetected

PUSH 40h
PUSH offset DbgNotFoundTitle
PUSH offset DbgNotFoundText
PUSH 0
CALL MessageBox

JMP 
@exit
  @
DebuggerDetected:

PUSH 30h
PUSH offset DbgFoundTitle
PUSH offset DbgFoundText
PUSH 0
CALL MessageBox

  
@exit:

RET

end start 
3- باستعمال OpenProcess + GetProcAddress
يمكنك التعرف اكثر باستعمال winHLP

كود PHP:
PUSH offset Krnel32    ;kernel32.dll
CALL GetModuleHandle

PUSH offset OpnProcess    
;OpenProcess
PUSH EAX
CALL GetProcAddress

CMP BYTE PTR
[EAX+6],0EAh
JE 
@DebuggerDetected

PUSH 40h
PUSH offset DbgNotFoundTitle
PUSH offset DbgNotFoundText
PUSH 0
CALL MessageBox

JMP 
@exit
  @
DebuggerDetected:

PUSH 30h
PUSH offset DbgFoundTitle
PUSH offset DbgFoundText
PUSH 0
CALL MessageBox

  
@exit:

PUSH 0
CALL ExitProcess

end start 

و في الختام ،،

سأترك المنتدى في الايام القليلة المقبلة ، ربما سأضع بصمتي ،
شوي دروس في عالم RE + MalwareAny
عن قريب ان شاء الله

و السلام عليكم  

 

 

I'll be back soon

الوعي في العقول وليس في الأعمار ،فالأعمار مجرد عدّاد لأيامك.
رد مع اقتباس
15 أعضاء قالوا شكراً لـ GEOIX على المشاركة المفيدة:
  #2  
قديم 04-09-2015, 03:31 PM
الصورة الرمزية Black-ID
Black-ID
عضو مبدع
 
حـالة التــواجـد : Black-ID غير متواجد حالياً
تاريخ التسجيل: Jul 2011
مكـان الإقامـة : 41\x6c\x67\x65\x72\x69\x61
الجــــنــــــس: ذكـر
الــهـــوايـــــة: Coding & Fun
المشاركات: 792
شكراً:739
تم شكره 2,343 مرة في 519 مشاركة
معدل تقييم المستوى: 9
Black-ID على طريق التميز
افتراضي رد: كشف المنقّحات | DBG Detection

لم تتكلم عن اهم الحمايات ptrace و strace

كود PHP:

#include <stdio.h>
#include <sys/ptrace.h>

int main()
{
    if (
ptrace(PTRACE_TRACEME010) == -1
    {
        
printf("don't trace me !!\n");
        return 
1;
    }
    
// normal execution
    
return 0;

 

 

 

رد مع اقتباس
الأعضاء الذين قالوا شكراً لـ Black-ID على المشاركة المفيدة:
  #3  
قديم 04-09-2015, 03:42 PM
الصورة الرمزية GEOIX
GEOIX
عضو مبدع
 
حـالة التــواجـد : GEOIX غير متواجد حالياً
تاريخ التسجيل: Jan 2013
مكـان الإقامـة : etc/passwd
الجــــنــــــس: ذكـر
المشاركات: 969
شكراً:1,178
تم شكره 2,257 مرة في 551 مشاركة
معدل تقييم المستوى: 0
GEOIX بدون تقييم
افتراضي رد: كشف المنقّحات | DBG Detection

اقتباس:
المشاركة الأصلية كتبت بواسطة Black-ID مشاهدة المشاركة

لم تتكلم عن اهم الحمايات ptrace و strace
هذي عبارة عن simple technique و توجد افكار متعددة : flags , stepping
stepping تشبه ptrace  

 

 

I'll be back soon

الوعي في العقول وليس في الأعمار ،فالأعمار مجرد عدّاد لأيامك.
رد مع اقتباس
  #4  
قديم 31-03-2016, 12:38 AM
الصورة الرمزية ♛ Sec-Coder ♛
♛ Sec-Coder ♛
عضو جديد
 
حـالة التــواجـد : ♛ Sec-Coder ♛ غير متواجد حالياً
تاريخ التسجيل: Mar 2016
الجــــنــــــس: ذكـر
الــهـــوايـــــة: HACK - CraCker
المشاركات: 4
شكراً:0
تم شكره مرة واحدة في مشاركة واحدة
معدل تقييم المستوى: 0
♛ Sec-Coder ♛ بدون تقييم
افتراضي رد: كشف المنقّحات | DBG Detection

كل الطرق التي ذكرتها هي طرق بدائية وتخطيها سهل جداً ...

نحن الأن بصدد Virtualization واخواتها من ال هوكـ ...

ان كانت لديكـ افكار جديدة حاول ان تضعها داخل تحدي لنرى ما مدا فعاليتها ....

بالتوفيق لكـ .  

 

 

!!!......_ Sec-Coder _.......!!!


رد مع اقتباس
الأعضاء الذين قالوا شكراً لـ ♛ Sec-Coder ♛ على المشاركة المفيدة:
  #5  
قديم 01-05-2016, 11:52 PM
الصورة الرمزية GEOIX
GEOIX
عضو مبدع
 
حـالة التــواجـد : GEOIX غير متواجد حالياً
تاريخ التسجيل: Jan 2013
مكـان الإقامـة : etc/passwd
الجــــنــــــس: ذكـر
المشاركات: 969
شكراً:1,178
تم شكره 2,257 مرة في 551 مشاركة
معدل تقييم المستوى: 0
GEOIX بدون تقييم
افتراضي رد: كشف المنقّحات | DBG Detection

هذه عبارة عن simple technique كما ذكرت، كانت احدى بداياتي لبرمجة (مشفّر برامج)
سبق و ان استعملتها على احدى التحديات هنا، هناك العديد من الطرق و الأفكار لذلك

Junk - VMCODE - Timing - SizeImage - BreakPoint .. الخ

نظرة حول بعض التقنيات التي حولتها الى PB في برمجياتي+ فكرة أخرى جديدة مرة أخرى أتحدث عنها
بشكل منفصل تخص PE Headers

كود PHP:
inline void PushPopSS()
{

    
__asm
    
{
        
push ss
        pop ss
        mov eax
// This line executes but is stepped over
        
xor edxedx // This is where the debugger will step to
    
}

كود PHP:
ClrHwBpHandler proto
 
.safeseh ClrHwBpHandler

ClearHardwareBreakpoints proc
     assume fs
:nothing
     push offset ClrHwBpHandler
    push fs
:[0]
    
mov dword ptr fs:[0], esp Setup SEH
     
xor eaxeax
     div eax 
Cause an exception
     pop dword ptr fs
:[0] ; Execution continues here
     add esp
4
     ret
ClearHardwareBreakpoints endp

ClrHwBpHandler proc 
     
xor eaxeax
    mov ecx
, [esp 0ch] ; This is a CONTEXT structure on the stack
     mov dword ptr 
[ecx 04h], eax Dr0
     mov dword ptr 
[ecx 08h], eax Dr1
     mov dword ptr 
[ecx 0ch], eax Dr2
     mov dword ptr 
[ecx 10h], eax Dr3
     mov dword ptr 
[ecx 14h], eax Dr6
     mov dword ptr 
[ecx 18h], eax Dr7
     add dword ptr 
[ecx 0b8h], We add 2 to EIP to skip the div eax
     ret
ClrHwBpHandler endp 
كود PHP:
#define SERIAL_THRESHOLD 0x10000 // 10,000h ticks

DWORD GenerateSerial(TCHARpName)
{
    
DWORD LocalSerial 0;

    
DWORD RdtscLow 0// TSC Low
    
__asm
    
{
        
rdtsc
        mov RdtscLow
eax
    

    
    
size_t strlen _tcslen(pName); 
    
    
// Generate serial 

    
for(unsigned int i 0strleni++)
    { 
        
LocalSerial += (DWORDpName[i];
        
LocalSerial ^= 0xDEADBEEF;
    }

    
__asm
    
{
        
rdtsc
        sub eax
RdtscLow
        cmp eax
SERIAL_THRESHOLD
        jbe NotDebugged
        push 0
        call ExitProcess
        NotDebugged
:
    } 
    return 
LocalSerial;

كود PHP:
typedef struct _OBJECT_TYPE_INFORMATION {
    
UNICODE_STRING TypeName;
    
ULONG TotalNumberOfHandles;
    
ULONG TotalNumberOfObjects;
}
OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;

typedef struct _OBJECT_TYPE_INFORMATION {
    
UNICODE_STRING TypeName;
    
ULONG TotalNumberOfHandles;
    
ULONG TotalNumberOfObjects;
}
OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;

// ObjectListCheck uses NtQueryObject to check the environments
// list of objects and more specifically for the number of
// debug objects. This function can cause an exception (although rarely)
// so either surround it in a try catch or __try __except block
// but that shouldn't happen unless one tinkers with the function
inline bool ObjectListCheck()
{
    
typedef NTSTATUS(NTAPI *pNtQueryObject)
            (
HANDLEUINTPVOIDULONGPULONG);

    
POBJECT_ALL_INFORMATION pObjectAllInfo NULL;
    
void *pMemory NULL;
    
NTSTATUS Status;
    
unsigned long Size 0;

    
// Get NtQueryObject
    
pNtQueryObject NtQO = (pNtQueryObject)GetProcAddress
                
GetModuleHandleTEXT"ntdll.dll" ) ),
                
"NtQueryObject" );

    
// Get the size of the list
    
Status NtQO(NULL3//ObjectAllTypesInformation
                        
&Size4, &Size);

    
// Allocate room for the list
    
pMemory VirtualAlloc(NULLSizeMEM_RESERVE MEM_COMMIT
                    
PAGE_READWRITE);

    if(
pMemory == NULL)
        return 
false;

    
// Now we can actually retrieve the list
    
Status NtQO((HANDLE)-13pMemorySizeNULL);

    
// Status != STATUS_SUCCESS
    
if (Status != 0x00000000)
    {
        
VirtualFree(pMemory0MEM_RELEASE);
        return 
false;
    }

    
// We have the information we need
    
pObjectAllInfo = (POBJECT_ALL_INFORMATION)pMemory;

    
unsigned char *pObjInfoLocation 
        (
unsigned char*)pObjectAllInfo->ObjectTypeInformation;

    
ULONG NumObjects pObjectAllInfo->NumberOfObjects;

    for(
UINT i 0NumObjectsi++)
    {

        
POBJECT_TYPE_INFORMATION pObjectTypeInfo =
            (
POBJECT_TYPE_INFORMATION)pObjInfoLocation;

        
// The debug object will always be present
        
if (wcscmp(L"DebugObject"pObjectTypeInfo->TypeName.Buffer) == 0)
        {
            
// Are there any objects?
            
if (pObjectTypeInfo->TotalNumberOfObjects 0)
            {
                
VirtualFree(pMemory0MEM_RELEASE);
                return 
true;
            }
            else
            {
                
VirtualFree(pMemory0MEM_RELEASE);
                return 
false;
            }
        }

        
// Get the address of the current entries
        // string so we can find the end
        
pObjInfoLocation 
            (
unsigned char*)pObjectTypeInfo->TypeName.Buffer;

        
// Add the size
        
pObjInfoLocation += 
                
pObjectTypeInfo->TypeName.Length;

        
// Skip the trailing null and alignment bytes
        
ULONG tmp = ((ULONG)pObjInfoLocation) & -4;

        
// Not pretty but it works
        
pObjInfoLocation = ((unsigned char*)tmp) + 
                        
sizeof(unsigned long);
    }

    
VirtualFree(pMemory0MEM_RELEASE);
    return 
true

 

 

 

I'll be back soon

الوعي في العقول وليس في الأعمار ،فالأعمار مجرد عدّاد لأيامك.
رد مع اقتباس

الكلمات الدلالية (Tags)
المنقّحات, dbg, detection, |, كشف


الذين يشاهدون محتوى الموضوع الآن : 1 ( الأعضاء 0 والزوار 1)
 
أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
[شرح كتابى] Hacking Techniques and Intrusion Detection Bl3cK0uT قسم الكتب الألكترونية E-books 2 14-12-2015 11:28 AM
Hacking Techniques & Intrusion Detection X-GuN قسم الكتب الألكترونية E-books 6 20-06-2013 07:08 AM
BFD - Brute Force Detection [email protected] نظام تشغيل لينكس- Linux 5 14-01-2013 05:25 AM
An Investigation into the Detection and Mitigation of Denial of Service ( DoS ahmad.h4x0r قسم الكتب الألكترونية E-books 1 26-06-2012 10:16 PM


الساعة الآن 11:37 PM