folder Tahribat.com Forumları
linefolder Assembly - Reverse Engineering
linefolder [Assembly(X86)] Resource Çıkartma (?)



[Assembly(X86)] Resource Çıkartma (?)

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek

    Assembly ile Exe nin rsrc bölümündeki bir dosyayı nasıl dışarı çıkartabilirim? (NOT: Başka uygulamanın değil kendi exe sinin.

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Caliber
    Caliber's avatar
    Kayıt Tarihi: 18/Aralık/2009
    Erkek

    Şunu bi dene baba:

    http://www.at4re.com/download.php?view.135

    Caliber tarafından 02/Oca/13 20:27 tarihinde düzenlenmiştir

    Tedbirsiz abdest bozmaya oturan, domala domala ta_ arar.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pcdoktor636
    pcdoktor636's avatar
    Kayıt Tarihi: 12/Ocak/2010
    Erkek

    Sorunu yanlış anlamadıysam reshacker işini görür.

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Sistem servislerini kullanmadan yapamazsın hocam, internette assembly öğreten dökümanlar dos zamanından kalma ve 8086 dökümanları olduğu için assembly tek başına herşeyi yapar gibi bir izlenime kapılıyor okuyanlar, o zamanlar öyleydi int 21h ile yapılamayacak şey yoktu.

    Hangi apileri kullanman lazım? sırayla, FindResource -> LoadResource -> SizeofResource -> LockResource -> (burada bellek elinde istediğini yap) -> FreeResource.

    Assembler olarak nasm öneririm ama malesef linkeri yok, eğer bilgisayarında mingw (devc++ la da geliyor eski bir sürümü) ya da visual C++ varsa onların linkerini kullanabilirsin, ben öyle yapıyorum. Yoksa mecbur masm32 indireceksin ki hiç haz etmem kendisinden. Nasm tek başına 700kb lik bir exeden ibaretken bu tüm dünyayı kurar bilgisayara (inc ler lib ler vs).

  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
    Tugberk bunu yazdı

    Sistem servislerini kullanmadan yapamazsın hocam, internette assembly öğreten dökümanlar dos zamanından kalma ve 8086 dökümanları olduğu için assembly tek başına herşeyi yapar gibi bir izlenime kapılıyor okuyanlar, o zamanlar öyleydi int 21h ile yapılamayacak şey yoktu.

    Hangi apileri kullanman lazım? sırayla, FindResource -> LoadResource -> SizeofResource -> LockResource -> (burada bellek elinde istediğini yap) -> FreeResource.

    Assembler olarak nasm öneririm ama malesef linkeri yok, eğer bilgisayarında mingw (devc++ la da geliyor eski bir sürümü) ya da visual C++ varsa onların linkerini kullanabilirsin, ben öyle yapıyorum. Yoksa mecbur masm32 indireceksin ki hiç haz etmem kendisinden. Nasm tek başına 700kb lik bir exeden ibaretken bu tüm dünyayı kurar bilgisayara (inc ler lib ler vs).

    Aradığım cevap buydu teşekkürler.

    Şimdi sana soracağım şey şu abi; Native Assembly yani ollydbg ile disassemble edilen exe ye bu API ları kullanarak kendi içerisinde bulunan resource dosyasını nasıl çıkarırız?

    Findresource gibi bir sıra vermişsin tam olarak kullanımı var mıdır acaba?

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
    Caliber,pcdoktor636

    Teşekkürler yardımlar için, bir önceki mesajımı okuyup daha fazla yardımcı olabilirsiniz.

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Hocam C ile kullanımı aşağıda, hata kontrolünü es geçtim,

    HMODULE hModule = GetModuleHandle(NULL);
    HRSRC hResource = FindResource(hModule, "NAME", "TYPE");
    HGLOBAL hMemory = LoadResource(hModule, hResource);
    DWORD dwResSize = SizeofResource(hModule, hResource);
    LPVOID lpResMem = LockResource(hMemory);
    // Burada artık resource lpResMem de boyutu da dwResSize da
    FreeResource(hResource);

    Nasm ile api çağırmak çok basittir tek sorun link etmek için C derleyicisi yüklü olması lazım bilgisayarında. 

    Apiyi çağırırken _FindResource@8 olarak yazman gerekiyor __stdcall fonksiyonları bu şekilde görünür dll de, @ den sonrası parametre uzunluğu, 2 parametre alan fonksiyon için 8, parametre türü 4 bayttan farklı olabilir dikkat etmek lazım, neyseki api bulunamazsa linker hata verir zaten.

    Nasm ile MessageBox kullanımı için küçük bir kod göstereyim, geri kalan hepsi aynı zaten.

    [bits 32]
    extern _MessageBoxA@16
    extern _ExitProcess@4
    global _entry
    
    section .data
    mesaj  db "selam moruk", 0x0
    baslik db "nabersin", 0x0
    
    section .text
    
    _entry:
    	push 0
    	push baslik
    	push mesaj
    	push 0
    	call _MessageBoxA@16
    	
    	push 0
    	call _ExitProcess@4

    extern, bu fonksiyonlar dışardan gelcek demek, .data sectionunda yazılacak stringler var, bunları ters sırada push ediyoruz ve call ile apiyi çağırıyoruz, en son ExitProcess(0) ile çıkıyoruz.

    Derlemek basit:

    nasm kod.asm -f win32

    sorun yoksa kod.obj çıkar, bundan sonrası link, mingw kullanıyorsan ,

    C:\MinGW\bin\ld.exe kod.obj -e entry -subsystem windows -lkernel32 -luser32 -o kod.exe

    aVisual C++ kullanıyorsan malesef link.exe direkt çalışmıyor dll bağımlılıkları current directory muhabbetleri yüzünden, visual studio tools klasöründe command prompt var cmd.exe simgesinde yine, onu çalıştır obj dosyasının olduğu dizine git, link.exe çalıştırılabilri bu şekilde.

    link kod.obj kernel32.lib user32.lib /entry:entry /subsystem:windows

    İki durumda da kod.exe çıkacak, bu kadar. Bence mingw yi indir kur, nasm ı da indir, C:\MinGW\bin klasörüne at, bu klasörü de path a ekle, masaüstünde rahat rahat çalış. Asm ile devam etmek istiyorsan tabi, şu sözü hep söylerim :)

    "C# ile yapabileceğin şeyler için değil C ile bile yapamayacağın şeyler için assembly kullan"

    aksi halde faydasından çok zararını görürsün, kolay gelsin

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    DrKill
    DrKill's avatar
    Kayıt Tarihi: 10/Mart/2004
    Erkek

    Tuğberk yine döktürmüş. Döküman niteliğinde cevap vermiş teşekkür ediyorum kendisine ileride benimde işime yarayacak bir cevap açıkçası. Birde tuğberk x86 için assembly öğrenmek istiyorum. Bunun için önerebileceğin döküman var mı acaba? Türkçe olursa daha iyi olur. Kitapta olabilir açıkçası.


    Bu imzayı her gördüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı sömürmektir
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Tugberk
    Tugberk's avatar
    Kayıt Tarihi: 04/Ekim/2009
    Erkek

    Teşekkürler hocam bildiğim en iyi kaynak bu, türkçe olarak, derneğin kurs notları, ben de bu kursta gördüm ilk kez zaten.

    http://www.kaanaslan.com/resource/document/download_file.php?file_id=18

     

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
    Tugberk bunu yazdı

    Hocam C ile kullanımı aşağıda, hata kontrolünü es geçtim,

    HMODULE hModule = GetModuleHandle(NULL);
    HRSRC hResource = FindResource(hModule, "NAME", "TYPE");
    HGLOBAL hMemory = LoadResource(hModule, hResource);
    DWORD dwResSize = SizeofResource(hModule, hResource);
    LPVOID lpResMem = LockResource(hMemory);
    // Burada artık resource lpResMem de boyutu da dwResSize da
    FreeResource(hResource);

    Nasm ile api çağırmak çok basittir tek sorun link etmek için C derleyicisi yüklü olması lazım bilgisayarında. 

    Apiyi çağırırken _FindResource@8 olarak yazman gerekiyor __stdcall fonksiyonları bu şekilde görünür dll de, @ den sonrası parametre uzunluğu, 2 parametre alan fonksiyon için 8, parametre türü 4 bayttan farklı olabilir dikkat etmek lazım, neyseki api bulunamazsa linker hata verir zaten.

    Nasm ile MessageBox kullanımı için küçük bir kod göstereyim, geri kalan hepsi aynı zaten.

    [bits 32]
    extern _MessageBoxA@16
    extern _ExitProcess@4
    global _entry
    
    section .data
    mesaj  db "selam moruk", 0x0
    baslik db "nabersin", 0x0
    
    section .text
    
    _entry:
    	push 0
    	push baslik
    	push mesaj
    	push 0
    	call _MessageBoxA@16
    	
    	push 0
    	call _ExitProcess@4

    extern, bu fonksiyonlar dışardan gelcek demek, .data sectionunda yazılacak stringler var, bunları ters sırada push ediyoruz ve call ile apiyi çağırıyoruz, en son ExitProcess(0) ile çıkıyoruz.

    Derlemek basit:

    nasm kod.asm -f win32

    sorun yoksa kod.obj çıkar, bundan sonrası link, mingw kullanıyorsan ,

    C:\MinGW\bin\ld.exe kod.obj -e entry -subsystem windows -lkernel32 -luser32 -o kod.exe

    aVisual C++ kullanıyorsan malesef link.exe direkt çalışmıyor dll bağımlılıkları current directory muhabbetleri yüzünden, visual studio tools klasöründe command prompt var cmd.exe simgesinde yine, onu çalıştır obj dosyasının olduğu dizine git, link.exe çalıştırılabilri bu şekilde.

    link kod.obj kernel32.lib user32.lib /entry:entry /subsystem:windows

    İki durumda da kod.exe çıkacak, bu kadar. Bence mingw yi indir kur, nasm ı da indir, C:\MinGW\bin klasörüne at, bu klasörü de path a ekle, masaüstünde rahat rahat çalış. Asm ile devam etmek istiyorsan tabi, şu sözü hep söylerim :)

    "C# ile yapabileceğin şeyler için değil C ile bile yapamayacağın şeyler için assembly kullan"

    aksi halde faydasından çok zararını görürsün, kolay gelsin

    Teşekkürler,

    Bir ara ayrıntılı inceleyeceğim.

    Ya aslında forumda programcı diye geçinen en az 100 kişi vardır ama sorsan sadece C#(.Net) bilip kendini programcı zanneden tipler. Bu tür konularda gerçek programcılar ortaya çıkıyor ;).

Toplam Hit: 2715 Toplam Mesaj: 10