能力值:
( LV2,RANK:10 )
|
-
-
2 楼
逆向方法暂且不知,不过因为计算量小,用穷举的方法即可,以你的例子为例,只要几秒就可求得。代码如下,希望对你有帮助(此代码还可优化,毕竟tmp变量不必同时求出):
keygen
input 1b 48 44 34
output 14 43 a5 c0
//keygen.c
/******************************************/
#include <stdio.h>
main()
{
unsigned int sn1,sn2,sn3,sn4,m1,m2,m3,m4,tmp1,tmp2,tmp3,tmp4;
scanf("%x %x %x %x",&m1,&m2,&m3,&m4);
for(sn1=0x0;sn1<=0xff;sn1++){
for(sn2=0x0;sn2<=0xff;sn2++){
for(sn3=0x0;sn3<=0xff;sn3++){
for(sn4=0x0;sn4<=0xff;sn4++){
tmp1=(sn1&0xc0)+((sn2&0xc0)>>2)+((sn3&0xc0)>>4)+((sn4&0xc0)>>6);
tmp2=((sn1&0x30)<<2)+(sn2&0x30)+((sn3&0x30)>>2)+((sn4&0x30)>>4);
tmp3=((sn1&0x0c)<<4)+((sn2&0x0c)<<2)+(sn3&0x0c)+((sn4&0x0c)>>2);
tmp4=((sn1&0x03)<<6)+((sn2&0x03)<<4)+((sn3&0x03)<<2)+(sn4&0x03);
if((tmp1==m1)&&(tmp2==m2)&&(tmp3==m3)&&(tmp4==m4)){
printf("%02x %02x %02x %02x",sn1,sn2,sn3,sn4);
return 0;
}
}
}
}
}
}
/******************************************/
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
格式都没了:(
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
for your convenience
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
考虑明白and得作用,还有0xc0 0x30 0x0c 0x03的二进制表示为
11000000 00110000 00001100 00000011就知道怎么逆向了
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
光顾着求逆,都忘了可以穷举了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
14 43 A5 C0 ==(4进制)=〉0110 1003 2211 3000
==(加密)=〉
0123 1020 1010 0310 ==(16进制)=〉1B 48 44 34
/////////////////////////////////////////
加密过程
0110 ----〉 0123
1003 ----〉 1020
2211 ----〉 1010
3000 ----〉 0310
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
解密算法和加密算法是同一个算法
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
:) RIGHT!
急着得到答案,方法一般不是太好:D
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
n0n1inear兄,你这段代码是C的,C我只懂一点,这段代码的计算过程是怎样的?第一次运算时sn1、sn2、sn3、sn4各是什么值?第二次运算又是什么值?第三次?请指点。
for(sn1=0x0;sn1<=0xff;sn1++){
for(sn2=0x0;sn2<=0xff;sn2++){
for(sn3=0x0;sn3<=0xff;sn3++){
for(sn4=0x0;sn4<=0xff;sn4++){
tmp1=(sn1&0xc0)+((sn2&0xc0)>>2)+((sn3&0xc0)>>4)+((sn4&0xc0)>>6);
tmp2=((sn1&0x30)<<2)+(sn2&0x30)+((sn3&0x30)>>2)+((sn4&0x30)>>4);
tmp3=((sn1&0x0c)<<4)+((sn2&0x0c)<<2)+(sn3&0x0c)+((sn4&0x0c)>>2);
tmp4=((sn1&0x03)<<6)+((sn2&0x03)<<4)+((sn3&0x03)<<2)+(sn4&0x03);
if((tmp1==m1)&&(tmp2==m2)&&(tmp3==m3)&&(tmp4==m4)){
printf("%02x %02x %02x %02x",sn1,sn2,sn3,sn4);
多谢各位帮忙, chaolumen86老兄我看懂如何求逆了。多谢了。
|
|
|