能力值:
( LV5,RANK:75 )
|
-
-
2 楼
void Keygen()
{
LONG U[5]; // 逆向过程是算数右移,所以必须是有符号数
ULONG P[5];
PUCHAR c = (PUCHAR)P;
UCHAR mm[28] = {0};
ULONG i;
ULONG j = 0;
UserName(U);
P[0] = U[2] * 2 + U[3];
P[1] = U[2] * 3 - U[4];
P[2] = U[0] * 2 + U[1];
P[3] = U[2] + U[3];
P[4] = U[0] + U[1];
for (i = 0; i < 20; i += 3)
{
mm[j++] = c[i] >> 2;
mm[j++] = ((c[i] & 3) << 4) + (c[i+1] >> 4);
mm[j++] = ((c[i+1] & 0xF) << 2) + ((c[i+2] & 0xC0) >> 6);
mm[j++] = c[i+2] & 0x3F;
}
for (i = 0; i < 27; i++)
{
mm[i] = sample_str[mm[i]];
}
mm[i] = 0;
printf("Your Key : %s\n", mm);
}
|
能力值:
(RANK:350 )
|
-
-
3 楼
建议把附件上传一份。
|
能力值:
( LV5,RANK:75 )
|
-
-
4 楼
已上传IDB文件
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
感谢分享,版区有你更精彩!
|
能力值:
( LV5,RANK:70 )
|
-
-
6 楼
我已经达到标准。
|
能力值:
( LV5,RANK:70 )
|
-
-
7 楼
*p1++ = (p[0]<<2) + ((p[1] >> 4) & 3);
*p1++ = (p[1] << 4) ^ ((p[2] >> 2) & 0xF);
*p1++ = (p[2] << 6) + p[3];
这个部分我也推到出来了,但是,你个算法的逆运算我该怎么写呢?对照着汇编反着写一回?还是怎么弄,就是这里卡着我啦
|
能力值:
( LV5,RANK:75 )
|
-
-
8 楼
[QUOTE=daowang;1421218]*p1++ = (p[0]<<2) + ((p[1] >> 4) & 3);
*p1++ = (p[1] << 4) ^ ((p[2] >> 2) & 0xF);
*p1++ = (p[2] << 6) + p[3];
这个部分我也推到出来了,但是,你...[/QUOTE]
看2楼Keygen.
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
这题是啥?给程序然后逆向出源码吗?
|
能力值:
( LV5,RANK:70 )
|
-
-
10 楼
为什么会这样,我就是不知道怎么弄成那样的呀,完全不是加密算法的,逆算法
|
能力值:
( LV5,RANK:70 )
|
-
-
11 楼
我知道了,存在一个位数丢失问题,逆向时候还是没有吧算法看懂啊
|
能力值:
( LV5,RANK:75 )
|
-
-
12 楼
是啊,在对密码字符从sample_str里取index的时候,由于sample_str只有0x40个,刚好用6个2进制位表示,也就是这个转换后的值只有6个bit是有效的,最高位2bit始终为0
|
|
|