首页
社区
课程
招聘
各位大大帮帮看看算法
发表于: 2005-2-16 19:39 4389

各位大大帮帮看看算法

2005-2-16 19:39
4389
这是Idea算法中的一部分,有点像IDEACipher函数,哪位有空帮我看看?

006672BC <>/$  55              push ebp                                                   ;  IDEACipher 函数??
006672BD   |.  8BEC            mov ebp,esp
006672BF   |.  83C4 F0         add esp,-10
006672C2   |.  53              push ebx
006672C3   |.  56              push esi
006672C4   |.  57              push edi                                                   ;  最后关键
006672C5   |.  8B45 0C         mov eax,dword ptr ss:[ebp+C]                               ;  Data
006672C8   |.  8B5D 14         mov ebx,dword ptr ss:[ebp+14]                              ;  DK
006672CB   |.  8B55 10         mov edx,dword ptr ss:[ebp+10]                              ;  函数返回
006672CE   |.  8955 F4         mov dword ptr ss:[ebp-C],edx
006672D1   |.  C745 F0 0800000>mov dword ptr ss:[ebp-10],8
006672D8   |.  66:8B08         mov cx,word ptr ds:[eax]                                   ;  取待解密串字符
006672DB   |.  83C0 02         add eax,2
006672DE   |.  66:894D FE      mov word ptr ss:[ebp-2],cx                                 ;  待解密串中的Word
006672E2   |.  66:8B30         mov si,word ptr ds:[eax]
006672E5   |.  83C0 02         add eax,2
006672E8   |.  66:8B38         mov di,word ptr ds:[eax]
006672EB   |.  83C0 02         add eax,2
006672EE   |.  66:8B00         mov ax,word ptr ds:[eax]
006672F1   |.  66:8945 FC      mov word ptr ss:[ebp-4],ax                                 ;  第4组
006672F5 <>|>  66:8B13         /mov dx,word ptr ds:[ebx]                                  ;  104位
006672F8   |.  83C3 02         |add ebx,2
006672FB   |.  52              |push edx                                                  ; /Arg3
006672FC   |.  66:8B4D FE      |mov cx,word ptr ss:[ebp-2]                                ; |
00667300   |.  51              |push ecx                                                  ; |Arg2
00667301   |.  8B45 08         |mov eax,dword ptr ss:[ebp+8]                              ; |密钥
00667304   |.  50              |push eax                                                  ; |Arg1
00667305   |.  E8 66FFFFFF     |call <FTaxBase.sub_407270>                                ; \FTaxBase.00667270
0066730A   |.  66:8945 FE      |mov word ptr ss:[ebp-2],ax
0066730E   |.  83C4 0C         |add esp,0C
00667311   |.  66:0333         |add si,word ptr ds:[ebx]
00667314   |.  83C3 02         |add ebx,2
00667317   |.  66:033B         |add di,word ptr ds:[ebx]
0066731A   |.  83C3 02         |add ebx,2
0066731D   |.  66:8B13         |mov dx,word ptr ds:[ebx]
00667320   |.  83C3 02         |add ebx,2
00667323   |.  52              |push edx                                                  ; /Arg3
00667324   |.  66:8B4D FC      |mov cx,word ptr ss:[ebp-4]                                ; |
00667328   |.  51              |push ecx                                                  ; |Arg2
00667329   |.  8B45 08         |mov eax,dword ptr ss:[ebp+8]                              ; |
0066732C   |.  50              |push eax                                                  ; |Arg1
0066732D   |.  E8 3EFFFFFF     |call <FTaxBase.sub_407270>                                ; \FTaxBase.00667270
00667332   |.  66:8945 FC      |mov word ptr ss:[ebp-4],ax
00667336   |.  83C4 0C         |add esp,0C
00667339   |.  66:897D F8      |mov word ptr ss:[ebp-8],di
0066733D   |.  66:337D FE      |xor di,word ptr ss:[ebp-2]
00667341   |.  66:8B13         |mov dx,word ptr ds:[ebx]
00667344   |.  83C3 02         |add ebx,2
00667347   |.  52              |push edx
00667348   |.  57              |push edi
00667349   |.  8B4D 08         |mov ecx,dword ptr ss:[ebp+8]
0066734C   |.  51              |push ecx
0066734D   |.  E8 1EFFFFFF     |call <FTaxBase.sub_407270>
00667352   |.  66:8975 FA      |mov word ptr ss:[ebp-6],si
00667356   |.  8BF8            |mov edi,eax
00667358   |.  66:3375 FC      |xor si,word ptr ss:[ebp-4]
0066735C   |.  83C4 0C         |add esp,0C
0066735F   |.  66:8B03         |mov ax,word ptr ds:[ebx]
00667362   |.  66:03F7         |add si,di
00667365   |.  50              |push eax                                                  ; /Arg3
00667366   |.  56              |push esi                                                  ; |Arg2
00667367   |.  83C3 02         |add ebx,2                                                 ; |
0066736A   |.  8B55 08         |mov edx,dword ptr ss:[ebp+8]                              ; |
0066736D   |.  52              |push edx                                                  ; |Arg1
0066736E   |.  E8 FDFEFFFF     |call <FTaxBase.sub_407270>                                ; \FTaxBase.00667270
00667373   |.  83C4 0C         |add esp,0C
00667376   |.  8BF0            |mov esi,eax
00667378   |.  66:03FE         |add di,si
0066737B   |.  66:3175 FE      |xor word ptr ss:[ebp-2],si
0066737F   |.  66:317D FC      |xor word ptr ss:[ebp-4],di
00667383   |.  66:3375 F8      |xor si,word ptr ss:[ebp-8]
00667387   |.  66:337D FA      |xor di,word ptr ss:[ebp-6]
0066738B   |.  FF4D F0         |dec dword ptr ss:[ebp-10]
0066738E   |.^ 0F85 61FFFFFF   \jnz <FTaxBase.loc_4072F5>
00667394   |.  66:8B0B         mov cx,word ptr ds:[ebx]
00667397   |.  83C3 02         add ebx,2
0066739A   |.  51              push ecx                                                   ; /Arg3
0066739B   |.  66:8B45 FE      mov ax,word ptr ss:[ebp-2]                                 ; |
0066739F   |.  50              push eax                                                   ; |Arg2
006673A0   |.  8B55 08         mov edx,dword ptr ss:[ebp+8]                               ; |
006673A3   |.  52              push edx                                                   ; |Arg1
006673A4   |.  E8 C7FEFFFF     call <FTaxBase.sub_407270>                                 ; \FTaxBase.00667270
006673A9   |.  66:8945 FE      mov word ptr ss:[ebp-2],ax
006673AD   |.  83C4 0C         add esp,0C
006673B0   |.  66:033B         add di,word ptr ds:[ebx]
006673B3   |.  83C3 02         add ebx,2
006673B6   |.  66:0333         add si,word ptr ds:[ebx]
006673B9   |.  83C3 02         add ebx,2
006673BC   |.  66:8B0B         mov cx,word ptr ds:[ebx]
006673BF   |.  51              push ecx                                                   ; /Arg3
006673C0   |.  66:8B45 FC      mov ax,word ptr ss:[ebp-4]                                 ; |
006673C4   |.  50              push eax                                                   ; |Arg2
006673C5   |.  8B55 08         mov edx,dword ptr ss:[ebp+8]                               ; |
006673C8   |.  52              push edx                                                   ; |Arg1
006673C9   |.  E8 A2FEFFFF     call <FTaxBase.sub_407270>                                 ; \FTaxBase.00667270
006673CE   |.  66:8945 FC      mov word ptr ss:[ebp-4],ax
006673D2   |.  83C4 0C         add esp,0C
006673D5   |.  66:8B45 FE      mov ax,word ptr ss:[ebp-2]
006673D9   |.  8B4D F4         mov ecx,dword ptr ss:[ebp-C]
006673DC   |.  66:8901         mov word ptr ds:[ecx],ax
006673DF   |.  8345 F4 02      add dword ptr ss:[ebp-C],2
006673E3   |.  8B55 F4         mov edx,dword ptr ss:[ebp-C]
006673E6   |.  66:893A         mov word ptr ds:[edx],di
006673E9   |.  8345 F4 02      add dword ptr ss:[ebp-C],2
006673ED   |.  8B4D F4         mov ecx,dword ptr ss:[ebp-C]
006673F0   |.  66:8931         mov word ptr ds:[ecx],si
006673F3   |.  8345 F4 02      add dword ptr ss:[ebp-C],2
006673F7   |.  66:8B55 FC      mov dx,word ptr ss:[ebp-4]
006673FB   |.  8B45 F4         mov eax,dword ptr ss:[ebp-C]
006673FE   |.  66:8910         mov word ptr ds:[eax],dx
00667401   |.  5F              pop edi
00667402   |.  5E              pop esi
00667403   |.  5B              pop ebx
00667404   |.  8BE5            mov esp,ebp
00667406   |.  5D              pop ebp
00667407   \.  C3              retn

