|
 |
import section kullanmadan program yazmak |
 |
|
 |
streamer
Programlama Dilleri Modu.
  

Kayıt Tarihi: 29-09-2005
Mesajlar: 243
Eğitim Durumu: Önlisans Bilgi Sahibi Olduğu Konular: IA32/64 Assembly;Masm32;C/C+
+;C#;.Net;Device Driver Developing;KernelMod
e;Windows Server Family OS's Management;NAS;SAN;L
DAP Architecture;Reverse
Engineering;3D Modelling and sleeping
Oy Ver
Seviye: 32 [?]
Deneyim: 387,199
Sonraki Seviye: 453,790
 |
|
import section kullanmadan program yazmak |
 |
Aşağıdaki yazıyı biraz önce bir forumda yazdım biraz daha yararlı olsun diye burayada yazayım dedim belki birilerinin işine yarar.
.idata yani import data programların diğer programlardan export ettiği fonksiyonların kullanılmasını sağlayan bir kısayol görevi icra eder. Örneğin programınızda basit bir mesaj çıkarmak için win apileriden MessageBoxA apisini tercih ettiğinizi varsayarsak kulandığınız programlama dilinin compileri bunu kaynak kodunuzun içerisinde sanırım
delphi için Kod:
var
,c++ ve masm32 için Kod:
include
) belirteçleri sayesinde hangi yardımcı api librarylerinin kullanıldığına bakar ve message box'u çıkaracağı zaman sizin kodunuzdaki Kod:
MessageBoxA
parametrelerini ve jump adresini alır ve gerekli apinin içerisine zıplar ve kod icra etmeye taki mesaj kutusu çıkana dek orada devam eder. Peki programdan bu import tableları silersen nolur compiler invoke MessageBox,NULL,addr hede,addr hödo,MB_OK
satırına gelir ve hönk der. Sebebini söylemeye gerek yok sanırım.
Şimdi gelelim bunu dissassembler dan nasıl saklayacağımıza . Eğer biz programımızı yazarken derleyiciye bu import işini bırakmadan "kardeş ben kernel32 dll'nin yerinide bulurum fonksiyonlarım yerinide sen çık aradan" demek istersek aşağıdaki gibi örnek bir kod işimizi fazla fazla görecektir. Kodu ince ince açıklamak isterdim ama vakit yok. Eğer şurayı anlamadım diyip yine bu konu başlığı altında kod la ilgili bir şeyler sorarsanız ilerleyen zamanlarda yardımcı olmaya çalışırız.
Kod:
.486
.Model Flat, Stdcall
Option Casemap:None
.Data
; kernel32.dll fapi's
___Kernel32 db 14,"GetProcAddress"
_Getprocaddress dd 0
db 11,"LoadLibrary"
_Loadlibrary dd 0
db 11,"ExitProcess"
_Exitprocess dd 0
; user32.dll api's
___User32 db 11,"MessageBeep"
_Messagebeep dd 0
db 10,"MessageBox"
_MessageBox dd 0
_Kernel Dd 0
_User32 db "USER32",0
_Default Dd 0
.Code
Start:
Call Delta
Delta:
Pop Ebp ; delta ofseti al
Sub Ebp,Offset Delta
Call Get_Kernel ; kernel32'nin base adresini al
Push 3 ;
pop Ecx
Lea Esi,[Ebp+Offset ___Kernel32]
Call Get_Apis ; .apileri bul
Lea Eax,[Ebp+Offset _User32] ; user32.dll yükle
Push Eax
Call [Ebp+_Loadlibrary] ; // // //
test Eax,Eax
jz Error_Exit
Mov [Ebp+Offset _Default],Eax ; sonucu sakla
push 2
pop Ecx
Lea Esi, [Ebp+Offset ___User32]
Call Get_Apis ; user32 apilerini al
Push -1
Call [Ebp+_Messagebeep] ; beep
Push 0
Call _t02
db "little test",0
_t02: Call _t01
db ".idata yok mesaj var?",0
_t01: Push 0
Call [Ebp+_MessageBox] ; messagebox
Error_Exit:
Push 0
Call [Ebp+_Exitprocess] ; çık
; ######################## get kernel ########################
Get_Kernel:
Mov Ecx,[Esp+4] ; stackten kernelin adresini al
Kernel_Loop:
xor edx,edx
Dec Ecx ;ecx bizim için bir geri sayım sayacı olacak
Mov Dx,[Ecx+3Ch] ;ecx'in her geri sayım işleminde (ki ecx=kernel32.dll' için de bir kodu temsil ediyor) ecx+3ch yapıp
Test Dx,0F800H ;F800 ile uyuşup uyuşmadığına bakıyoruz
Jnz Kernel_Loop
Cmp Ecx,[Ecx+Edx+34H] ;Eğer F800 ise PE başlığı kontrolu yapıyoruz
Jnz Kernel_Loop
Mov [Ebp+Offset _Kernel],Ecx
Mov [Ebp+Offset _Default],Ecx
Ret
; ######################## get apis ########################
; default = dll base
; ecx = apilerin sayısı
; esi = structure adres
Get_Apis:
Xor Ebx,Ebx
Api_Loop:
Inc Esi ;
Push Ecx ;
Movzx ecx, byte ptr [Esi-1] ;
Push Ecx
Call Get_Api
Pop Ebx
Pop Ecx
Add Esi,Ebx
Mov [Esi],Eax
Add Esi,4
Loop Api_Loop
Ret
Get_Api:
Mov Edx, [Ebp+Offset _Default]
Add Edx, [Edx+3Ch] ; PE başlığı
Mov Edx, [Edx+78H] ; Export table adresi
Add Edx, [Ebp+Offset _Default]
Mov Edi, [Edx+32]
Add Edi, [Ebp+Offset _Default]
Mov Edi, [Edi]
Add Edi, [Ebp+Offset _Default]
Mov Eax, [Edx+24]
Xor Ebx,Ebx
Next_One:
Push Ecx
Inc Ebx
Push Esi
Push Edi
Repz Cmpsb ; compare api with export
Pop Edi
Pop Esi
Jnz Not_Found
Pop Ecx
Mov Ecx, [Edx+36]
Add Ecx, [Ebp+Offset _Default]
Dec Ebx
Movzx eax, word ptr [Ecx+Ebx*2]
Mov Ebx, [Edx+28] ;Get Addroffunctions
Add Ebx, [Ebp+Offset _Default]
Mov Eax, [Ebx+Eax*4]
Add Eax, [Ebp+Offset _Default]
Ret
Not_Found:
Dec Edi
Loop_1:
Inc Edi
Cmp Byte Ptr [Edi],0
Jnz Loop_1
Inc Edi
Dec Eax
Jz Exit_Search
Pop Ecx
Jmp Next_One
Exit_Search:
Jmp Error_Exit
Ret
End Start
__________________
If I had six hours to chop down a tree, I'd spend the first four of them sharpening my axe.
Abraham Lincoln
Bu mesaj toplam 1 kez düzenlendi. Son düzenlemesi streamer tarafından 28-11-2005 saat 14:13 civarında gerçekleşti.
|
|
27-11-2005 17:11 |
|
|
 |
