[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