===============================
00667270 <>/$  55              push ebp
00667271   |.  8BEC            mov ebp,esp
00667273   |.  8B55 10         mov edx,dword ptr ss:[ebp+10]
00667276   |.  8B45 0C         mov eax,dword ptr ss:[ebp+C]
00667279   |.  66:85C0         test ax,ax
0066727C   |.  74 33           je short <FTaxBase.loc_4072B1>
0066727E   |.  66:85D2         test dx,dx
00667281   |.  74 23           je short <FTaxBase.loc_4072A6>
00667283   |.  0FB7C0          movzx eax,ax
00667286   |.  0FB7D2          movzx edx,dx
00667289   |.  F7EA            imul edx
0066728B   |.  8BD0            mov edx,eax
0066728D   |.  C1E8 10         shr eax,10
00667290   |.  66:3BC2         cmp ax,dx
00667293   |.  76 08           jbe short <FTaxBase.loc_40729D>
00667295   |.  8D4A 01         lea ecx,dword ptr ds:[edx+1]
00667298   |.  66:2BC8         sub cx,ax
0066729B   |.  EB 05           jmp short <FTaxBase.loc_4072A2>
0066729D <>|>  8BCA            mov ecx,edx
0066729F   |.  66:2BC8         sub cx,ax
006672A2 <>|>  8BC1            mov eax,ecx
006672A4   |.  5D              pop ebp
006672A5   |.  C3              retn
006672A6 <>|>  66:BA 0100      mov dx,1
006672AA   |.  66:2BD0         sub dx,ax
006672AD   |.  8BC2            mov eax,edx
006672AF   |.  5D              pop ebp
006672B0   |.  C3              retn

