[Red5devs] Adobe changed the AEC cryptography in rtmfp

Art Clarke aclarke at xuggle.com
Fri Aug 28 08:02:34 PDT 2009


If/when Paul you're ready, I speak Java and C.

- Art

On Fri, Aug 28, 2009 at 7:53 AM, Mondain<mondain at gmail.com> wrote:
> Awesome work, but I'll have to find someone to convert this into java-nese
> :)
> Paul
>
> 2009/8/28 Slicer <rtmfpso at gmail.com>
>>
>> hi,
>> after some days reverse eng,I found they changed the AEC
>> cryptography.need more work on key generation.
>>
>>
>>
>> #define LE htonl
>>
>> #define FROUND(a,b,c,d,k)   (TE0[((a)>>24) & 0xFF] ^\
>>                             TE1[((b)>>16) & 0xFF] ^\
>>                             TE2[((c)>>8)  & 0xFF] ^\
>>                             TE3[ (d)      & 0xFF] ^\
>>                             *k++)
>>
>> #define RROUND(a,b,c,d,k)   (TD0[((a)>>24) & 0xFF] ^\
>>                             TD1[((b)>>16) & 0xFF] ^\
>>                             TD2[((c)>>8)  & 0xFF] ^\
>>                             TD3[ (d)      & 0xFF] ^\
>>                             *k++)
>>
>> /*
>>    arg_0 is always 0x0a,should be round times
>>    arg_4 is orignal data
>>    arg_8 is output buffer
>>    ecx pointer is key
>> */
>> void encode_tosend_67A9FF(int arg_0,int *arg_4,char *arg_8,char *ECX)
>> {
>>    int *KEY=ECX;
>>    int op0,op1,op2,op3;
>>    int y0,y1,y2,y3,y4,y5,y6,y7;
>>    int turns=arg_0;
>>    int *output=arg_8;
>>
>>    op0=LE(arg_4[0]) ^ *KEY++;
>>    op1=LE(arg_4[1]) ^ *KEY++;
>>    op2=LE(arg_4[2]) ^ *KEY++;
>>    op3=LE(arg_4[3]) ^ *KEY++;
>>
>>    y0=FROUND(op0,op1,op2,op3,KEY);
>>    y1=FROUND(op1,op2,op3,op0,KEY);
>>    y2=FROUND(op2,op3,op0,op1,KEY);
>>    y3=FROUND(op3,op0,op1,op2,KEY);
>>
>>    turns = turns>>1;
>>    turns --;
>>    if (turns > 0)
>>    {
>>        do
>>        {
>>            y4=FROUND(y0,y1,y2,y3,KEY);
>>            y5=FROUND(y1,y2,y3,y0,KEY);
>>            y6=FROUND(y2,y3,y0,y1,KEY);
>>            y7=FROUND(y3,y0,y1,y2,KEY);
>>            y0=FROUND(y4,y5,y6,y7,KEY);
>>            y1=FROUND(y5,y6,y7,y4,KEY);
>>            y2=FROUND(y6,y7,y4,y5,KEY);
>>            y3=FROUND(y7,y4,y5,y6,KEY);
>>
>>        } while (--turns > 0);
>>    }
>>
>>    output[0]=LE(
>>                (SBOX[ (y0>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y1>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y2>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y3)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>
>>    output[1]=LE(
>>                (SBOX[ (y1>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y2>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y3>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y0)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>
>>    output[2]=LE(
>>                (SBOX[ (y2>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y3>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y0>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y1)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>    output[3]=LE(
>>                (SBOX[ (y3>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y0>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y1>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y2)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>
>>    }
>>
>> }
>>
>>
>>
>>
>>
>> /*
>>    arg_0 is always 0x0a,should be round times
>>    arg_4 is orignal data
>>    arg_8 is output buffer
>>    ecx pointer is key
>> */
>> void decode_67AF0E(int arg_0,int *arg_4,char *arg_8,char *ECX)
>> {
>>    int *KEY=ECX;
>>    int op0,op1,op2,op3;
>>    int y0,y1,y2,y3,y4,y5,y6,y7;
>>    int turns=arg_0;
>>    int *output=arg_8;
>>
>>    op0=LE(arg_4[0]) ^ *KEY++;
>>    op1=LE(arg_4[1]) ^ *KEY++;
>>    op2=LE(arg_4[2]) ^ *KEY++;
>>    op3=LE(arg_4[3]) ^ *KEY++;
>>
>>    y0=RROUND(op0,op3,op2,op1,KEY);
>>    y1=RROUND(op1,op0,op3,op2,KEY);
>>    y2=RROUND(op2,op1,op0,op3,KEY);
>>    y3=RROUND(op3,op2,op1,op0,KEY);
>>
>>    turns = turns>>1;
>>    turns --;
>>    if (turns > 0)
>>    {
>>        do
>>        {
>>            y4=RROUND(y0,y3,y2,y1,KEY);
>>            y5=FROUND(y1,y0,y3,y2,KEY);
>>            y6=FROUND(y2,y1,y0,y3,KEY);
>>            y7=FROUND(y3,y2,y1,y0,KEY);
>>            y0=FROUND(y4,y7,y6,y5,KEY);
>>            y1=FROUND(y5,y4,y7,y6,KEY);
>>            y2=FROUND(y6,y5,y4,y7,KEY);
>>            y3=FROUND(y7,y6,y5,y4,KEY);
>>
>>        } while (--turns > 0);
>>    }
>>
>>    output[0]=LE(
>>                (RSBOX[ (y0>>24) &0xff]&0xff000000) ^
>>                (RSBOX[ (y3>>16) &0xff]&0xff0000) ^
>>                (RSBOX[ (y2>> 8) &0xff]&0xff00) ^
>>                (RSBOX[ (y1)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>
>>    output[1]=LE(
>>                (SBOX[ (y1>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y0>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y3>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y2)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>
>>    output[2]=LE(
>>                (SBOX[ (y2>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y1>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y0>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y3)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>    output[3]=LE(
>>                (SBOX[ (y3>>24) &0xff]&0xff000000) ^
>>                (SBOX[ (y2>>16) &0xff]&0xff0000) ^
>>                (SBOX[ (y1>> 8) &0xff]&0xff00) ^
>>                (SBOX[ (y0)     &0xff]&0xff) ^
>>                (*KEY++)
>>                );
>>    }
>> }
>>
>> _______________________________________________
>> Red5devs mailing list
>> Red5devs at osflash.org
>> http://osflash.org/mailman/listinfo/red5devs_osflash.org
>>
>
>
>
> --
> http://gregoire.org/
> http://code.google.com/p/red5/
> http://code.google.com/p/blue5/
>
> _______________________________________________
> Red5devs mailing list
> Red5devs at osflash.org
> http://osflash.org/mailman/listinfo/red5devs_osflash.org
>
>



-- 
http://www.xuggle.com/
xu‧ggle (zŭ' gl) v. To freely encode, decode, and experience audio and video.

Use Xuggle to get the power of FFmpeg in Java.


More information about the Red5devs mailing list