I have opened a new thread in the secion in Spanish
I have opened a new thread in the secion in Spanish
http://rapidshare.com/files/13776844...attck.pdf.html paula 3 haber site bale
para paula3 y los que lo quieran Como calcular la 3DES de forma rápida y sencilla
permalink
Visto que ya prácticamente se ha hablado de todo lo que respecta a la 3DES final, os voy a enseñar a calcularla de forma muy fácil y siguiendo unos pasos básicos.
El provedor, para poder "modificar" la clave Idea de las ECMs, recurre a la rutina Map3854:
1) MAP3854, esta llamada siempre hace lo mismo --> colocar 30h bytes de datos en la zona C01-C30 de la card:
- Los bytes colocados entre C01-C10 corresponden a una zona del dump de BC00 que viene marcada en la emm (la emm coloca en BFC un valor que indica que zona del dump coger). Ya sabemos que esa zona se puede calcular en función a la siguiente ecuación:
C01[x] = EE[0xBD50 + y]
Donde y = index * 16 (el index no es más que el valor de BFC)
Es decir, todas las 3DES posibles se calcularán con el volcado que está comprendido entre BD50 y BE40 (puesto que sólo puede haber 16 valores distintos)
- Los bytes colocados entre C11-C20 son siempre los mismos y corresponde a los 10h bytes que están en BD40, siendo para kktel los siguientes: EA 27 F5 80 99 D1 C1 1E FA F2 92 B9 11 8B 00 14
- Los bytes colocados entre C21-C30 son tambien siempre los mismos pero en este caso vienen de la MAPROM40 (zona protegida y no dumpeable). Estos bytes son los siguientes: 70 df b0 42 33 6d 20 91 c6 2b c4 ed 92 c8 70 7e (iguales para todas las tarjetas que sean ROM110)
2) Primero se cogen los bytes que van desde $0C11-0C30, y se les calcula una firma MDC2:
Citação:
Firma MDC2 de EA27F58099D1C11EFAF292B91 18B001470dfb042336d2091c6 2bc4ed92c8707e = 53B1BB57530A885B910B8C212 B9D3E63
3) El resultado lo vamos a usar como clave de un 3DES con el que vamos a desencriptar los 38h bytes que se encuentran en $3148, y que se escriben cuando se hace la revisión da cada tarjeta (son específicos de cada card):
Volcado de la zona 3148:
Citação:
90 2D 67 B9 2A 67 D3 2C 78 5E EE 63 9D D5 4D CC E4 85 B6 5C 5C C8 93 DF A0 C6 F2 36 F3 CA C0 E4 14 57 23 A4 A3 96 B5 DA 96 C1 C7 7C D5 4B 90 32 45 19 E0 B9 61 E9 EB 90 72 31 86 15 66 53 90 E2 9C 0D 94 69 BD 3F 94 1C
Desencriptado:
Citação:
6365DEB4EFB56606 C00018 C10018 8CC720 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Que son una firma de 8 bytes + las posibles ternas que contienen código encriptado.
Dichas ternas son:
02:C000-18h octetos
02:C100-18h octetos
80:8CC7-20h octetos
4) Si ahora cogemos la terna que nos marca la dirección $0BFC=03, es decir la tercera terna, que es la terna que utilizan para transformar la clave encriptada en clave en claro, pues tenemos que hacer lo siguiente:
Cogemos los 10h bytes que hay en $0C01 y los 10h bytes que hay en $0C21, y les calculamos una firma MDC2:
Citação:
Firma MDC2 de 55B7F884F12F13F17FC02427B CFD516F70dfb042336d2091c6 2bc4ed92c8707e = B125706B0E0462DC4CB637E03 2C63419
5) El resultado lo usamos como clave 3DES para descifrar los 20h octetos de 80:8CC7:
Citação:
Datos de 80:8CC7 =
71 88 52 A3 C5 95 77 FA 14 BE 70 8A C6 28 5E 6E F3 2E 9C AE D6 E7 8E DB E8 63 F2 76 54 59 F2 E4 E3 89 39 BD 50 71 C2 37 7D 8D 32 FA 8E EB 2B B7 DE 7D A9 8A EE 59 69 BF D9 6B 00 49 59 8B A2 4B A7 FE FA A0 6D AD 7F 94 74 E7 16 49 BA 52 E5 05 5E A0 E9 94 A0 3F 8C 8F 70 4E F6 6B BC 37 19 F2 7C D5 9F A6 D9 3A B3 26 70 91 C2 37 11 6A AB 97 F7 C5 F0 FD B3 E3 FC EA 1E 4E 36 79 30 5D 88 B5 E2 DB C9 21 54 73 0D E7 2E E4 7D 37 18 48 73 8E 8C 25 E3 88 E8 EE 9C DE FF B0 34 96 D8 AB 3B 48 A6 53 0A 1A AF D7 2B 0E E1 02 BE 6D 25 B8 FB 6A BE DC 9F 61 FA 8A A2 86 06 68 AA 43 64 64 44 FF BB BE 8D 12 BD 1B 3E 53 27 07 92 19 A3 C1 E6 03 19 EE 13 DD 18 DF B3 1F D2 F8 7C A1 DC 40 F9 FA 21 60 43 0D C6 3D 12 22 B4 D8 99 52 F1 96 F9 C5 7A 36 F0 39 5D 45 16 C4 9D 3A 71 F9 D0 2A A9 1E
Citação:
Desencriptado = 55 74 E6 37 A9 5C 24 4D 88 A6 13 88 A6 01 88 A6 3B 88 87 9E A1 E7 27 11 A7 67 03 3E 3F 01 A0 6E 8C CB 82 65 8E DB DA AB A1 AE 7F A6 A7 E7 2A E7 99 5A 2A F9 2B 01 A7 A6 01 B7 25 B7 28 A6 19 B7 26 A6 21 B7 29 AD 6E A6 0D B7 2B B7 25 88 AB 13 B7 2C AD 6D A6 06 AD 6D A6 0C AD 69 84 AB 08 29 EC AD 42 CD 60 54 01 00 63 8D 00 80 04 85 58 58 58 5A 90 AE 07 89 D6 09 B1 90 D8 04 09 90 E7 70 5A 90 5A 2A F1 8D 00 80 B1 90 AE 07 85 A3 07 27 4C 90 E6 70 D8 09 A9 90 D8 04 09 D7 09 B1 5A 90 5A 2A EE 20 CD A6 02 20 1C 8D 01 80 E2 8D 01 80 DF 8D 01 81 6B A6 0E 20 0C AD 1D 3F 24 3F 25 A6 70 B7 26 A6 0B CC 38 44 AD EF A6 06 AD F7 3F 2B A6 70 B7 2C A6 0C AD ED 8D 01 81 63 81 CD 60 E6 09 B1 08 70 AD BF AE 6F A6 A7 D7 0D 20 E7 20 D7 01 63 5A 2A F5 2B 01 A7 85 85 CD 62 92 00 F8
3C
Que es el resultado que se colocará en $0100, y que son 8 bytes de firma mas el código que se ejecutará en $0108, la clave 3DES se encuentra siempre situada en $119-$128.
Eso es todo, un poco complejo la verdad pero si lo mirais con calma es sencillo.
__________________
Yo también soy torpe, unios TORPENAUTAS.
Buenas,
No tienen porque subir de revisión para modificar la 3DES... En AC6 ese código cambia por lo que ya no se realiza un 3DES sobre la clave de las ECMs. Este es el código usado por uno de los proveedores de cable de nuestro país:
AF A3 66 E0 A3 D2 EF 88 88 A4 F8 A1 08 26 10 A6 1A 88 A6 01 88 A6 3B 88 87 A7 9E A1 E4 27 01 A7 AE B0 A6 A7 E7 29 5A 26 FB 27 01 A7 A6 18 B7 2D 3F 24 20 08 2A 48 XX XX XX XX 3D E4 3F 25 A6 DA B7 26 A6 12 AD 57 A6 0D B7 25 A6 20 B7 26 A6 0B AD 4B A6 00 B7 24 A6 01 B7 25 A6 34 B7 26 A6 0D AD 3B 19 2D 3F 25 A6 ED B7 26 A6 12 AD 2F A6 03 AD 2B 3F 2A 3F 2B A6 44 B7 2C A6 0C AD 1F AE 07 E6 44 D8 0D 28 D7 0D 28 A6 A7 E7 44 5A 2A F1 CD 60 54 01 00 8F 8D 00 80 04 20 06 A6 02 CC 38 44 A7 85 58 58 58 5A 90 AE 07 89 D6 09 B1 90 D8 04 09 90 E7 70 5A 90 5A 2A F1 8D 00 80 B1 90 AE 07 85 A3 07 23 14 90 E6 70 D8 09 A9 90 D8 04 09 D7 09 B1 5A 90 5A 2A EE 20 CD CD 60 E6 09 B1 08 70 AD B9 AE 6F A6 A7 D7 0D 20 E7 20 D7 01 73 5A 2A F5 2B 01 A7 4F 88 87 A7 A7 A7 A7 A7 A7 A7 A7 A7
Código:
00:0108: 88 push a ; Stack <- A
00:0109: A4F8 and a, #$F8 ; A= A and ...
00:010B: A108 cp a, #$08 ; Compare with A
00:010D: 2610 jrne $011F ; Branch if <>
00:010F: A61A ld a, #$1A ; Load in A
00:0111: 88 push a ; Stack <- A
00:0112: A601 ld a, #$01 ; Load in A
00:0114: 88 push a ; Stack <- A
00:0115: A63B ld a, #$3B ; Load in A
00:0117: 88 push a ; Stack <- A
00:0118: 87 eret ; Return from subroutine
00:0119: A7 ??? ??? ;
00:011A: 9E ld a, s ; SP --> A
00:011B: A1E4 cp a, #$E4 ; Compare with A
00:011D: 2701 jreq $0120 ; Branch if =
00:011F: A7 ??? ??? ;
00:0120: AEB0 ld x, #$B0 ; Load in X
00:0122: A6A7 ld a, #$A7 ; Load in A
00:0124: E729 ld ($29,x), a ; Store A in...
00:0126: 5A dec x ; x--
00:0127: 26FB jrne $0124 ; Branch if <>
00:0129: 2701 jreq $012C ; Branch if =
00:012B: A7 ??? ??? ;
00:012C: A618 ld a, #$18 ; Load in A
00:012E: B72D ld $2D, a ; Store A in...
00:0130: 3F24 clr $24 ; <-- 0
00:0132: 2008 jra $013C ; Branch always
00:0134: db .2A
00:0135: db .48
00:0136: db .XX
00:0137: db .XX
00:0138: db .XX
00:0139: db .XX
00:013A: db .3D
00:013B: db .E4
00:013C: 3F25 clr $25 ; <-- 0
00:013E: A6DA ld a, #$DA ; Load in A
00:0140: B726 ld $26, a ; Store A in...
00:0142: A612 ld a, #$12 ; Load in A
00:0144: AD57 callr $019D ; Go to subroutine
00:0146: A60D ld a, #$0D ; Load in A
00:0148: B725 ld $25, a ; Store A in...
00:014A: A620 ld a, #$20 ; Load in A
00:014C: B726 ld $26, a ; Store A in...
00:014E: A60B ld a, #$0B ; Load in A
00:0150: AD4B callr $019D ; Go to subroutine
00:0152: A600 ld a, #$00 ; Load in A
00:0154: B724 ld $24, a ; Store A in...
00:0156: A601 ld a, #$01 ; Load in A
00:0158: B725 ld $25, a ; Store A in...
00:015A: A634 ld a, #$34 ; Load in A
00:015C: B726 ld $26, a ; Store A in...
00:015E: A60D ld a, #$0D ; Load in A
00:0160: AD3B callr $019D ; Go to subroutine
00:0162: 192D bclr $2D, #4 ; Bit 4 <-- 0
00:0164: 3F25 clr $25 ; <-- 0
00:0166: A6ED ld a, #$ED ; Load in A
00:0168: B726 ld $26, a ; Store A in...
00:016A: A612 ld a, #$12 ; Load in A
00:016C: AD2F callr $019D ; Go to subroutine
00:016E: A603 ld a, #$03 ; Load in A
00:0170: AD2B callr $019D ; Go to subroutine
00:0172: 3F2A clr $2A ; <-- 0
00:0174: 3F2B clr $2B ; <-- 0
00:0176: A644 ld a, #$44 ; Load in A
00:0178: B72C ld $2C, a ; Store A in...
00:017A: A60C ld a, #$0C ; Load in A
00:017C: AD1F callr $019D ; Go to subroutine
00:017E: AE07 ld x, #$07 ; Load in X
00:0180: E644 ld a, ($44,x) ; Load in A
00:0182: D80D28 xor a, ($0D28,x) ; A= A xor ...
00:0185: D70D28 ld ($0D28,x), a ; Store A in...
00:0188: A6A7 ld a, #$A7 ; Load in A
00:018A: E744 ld ($44,x), a ; Store A in...
00:018C: 5A dec x ; x--
00:018D: 2AF1 jrpl $0180 ; Branch if >0
00:018F: CD6054 call $6054 CLEARRAMBLOCK ; Go to subroutine
00:0192: dw. 0100 ; Dirección
00:0194: db. 8F ; Len Datos a borrar
00:0195: 8D008004 ecall #$00,$8004 ; Go to subroutine
00:0199: 2006 jra $01A1 ; Branch always
00:019B: A602 ld a, #$02 ; Load in A
00:019D: CC3844 jp $3844 MAP (DES) ; Jump
00:01A0: A7 ??? ??? ;
00:01A1: 85 pop x ; Stack -> X
00:01A2: 58 sla x ; x << 1
00:01A3: 58 sla x ; x << 1
00:01A4: 58 sla x ; x << 1
00:01A5: 5A dec x ; x--
00:01A6: 90AE07 ld y, #$07 ; Load in X
00:01A9: 89 push x ; Stack <- X
00:01AA: D609B1 ld a, ($09B1,x) ; Load in A
00:01AD: 90D80409 xor a, ($0409,y) ; A= A xor ...
00:01B1: 90E770 ld ($70,y), a ; Store A in...
00:01B4: 5A dec x ; x--
00:01B5: 905A dec y ; x--
00:01B7: 2AF1 jrpl $01AA ; Branch if >0
00:01B9: 8D0080B1 ecall #$00,$80B1 ; Go to subroutine
00:01BD: 90AE07 ld y, #$07 ; Load in X
00:01C0: 85 pop x ; Stack -> X
00:01C1: A307 cp x, #$07 ; Compare with X
00:01C3: 2314 jrule $01D9 ; Branch if <=
00:01C5: 90E670 ld a, ($70,y) ; Load in A
00:01C8: D809A9 xor a, ($09A9,x) ; A= A xor ...
00:01CB: 90D80409 xor a, ($0409,y) ; A= A xor ...
00:01CF: D709B1 ld ($09B1,x), a ; Store A in...
00:01D2: 5A dec x ; x--
00:01D3: 905A dec y ; x--
00:01D5: 2AEE jrpl $01C5 ; Branch if >0
00:01D7: 20CD jra $01A6 ; Branch always
00:01D9: CD60E6 call $60E6 COPY_ZP_TO_RAM ; Go to subroutine
00:01DC: dw. 09B1 ; Destino
00:01DE: db. 08 ; Len
00:01DF: db. 70 ; Origen
00:01E0: ADB9 callr $019B ; Go to subroutine
00:01E2: AE6F ld x, #$6F ; Load in X
00:01E4: A6A7 ld a, #$A7 ; Load in A
00:01E6: D70D20 ld ($0D20,x), a ; Store A in...
00:01E9: E720 ld ($20,x), a ; Store A in...
00:01EB: D70173 ld ($0173,x), a ; Store A in...
00:01EE: 5A dec x ; x--
00:01EF: 2AF5 jrpl $01E6 ; Branch if >0
00:01F1: 2B01 jrmi $01F4 ; Branch if <0
00:01F3: A7 ??? ??? ;
00:01F4: 4F clr a ; a <-- 0
00:01F5: 88 push a ; Stack <- A
00:01F6: 87 eret ; Return from subroutine
00:01F7: A7 ??? ??? ;
00:01F8: A7 ??? ??? ;
00:01F9: A7 ??? ??? ;
00:01FA: A7 ??? ??? ;
00:01FB: A7 ??? ??? ;
00:01FC: A7 ??? ??? ;
00:01FD: A7 ??? ??? ;
00:01FE: A7 ??? ??? ;
00:01FF: A7 ??? ??? ;
Para descifrar ese código se usa la sexta 3DES de 80:BC00;
Código:
0BFC: 06
P.D: La clave que viaja con el código a sido "censurada"
00: 0cb7b0a014acdb8d5f1fce8df be3986f enbede una o es cero
gracias asiere,muy bueno k hayan salvado el manual jejej,aunk ya lo tengo bien guardadito jejejjj
pero asiere,por k an dajado hasta ahora hablar en español??
bueno,un saludo cordial
todo el post estan en castellano y ahora me bienen con esto hasta mean mandado un mesaje privado por estar hablando en castellano pero no podran con nosotros
perdon, soy torpe pero no me entero de nada. ¿como obtengo las flores ahora? no se donde estan las actuales.
gracias