006672B1 <>|>  66:B8 0100      mov ax,1
006672B5   |.  66:2BC2         sub ax,dx
006672B8   |.  5D              pop ebp
006672B9   \.  C3              retn
==========================

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
2
看什么?是IDEA的cipher
call <FTaxBase.sub_407270> 是mul function
和下面的源码对比一下
void cip(unsigned IN[5],unsigned OUT[5],unsigned Z[7][10])
{
        unsigned r,x1,x2,x3,x4,kk,t1,t2,a;
        x1=IN[1]; x2=IN[2]; x3=IN[3]; x4=IN[4];
        for(r=1;r<=8;r++)                         /* the round function */
        {
                        /* the group operation on 64-bits block */
        x1 = mul(x1,Z[1][r]);                x4 = mul(x4,Z[4][r]);
        x2 = (x2 + Z[2][r]) & one;        x3 = (x3 + Z[3][r]) & one;
                        /* the function of the MA structure */
        kk = mul(Z[5][r],(x1^x3));
        t1 = mul(Z[6][r],(kk+(x2^x4)) & one);
        t2 = (kk+t1) & one;
                        /* the involutary permutation PI */
        x1 = x1^t1;                x4=x4^t2;
        a  = x2^t2;                x2=x3^t1;        x3=a;
        }

                /* the output transformation */
        OUT[1] = mul(x1,Z[1][round+1]);
        OUT[4] = mul(x4,Z[4][round+1]);
        OUT[2] = (x3+Z[2][round+1]) & one;
        OUT[3] = (x2+Z[3][round+1]) & one;
}

        /* multiplication using the Low-High algorithm */

unsigned mul(unsigned a,unsigned b)
{
        long int p;
        long unsigned q;
                if(a==0) p=maxim-b;
                else
                if(b==0) p=maxim-a;
                else {
                q=(unsigned long)a*(unsigned long)b;
                p=(q & one) - (q>>16);
                if(p<=0) p=p+maxim;
                }
        return (unsigned)(p&one);
}
2005-2-16 21:18
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
3
delphi看起来不象
Procedure Mul(Var x: word; y: word);
Var
  p: DWord;
  t16: word;
