تقييم الموضوع :
  • 7 أصوات - بمعدل 3.86
  • 1
  • 2
  • 3
  • 4
  • 5
من الــ Disassembly الى الــ Assembly
#1
السلام عليكم
تحت شعار من من الــ Disassembly الى الــ Assembly اقدم لكم هذه الطريقة البسيطة التي تبين كيفية اخذ جزء من اوامر الأسمبلي من IDA Pro و محاولة بنائها عن طريق MASM32...

1- نقوم بتحميل البرنامج المستهدف في IDA PRO ثم نذهب الى جزء الأوامر المراد اخذها:
.text:00401050                 public start
.text:00401050 start           proc near
.text:00401050                 push    0               ; LPBINDSTATUSCALLBACK
.text:00401052                 push    0               ; DWORD
.text:00401054                 push    offset aLogoJpg ; "logo.jpg"
.text:00401059                 push    offset aHttpsWwwAt4reN ; "https://www.at4re.net/f/images/logo.jpg"
.text:0040105E                 push    0               ; LPUNKNOWN
.text:00401060                 call    URLDownloadToFileA
.text:00401065                 retn
.text:00401065 start           endp

2- نفتح محرر MASM32 و نقوم بنسخ ما نحتاجه (PURE ASM) مع الحرص على اضافة الهيدرز اللازمة:
include masm32rt.inc

include urlmon.inc
includelib "urlmon.lib"

.const
        link  db "https://www.at4re.net/f/images/logo.jpg", 00h
        path  db "logo.jpg", 00h
.code

start proc
        push    0                                       
        push    0                                     
        push    offset path                  
        push    offset link                  
        push    0                                      
        call    URLDownloadToFileA                 
        ret                                          
start endp
end

3- نقوم ببناء المشروع للحصول على ملف التنفيذي ينفذ فقط جزء الأوامر التي اخترناها...

فوائد هذه الطريقة:
1- تعطينا اكثر مرونة في تحليل على حدى جزء من اوامر برنامج ما، بمحاكاتها...
2- تتيح لنا العمل على ما يسمى بــ ASM RIPPING في كتابة مولدات معلومات التسجيل في اختصاص الــ Keygenning
أعضاء أعجبوا بهذه المشاركة : mribraqdbra , [email protected]
#2
(18-04-2019, 09:27 AM)scriptkiddie كتب : 2- تتيح لنا العمل على ما يسمى بــ ASM RIPPING في كتابة مولدات معلومات التسجيل في اختصاص الــ Keygenning

راودني سؤال كيف نستغل هذه الطريقة في برمجة مولد مفاتيح لبرنامج ما حبذا لو تتطرق لمثال حي
لَّا إِلَٰهَ إِلَّا أَنتَ سُبْحَانَكَ إِنِّي كُنتُ مِنَ الظَّالِمِينْ.

عن أبي هريرة -رضي الله عنه- أن رسول الله -صلى الله عليه وسلم- كانَ يقولُ في سجودِهِ: «اللَّهُمَّ اغْفِرْ لي ذَنْبِي كُلَّهُ: دِقَّهُ وَجِلَّهُ، وَأَوَّلَهُ وَآخِرَهُ، وَعَلاَنِيَتَهُ وَسِرَّهُ».
(صحيح - رواه مسلم).
أعضاء أعجبوا بهذه المشاركة : mribraqdbra
#3
السلام عليكم
متابعة سلسلة، تحت شعار من الــ Disassembly الى الــ Assembly اقدم لكم محاولة اعادة كتابة التحدي الموجود هنا:
 
https://www.at4re.net/f/thread-522.html

انطلاقا من اوامره الأسمبلي و اعادة بنائها بــ MASM32
 
include masm32rt.inc

.data
AboutMsg     db "Reversed by scriptkiddie", 00h
GoodBoyMsg     db "Great Serial OK. Well done!", 00h
BadBoyMsg     db "hey Quit joking man!", 00h

buf01       db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       

buf02       db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       

buf03        db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h, 00h, 00h, 00h, 00h, 00h, 00h, 00h       
            db 00h                                          

hInstance     dd 00000000h                                    
buf05       dd 00000000h                                    
buf06       dd 00000000h                                    

buf07       dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h, 00000000h                         
            dd 00000000h                                    
            dd 896 dup (?)                             

.code
start PROC
        push    0                                       
        call    GetModuleHandleA                        
        mov     dword ptr [hInstance], eax                  
        push    0                                       
        push    offset DialogFunc                            
        push    0                                       
        push    100                                     
        push    dword ptr [hInstance]                       
        call    DialogBoxParamA
        push    0
        call    ExitProcess                            

DialogFunc:
        enter   0, 0                                    
        push    ebx                                     
        push    edi                                     
        push    esi                                     
        cmp     dword ptr [ebp+0Ch], 272                
        jz      Snippet003                                   
        cmp     dword ptr [ebp+0Ch], 273                
        jz      Snippet004                                   
        cmp     dword ptr [ebp+0Ch], 16                 
        jz      Snippet002                                   
        cmp     dword ptr [ebp+0Ch], 2                  
        jz      Snippet002                                   
        xor     eax, eax                                
        pop     esi                                     
        pop     edi                                     
        pop     ebx                                     
        leave                                           
        ret     16                                      

Snippet002:      
        push    6                                       
        push    dword ptr [ebp+8h]                      
        call    ShowWindow                              
        push    0                                       
        call    ExitProcess
        
Snippet003:     
        push    1000                                    
        push    dword ptr [hInstance]                       
        call    LoadIconA                               
        mov     dword ptr [buf05], eax                  
        push    eax                                     
        push    1                                       
        push    128                                     
        push    dword ptr [ebp+8h]                      
        call    SendMessageA                            
        push    10                                      
        push    dword ptr [ebp+8h]                      
        call    GetDlgItem                              
        mov     dword ptr [buf06], eax                  
        push    20                                      
        push    dword ptr [ebp+8h]                      
        call    GetDlgItem                              
        mov     dword ptr [buf07], eax                  
        pop     esi                                     
        pop     edi                                     
        pop     ebx                                     
        leave                                           
        ret     16                                      

Snippet004:
        cmp     dword ptr [ebp+10h], 50                 
        jnz     Snippet005                                   
        jmp     Snippet002                                   

Snippet005:
        cmp     dword ptr [ebp+10h], 40                 
        jnz     Snippet006                                   
        call    Snippet008  

Snippet006:  
        cmp     dword ptr [ebp+10h], 30                 
        jnz     Snippet007                                   
        call    Snippet014
        
Snippet007:  
        xor     eax, eax                                
        pop     esi                                     
        pop     edi                                     
        pop     ebx                                     
        leave                                           
        ret     16                                      

Snippet008:
        push    0                                       
        push    offset Snippet009                            
        push    dword ptr [ebp+8h]                      
        push    400                                     
        push    dword ptr [hInstance]                       
        call    DialogBoxParamA                         
        ret                                             

Snippet009:
        enter   0, 0                                    
        cmp     dword ptr [ebp+0Ch], 272                
        jz      Snippet011                                   
        cmp     dword ptr [ebp+0Ch], 273                
        jz      Snippet012                                   
        cmp     dword ptr [ebp+0Ch], 16                 
        jz      Snippet010                                   
        cmp     dword ptr [ebp+0Ch], 2                  
        jz      Snippet010                                   
        xor     eax, eax                                
        leave                                           
        ret     16                                      

Snippet010:  
        push    0                                       
        push    dword ptr [ebp+8h]                      
        call    EndDialog                               
        leave                                           
        ret     16                                      

Snippet011:  
        push    dword ptr [buf05]                       
        push    1                                       
        push    128                                     
        push    dword ptr [ebp+8h]                      
        call    SendMessageA                            
        push    offset AboutMsg                            
        push    402                                     
        push    dword ptr [ebp+8h]                      
        call    SetDlgItemTextA                         
        leave                                           
        ret     16                                      

Snippet012:
        cmp     dword ptr [ebp+10h], 401                
        jnz     Snippet013                                   
        jmp     Snippet010                                   

