Autor
|
Tema: SRCs de YST. (Leído 39,842 veces)
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
A y no entiendo el porque de tanto "push" y "pop" No es mas facil hacer mov a un registro
La razón principal es que quise que se explicara un poco el code mediante las variables y no se puede hacer un "mov [AddressOfNames].dword[ebx+20h] " esa es la razón , aunque facilmente se pueden eliminar todas las variables. y no se puede hacer mov de mem a mem pero creo que era mas rapido de mem a reg que hacer push mem y ala inbersa. ya te digo que yo no mido la velocidad, pero como de todas maneras tienes que pasarlo a un registro para usarlo tengo ese code con una sola variable. Y para explicar el code puedes poner comentarios diciendo lo que haces y a donde apunta. En esa comunidad no somos muchos los que siempre escribimos, por eso suele haber buen nivel en lo que se postea Saludos
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Arregle un poco el coidigo ( lo que se puede arreglar estnado cansado ) , mañana si gustan lo termino de arreglar. salu2 proc GetAddressFunction,LibHandle,Api locals AddressOfNames dd ? AddressOfFunctions dd ? endl push ebx edx edi ecx esi mov eax,[LibHandle] cmp eax,NULL je .Error mov ebx, dword[eax + 03Ch] add ebx,eax cmp word[ebx],"PE" jne .Error mov esi,dword[ebx+078h] mov ebx,esi add ebx,eax push dword[ebx+20h] pop [AddressOfNames] add [AddressOfNames] ,eax mov ecx,dword[ebx+018h] mov edi,0 mov ebx,esi add eax ,ebx push dword[eax+1ch] pop [AddressOfFunctions] .encontrar: dec ecx mov eax, 0x4 mul edi mov ebx,eax add ebx,[AddressOfNames] mov eax, [ebx] add eax, [LibHandle] inc edi stdcall comparar, [Api], eax cmp ecx,NULL je .Error cmp eax, 0 jne .encontrar dec edi rol edi,2 mov eax,edi add eax, [AddressOfFunctions] add eax,[LibHandle] mov eax, dword[eax] add eax,[LibHandle] pop esi ecx edi edx ebx ret .Error: xor eax,eax ; xor eax,eax = NULL pop esi ecx edi edx ebx ret ret endp proc comparar ,SRC,DST push edi ecx esi stdcall Len,[SRC] inc eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp proc Len , SRC push ecx edi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp
|
|
« Última modificación: 31 Mayo 2009, 03:56 am por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
mi code es este, es masm pero tanpoco cambia tanto. Getproadress proc PBaseDll:dword, PNombreFun:dword LOCAL NumFun push edx push ecx push esi push edi mov edx,[PBaseDll] ;Encontrar funcion pedida en la dll especificada cmp word ptr[edx],'ZM' je MZ cmp word ptr[edx],'MZ' je MZ NoPE: xor eax,eax jmp NoEncontre MZ: xor ecx,ecx add edx,[edx+3ch] cmp word ptr[edx],'EP' jne NoPE ;Cabecera PE mov edx,[edx+78h] ;Tabla de Exportaciones mov edi,[18h+edx] mov [NumFun],edi add edx,[PBaseDll] mov edi,[edx+20h] ;AddressOfNames add edi,[PBaseDll] jmp busca NoEs: cmp ecx,[NumFun] je NoEncontre inc ecx add edi,4 busca: mov esi,[edi] add esi,[PBaseDll] push esi push [PNombreFun] call cmpsrt cmp eax,0 jne NoEs ; AddressOfNameOrdinals mov edi,[edx+24h] add edi,[PBaseDll] rol ecx,1h add edi,ecx movzx ecx,word ptr [edi] ; AddressOfFunctions rol ecx,2h mov esi,dword ptr [edx+1ch] add ecx,[PBaseDll] add ecx, esi mov eax,[ecx] add eax,[PBaseDll] jmp bien NoEncontre: xor eax,eax bien: pop edi pop esi pop ecx pop edx ret 8 Getproadress endp
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Le corregi algunas cosas inutiles , no son muchas modificaciones las que le hice a mis source pero creo que lo debo postear igual include 'win32ax.inc' .code start: invoke LoadLibrary,"user32.dll" stdcall GetAddressFunction,eax,"MessageBoxA" stdcall eax,0,0,0,0 invoke ExitProcess,0 proc GetAddressFunction,LibHandle,Api locals AddressOfNames dd ? AddressOfFunctions dd ? endl push ebx edx edi ecx esi mov eax,[LibHandle] cmp eax,NULL je .Error mov ebx, dword[eax + 03Ch] add ebx,eax cmp word[ebx],"PE" jne .Error mov esi,dword[ebx+078h] mov ebx,esi add ebx,eax push dword[ebx+20h] pop [AddressOfNames] add [AddressOfNames] ,eax mov ecx,dword[ebx+018h] xor edi,edi add eax ,esi push dword[eax+1ch] pop [AddressOfFunctions] sub eax,esi add [AddressOfFunctions] ,eax .encontrar: dec ecx mov eax,edi rol eax,2 add eax,[AddressOfNames] mov eax, dword[eax] add eax, [LibHandle] inc edi stdcall comparar, [Api], eax cmp ecx,NULL je .Error cmp eax, 0 jne .encontrar dec edi rol edi,2 mov eax,edi add eax, [AddressOfFunctions] mov eax, dword[eax] add eax,[LibHandle] pop esi ecx edi edx ebx ret .Error: xor eax,eax ; xor eax,eax = NULL pop esi ecx edi edx ebx ret endp proc comparar ,SRC,DST push edi ecx esi mov ecx,-1 mov edi,[SRC] mov al,0 repnz scasb mov eax,ecx not eax mov ecx,eax mov esi,[SRC] mov edi,[DST] repz cmpsb mov eax,1 jnz Next dec eax Next: pop esi ecx edi ret endp .end start
|
|
« Última modificación: 31 Mayo 2009, 03:56 am por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Hola , decidi pasar la función AntiEmulaters desarrollada por ChainCoder en el lenguaje de programación delphi a ASM , espero que les sirva Codigo original:Function AntiEmulaters:Boolean; Var UpTime :DWORD; UpTimeAfterSleep :Dword; Begin UpTime := GetTickCount; Sleep(Strtoint('5'+'0'+'0')); UpTimeAfterSleep := GetTickCount; if ( UpTimeAfterSleep - UpTime ) < 500 Then Result:= True Else Result:= False; end;
Codigo traducido: antiemulator: push ebx ecx invoke GetTickCount mov ebx,eax mov eax,2 mov ecx,250 mul ecx invoke SleepEx,eax,FALSE ; 250 * 2= 500 ( para confundir un poco el antivirus ) invoke GetTickCount sub eax,ebx cmp eax,500 jl .si mov eax,FALSE pop ecx ebx ret .si: pop ecx ebx mov eax,TRUE ret
|
|
« Última modificación: 31 Mayo 2009, 03:57 am por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Creo que al poner: No confundes a ningun AV... ya que el FASM ya te lo calcula y pone el 500, talvez haciendo otras cosas, como por ejemplo esto, si que marees mas al AV: xor ebx, ebx mov ecx, 500 @@: inc ebx loop @B
Creo que tendrias que explicar que la mayoria de Emuladores de los AVs se saltan algunas APIs... como esta... asi que, los AVs no duermen Saludos
|
|
|
En línea
|
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Creo que al poner: No confundes a ningun AV... ya que el FASM ya te lo calcula y pone el 500, talvez haciendo Cierto , no me habia fijado .
|
|
« Última modificación: 31 Mayo 2009, 03:58 am por YST »
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
BEATMASTER
|
oorale que bien suena esto recientemente empeze a tener curiosidad de como sacar las funciones de una dll y mira con lo que me vengo a encontrar jaja servira de mucho sobre todo apra darme una idea de como lo ahces mm una pregunta :p te devulve el nombre de las funciones y tambien que parametros y valores devuelve? por cierto muy buenos codigos
|
|
|
En línea
|
|
|
|
|
Arkangel_0x7C5
Desconectado
Mensajes: 361
|
el peso de los parámetros se podría sacar mirando los mov X ,[ebp + X], pero el tipo de valor debuelto no, porque en asm esencialmente solo hay unos pocos tipos, según el tamaño y punteros.
saludos
|
|
|
En línea
|
|
|
|
|
|