Begin
  p := DWord(x) * y;
  If p = 0 Then
    x := 1 - x - y
  Else
  Begin
    x := p Shr 16;
    t16 := p And $FFFF;
    x := t16 - x;
    If (t16 < x) Then
      Inc(x);
  End;
End;

Procedure IDEACipher(Key: PWord; Input, Output: PWordArray);
Var
  x1, x2, x3, x4, s2, s3: word;
  i: integer;
Begin
  x1 := (Input[0] Shr 8) Or (Input[0] Shl 8);
  x2 := (Input[1] Shr 8) Or (Input[1] Shl 8);
  x3 := (Input[2] Shr 8) Or (Input[2] Shl 8);
  x4 := (Input[3] Shr 8) Or (Input[3] Shl 8);
  i := 8;
  Repeat
    Mul(x1, Key^);
    Inc(Key);
    x2 := x2 + Key^;
    Inc(Key);
    x3 := x3 + Key^;
    Inc(Key);
    Mul(x4, Key^);
    Inc(Key);

    s3 := x3;
    x3 := x3 Xor x1;
    Mul(x3, Key^);
    Inc(Key);
    s2 := x2;
    x2 := x2 Xor x4;
    x2 := x2 + x3;
    Mul(x2, Key^);
    Inc(Key);
    x3 := x3 + x2;

    x1 := x1 Xor x2;
    x4 := x4 Xor x3;
    x2 := x2 Xor s3;
    x3 := x3 Xor s2;
    Dec(i);
  Until (i = 0);
  Mul(x1, Key^);
  Inc(Key);
  x3 := x3 + Key^;
  Inc(Key);
  x2 := x2 + Key^;
  Inc(Key);
  Mul(x4, Key^);
  Output[0] := (x1 Shr 8) Or (x1 Shl 8);
  Output[1] := (x3 Shr 8) Or (x3 Shl 8);
  Output[2] := (x2 Shr 8) Or (x2 Shl 8);
  Output[3] := (x4 Shr 8) Or (x4 Shl 8);
End;
2005-2-16 21:29
0
雪    币: 3686
活跃值: (1036)
能力值: (RANK:760 )
在线值:
发帖
回帖
粉丝
4
算法的实现方法多种多样,你编译试试,跟跟看,结果一样否?
2005-2-16 22:04
0
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy
5
不知道要看什么
2005-2-17 07:35
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
6
待解密数据:
01052108  5B 36 7D 88 9A 2A EB 75 01 37 35 88 7B 96 FF 0A    [6}?*膈75??.
01052118  73 DD 8A D0 18 31 D7 18                            s??1?dg

Idea DK:
01052000  D2 3A 26 27 66 66 D1 D3 4C 2C 8C 2C 58 EA F3 32    ?&'ff延L,?X牦2
01052010  B4 92 BF 63 8C 6C 4C 6C 65 C1 7A 79 9A 59 AB F0    ?裤?Lle龙y??
01052020  36 46 16 26 36 DC EA D9 BD CC AD C6 13 1B 3B 0B    6F&6荜俳汰?;
01052030  D9 70 DD F4 ED B4 DF 20 85 89 8D 9D 81 8A 73 6E    兖蒴泶????sn
01052040  7B 76 BA 8B 99 A9 A1 A1 7E F3 38 39 38 3D 5A 6D    {v?? ~?98=Zm
01052050  D0 CC C0 D0 3B 88 32 3D 9D 9B 8E 9C 68 68 69 60    刑佬;?=??hhi`
01052060  70 08 9F 9D 9D 98 4D BD                            p??M仅..

通过上面的IDEACipher函数能解密吗?我的函数解密结果不正确,2楼大大能不能用你的c函数帮忙试一下?
2005-2-17 09:08
0
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy
7
会不会又把字节位置颠倒了?
2005-2-17 09:35
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
8
最初由 wsy 发布
会不会又把字节位置颠倒了?


好像是
2005-2-17 10:23
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
9
搞定,谢谢各位帮助
2005-2-17 10:36
0
雪    币: 397
活跃值: (799)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wsy
10
赫赫,你可是第二次了,哈哈哈
2005-2-18 09:29
0
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
11
最初由 wsy 发布
赫赫,你可是第二次了,哈哈哈


新手,看不惯内存数据,谢谢各位的热情帮助。
2005-2-19 20:13
0
游客
登录 | 注册 方可回帖
返回
//