Ver Mensaje Individual
Antiguo 03/02/2008, 12:33   #5
jubamo 
Usuario PREMIUM+
 
Avatar de jubamo
 
Fecha de ingreso: 15/ago/2006
Mensajes: 420
jubamo es como un diamante en brutojubamo es como un diamante en brutojubamo es como un diamante en brutojubamo es como un diamante en bruto
Esto es sobre el XTEA de la Wikipedia:
http://en.wikipedia.org/wiki/XTEA

Código:
 
void decipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) {
    unsigned long v0=v[0], v1=v[1], i;
    unsigned long delta=0x9E3779B9, sum=delta*num_rounds;
    for(i=0; i<num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + k[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}

Y aquí una composición con el desensamblado del bootloader de "MAX_S_v137_071017.bin":
[CODE]ROM:BFC0DD90 lw $t0, 0($a1)
ROM:BFC0DD94 lw $t1, 4($a1)
[COLOR="DarkRed"][B]unsigned long delta=0x9E3779B9, sum=delta*num_rounds;[/B][/COLOR]
ROM:BFC0DD98 li $t3, 0x9E3779B9
ROM:BFC0DDA0 mult $a0, $t3
ROM:BFC0DDA4 mflo $a3
ROM:BFC0DDA8 beqz $a0, loc_BFC0DE18
ROM:BFC0DDAC move $t2, $0
ROM:BFC0DDB0
ROM:BFC0DDB0 loc_BFC0DDB0: # CODE XREF: ROM:BFC0DE10j
[COLOR="DarkRed"][B] v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + k[(sum>>11) & 3]);[/B][/COLOR]
ROM:BFC0DDB0 sll $v1, $t0, 4
ROM:BFC0DDB4 srl $v0, $t0, 5
ROM:BFC0DDB8 xor $v1, $v0
ROM:BFC0DDBC addu $v1, $t0
ROM:BFC0DDC0 srl $v0, $a3, [COLOR="MediumTurquoise"]9[/COLOR]
ROM:BFC0DDC4 andi $v0, [COLOR="MediumTurquoise"]0xC[/COLOR]
ROM:BFC0DDC8 addu $v0, $a2
ROM:BFC0DDCC lw $v0, 0($v0)
ROM:BFC0DDD0 addu $v0, $a3, $v0
ROM:BFC0DDD4 xor $v1, $v0
[COLOR="DarkRed"][B] sum -= delta;[/B][/COLOR]
ROM:BFC0DDD8 subu $t1, $v1
ROM:BFC0DDDC subu $a3, $t3
[COLOR="DarkRed"] [B]v0 -= ((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]);[/B][/COLOR]
ROM:BFC0DDE0 sll $v1, $t1, 4
ROM:BFC0DDE4 srl $v0, $t1, 5
ROM:BFC0DDE8 xor $v1, $v0
ROM:BFC0DDEC addu $v1, $t1
ROM:BFC0DDF0 andi $v0, $a3, 3
ROM:BFC0DDF4 sll $v0, 2
ROM:BFC0DDF8 addu $v0, $a2
ROM:BFC0DDFC lw $v0, 0($v0)
ROM:BFC0DE00 addu $v0, $a3, $v0
ROM:BFC0DE04 xor $v1, $v0
[B][COLOR="DarkRed"]for(i=0; i<num_rounds; i++) [/COLOR][/B]
ROM:BFC0DE08 addiu $t2, 1
ROM:BFC0DE0C sltu $v0, $t2, $a0
ROM:BFC0DE10 bnez $v0, loc_BFC0DDB0
ROM:BFC0DE14 subu $t0, $v1
ROM:BFC0DE18
ROM:BFC0DE18 loc_BFC0DE18: # CODE XREF: ROM:BFC0DDA8j
ROM:BFC0DE18 sw $t0, 0($a1)
ROM:BFC0DE1C jr $ra
ROM:BFC0DE20 sw $t1, 4($a1)[/CODE]


Pues salvo ligeras diferencias es muy similar al código escrito en "C" para desencriptar mediante XTEA y explicado en la wikipedia.

Saludos Santi.
jubamo está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir