-
-
[求助]转正了,才发现……
-
发表于:
2012-10-21 10:09
6419
-
转正了,才发现,从10.08开始,只要50KX就可以转……我哭啊。。。
在这转正之际,有个问题要请教一下。
我跟踪一个程序,得到其加密算法反汇编代码如下:
00402653 |> /8A0C3E /mov cl,byte ptr ds:[esi+edi] ; 取密码第一位字符
00402656 |. |8AC1 |mov al,cl ; 密码第一位字符赋值给AL
00402658 |. |8AD1 |mov dl,cl ; 密码第一位字符赋值给DL
0040265A |. |C0E8 02 |shr al,2 ; AL向右移动2位
0040265D |. |24 20 |and al,20 ; AL与上20
0040265F |. |80E2 40 |and dl,40 ; 密码第一位与上40
00402662 |. |0AC2 |or al,dl
00402664 |. |8AD1 |mov dl,cl ; 密码第一位字符赋值给DL
00402666 |. |C0E8 02 |shr al,2 ; AL向右移动2位
00402669 |. |80E2 20 |and dl,20 ; 与20
0040266C |. |0AC2 |or al,dl ; AL或DL
0040266E |. |8AD1 |mov dl,cl ; 密码第一位字符赋值给DL
00402670 |. |D0E8 |shr al,1 ; AL向右移动1位
00402672 |. |80E2 02 |and dl,2 ; DL与上2
00402675 |. |0AC2 |or al,dl ; AL或DL
00402677 |. |8AD1 |mov dl,cl ; 密码第一位字符赋值给DL
00402679 |. |80E2 1C |and dl,1C ; 密码第一位与上1C
0040267C |. |C0E1 05 |shl cl,5 ; CL左移5位
0040267F |. |0AD1 |or dl,cl ; DL与上CL
00402681 |. |D0E8 |shr al,1 ; AL向右移动1位
00402683 |. |C0E2 02 |shl dl,2 ; DL向左移动2位
00402686 |. |0AC2 |or al,dl ; 或起来
00402688 |. |74 03 |je short Tracy.0040268D
0040268A |. |88043E |mov byte ptr ds:[esi+edi],al ; 填充到原来的地方
0040268D |> |46 |inc esi ; 字符标记
0040268E |. |3BF5 |cmp esi,ebp ; 当ESI等于EBP的时候,代表所有的字符都计算完了
00402690 |.^\7C C1 \jl short Tracy.00402653 ; 循环
自己用C描述如下:
n1=pwd>>2;
n1=n1&0X20;
n2=pwd&0X40;
n1=n1|n2;
n2=pwd&0X20;
n1=n1>>2;
n1=n1|n2;
n2=pwd&2;
n1=n1>>1;
n1=n1|n2;
n2=pwd&0X1C;
n3=pwd<<5;
n2=n2|n3;
n1=n1>>1;
n2=n2<<2;
n1=n1|n2;
sprintf(s,"%X",n1);
strncpy(key,s,2);
化简为:
KEY=((((((((pwd>>2)&0X20)|(pwd&0X40))>>2)|(pwd&0X20))>>1)|(pwd&0X2))>>1)|(((pwd&0X1C)|(pwd<<5))<<2);
问题是,怎么写出其解密算法呢?也就是,通过密码得到加密前的源码。
难道用数学的思想,一位位的设为X0,X1,X2,X3?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!