|
 |
 |
|
 |
SiMuRg
Programlama Dilleri Modu.
   

Kayıt Tarihi: 10-10-2005
Mesajlar: 509
Eğitim Durumu: Lisans Meslek: Mühendis Bilgi Sahibi Olduğu Konular: JAVA JAVA JAVA, .NET, C, Delphi, PHP, MYSQL, ORACLE, SQL SERVER, TCP/IP, Network, IIS
Oy Ver
Seviye: 35 [?]
Deneyim: 805,654
Sonraki Seviye: 824,290
 |
|
eline sağlık ve teşekkür ederiz, hiç ilgilenmedim ama güzel bi çalışma.
__________________ Hadi.. Yine.. Yeniden...
|
|
28-11-2005 11:48 |
|
|
kapgan
Byte
   
Kayıt Tarihi: 22-10-2005
Mesajlar: 169
Eğitim Durumu: Lisans Meslek: KALIP Bilgi Sahibi Olduğu Konular: visual basic c++ alt seviye ve catia
Oy Ver
Seviye: 30 [?]
Deneyim: 265,429
Sonraki Seviye: 300,073
 |
|
sağol hocam eline sağlık
__________________ ASASAS
|
|
02-01-2006 00:57 |
|
|
Respect
8 Bit


Kayıt Tarihi: 13-11-2005
Mesajlar: 28
Eğitim Durumu: Lisans Bilgi Sahibi Olduğu Konular: Hack
Oy Ver
Seviye: 22 [?]
Deneyim: 43,361
Sonraki Seviye: 49,025
 |
|
| Cvp: import section kullanmadan program yazmak |
 |
Evet bunlari verdigin kodlari denedim idata yok
__________________ Bildiğim tek şey hiç bir şey bilmediğimdir.
|
|
05-03-2006 00:15 |
|
|
kapgan
Byte
   
Kayıt Tarihi: 22-10-2005
Mesajlar: 169
Eğitim Durumu: Lisans Meslek: KALIP Bilgi Sahibi Olduğu Konular: visual basic c++ alt seviye ve catia
Oy Ver
Seviye: 30 [?]
Deneyim: 265,429
Sonraki Seviye: 300,073
 |
|
| hocam bu konuyu bir ara açarmısınız |
 |
hiç aklıma gelmemişti baktıkça pes diyorum gerçi arayıp bulmak acemi için zor biraz insanı yorar ama yinede cok güzel bir mantık yine teşekkür ederim
__________________ ASASAS
|
|
05-03-2006 17:56 |
|
|
|
|
|
 |
|