[Micro-rutina] strlen - ANSI

Iniciado por Karcrack, 21 Enero 2013, 02:59 AM

0 Miembros y 1 Visitante están viendo este tema.

fary

Cita de: MCKSys Argentina en 22 Enero 2013, 02:22 AM
Optimizando el code de mDrinky para que dé 1 con un str de largo 0 ( :P), queda de 13 bytes:

Código (asm) [Seleccionar]

strlena:
    pop edx
    pop ecx
    xor eax, eax
bucle:
    inc eax
    cmp byte ptr [ecx+eax],0
    jne bucle
    jmp edx


si  :) lo unico que si es una cadena no le suma ese byte nulo.
Un byte a la izquierda.

Karcrack

El asunto es que estoy parcheando un PE que tiene una función con este comportamiento (Cadena NULA = 1, etc...) Quería inyectar un poco de código sin necesidad de redireccionarme a/crear codecaves. Substituyendo la función por una de 20bytes tenía más que suficiente para lo que quería inyectar :)

Me encantan este tipo de threads :rolleyes: ;-)
A ver si acabo una función RC4 y vemos cuanto la podemos recortar >:D

cpu2

La mia devuelve 1 si la cadena es núla, el código esta escrito en unix-like.

Código (asm) [Seleccionar]
.section .data

cadena:
.ascii ""

.section .text
.globl _start

_start:

pushq $cadena
popq %rbx

C.0:
incb %bl
incb %dl
cmpb %al, (%rbx)
jne C.0
movl %edx, %edi
movb $0x1, %al

syscall


14 bytes C.0.

Kdump:
CALL  exit(0x1)

Un saludo.

mr.blood

#13
Hoy viendo esta pagina recorde este tema e hice una funcion de 10 bytes.

Código (asm) [Seleccionar]
include 'C:\FASM\include\win32ax.inc'

.code
start:
push ebp
mov ebp, esp

push mensaje
call strlen

leave
ret

strlen:
pop edx
pop edi
xor ecx, ecx
bucle:
inc ecx
SCASB
jnz bucle
jmp edx
.end start
.data
mensaje db "Mr.BlooD",0


Sa1uDoS