Snippet013:
        xor     eax, eax                                
        leave                                           
        ret     16                                      

Snippet014:
        push    offset buf01                            
        push    41                                      
        push    13                                      
        push    dword ptr [buf06]                       
        call    SendMessageA                            
        mov     dword ptr [ebp-4h], 0                   
        mov     dword ptr [ebp-4h], eax                 
        cmp     eax, 0                                  
        jnz     Snippet015                                   
        jmp     BadBoyMsgLabel                                   
        ret                                             

Snippet015:  
        cmp     eax, 5                                  
        jnc     Snippet016                                   
        jmp     BadBoyMsgLabel                                   
        ret                                             

Snippet016:  
        push    offset buf02                            
        push    41                                      
        push    13                                      
        push    dword ptr [buf07]                       
        call    SendMessageA                            
        cmp     eax, 0                                  
        jnz     Snippet017                                   
        jmp     BadBoyMsgLabel                                   
        ret                                             

Snippet017:  
        mov     ecx, dword ptr [ebp-4h]                 
        call    Snippet023                                   
        ret                                             

Snippet018:
        xor     ecx, ecx
        
Snippet019:  
        movsx   eax, byte ptr [buf02+ecx]               
        movsx   ebx, byte ptr [buf03+ecx]               
        cmp     ecx, 1                                  
        jz      Snippet022                                   
        cmp     eax, ebx                                
        jz      Snippet020                                   
        jmp     BadBoyMsgLabel                                   
        ret                                             

Snippet020:  
        cmp     eax, 0                                  
        jnz     Snippet021                                   
        jmp     GoodBoyMsgLabel                                   
        ret                                             

Snippet021:  
        inc     ecx                                     
        jmp     Snippet019                                   
        ret                                             

Snippet022:  
        inc     ebx                                     
        inc     ecx                                     
        cmp     eax, ebx                                
        jz      Snippet019                                   
        jmp     BadBoyMsgLabel                                   
        ret                                             

Snippet023:
        xor     ebx, ebx                                
        inc     dword ptr [ebp-4h]  
        
Snippet024:  
        sub     byte ptr [buf01+ebx], cl                
        cmp     byte ptr [buf01+ebx], 32                
        jz      Snippet025                                   
        inc     ebx                                     
        dec     ecx                                     
        jnz     Snippet024                                   
        jmp     Snippet026                                   

Snippet025:  add     byte ptr [buf01+ebx], cl                
        inc     ebx                                     
        dec     ecx                                     
        jnz     Snippet024  
        
Snippet026:  
        dec     ebx                                     
        xor     ecx, ecx
        
Snippet027:  
        movzx   eax, byte ptr [buf01+ebx]               
        cmp     eax, 65                                 
        jnc     Snippet028                                   
        add     eax, 32  
        
Snippet028:  
        cmp     eax, 90                                 
        jbe     Snippet029                                   
        sub     eax, 32  
        
Snippet029:  
        mov     byte ptr [buf03+ecx], al                
        dec     ebx                                     
        inc     ecx                                     
        cmp     ecx, 4                                  
        jz      Snippet030                                   
        cmp     ecx, dword ptr [ebp-4h]                 
        jnz     Snippet027                                   
        jmp     Snippet031                                   

Snippet030:  
        mov     byte ptr [buf03+ecx], 45                
        inc     ecx                                     
        jmp     Snippet027                                   

Snippet031:  
        call    Snippet018                                   
        ret                                             

BadBoyMsgLabel:  
        push    16                                      
        push    offset AboutMsg                           
        push    offset BadBoyMsg                             
        push    dword ptr [ebp+8h]                      
        call    MessageBoxA                             
        ret

GoodBoyMsgLabel:
        push    64
        push    offset AboutMsg
        push    offset GoodBoyMsg
        push    dword ptr [ebp+8h]
        call    MessageBoxA
        ret                                             

start ENDP
END

المرفقات تحتوي على السورس الكامل


الملفات المرفقة
.rar   crackme03_src.rar (الحجم : 5.54 KB / التحميلات : 15)
أعضاء أعجبوا بهذه المشاركة : mribraqdbra , [email protected]


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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم