逆向 20190729
#include
//int sub_1238(unsigned __int8 *a1, int a2);
int sub_1238(int a1,int a3,int a2);
int main(){
int a3,b3,c3,d3,e3,f3,g3,h3; //第3位
int a,b,c,d,e,f,g; //求第4位
int a5,b5,c5,d5,e5,f5,g5,j5; //第5位 unsigned char
int a6,b6,c6,d6,e6,f6,g6,i6,j6,h6; //第6位
int e7,f7,g7,j7, a7,b7,c7;
/*======================求第3位============================*/
a3 = 0;
b3 = 63689;
a3 = 35 + a3 * b3;
b3 = b3 * 378551;
for(d3=0;d3<200;d3++){
e3 = a3;
e3 = d3 + e3 * b3;
if(((e3 + (e3 >> 31)) ^ (e3 >> 31)) == 2020122470){
printf("第三位 d3= %d\n",d3);
break;
}
}
/*=====================求第4位=============================*/
a = 1315423911;
b = 121;
c = a^((unsigned int)a >> 2) + 32 * a + b;
// printf("第四位 循环1:%d\n", c );
d=c^((unsigned int)c >> 2) + 32 * c ;
g= d +( d >> 31) ^ (d >> 31);
// printf("d=%d\n",d);
// printf("g=%d\n",g); // g = 1522.......
for(e=0;e<200;e++){
f=c;
f^= ((unsigned int)f >> 2) + 32 * f +e;
// printf("%d\n",((f+ (f>> 31)) ^ (f >> 31)));
if( 1532463978 == ((f+ (f>> 31)) ^ (f >> 31))){
printf("第四位ee %d\n",e);
break;
}
else if(e==199)
printf("没找到");
}
/*=====================求第5位====================*/
a5= 42; // V30[0]
b5= 0; // v14
c5 = 42 + 16 * 0; // c5 v17第一轮
d5 = c5 & 0xF0000000 ? ((c5 & 0xF0000000) >> 24) ^ c5 & 0xFFFFFFF : c5; //d5:v14
for( j5=0;j5<200;j5++){
f5 = c5;
f5 = j5 +16 * d5;
g5 = f5 & 0xF0000000 ? ((f5 & 0xF0000000) >> 24) ^ f5 & 0xFFFFFFF : f5;
if(((g5 + (g5 >> 31)) ^ (g5 >> 31)) == 728)
printf("第5位 j5 = %d\n",j5);
}
/*===================求第6位=======================*/
// int a6,b6,c6,d6,e6,f6,g6,j6,h6,i6,j6;
a6 = 56;
b6 = 56 + 0; //第一轮 v20
c6 = 56 + 0; //第一轮 v21
if (b6 & 0xF0000000){
c6 = ((b6 & 0xF0000000) >> 24) ^ b6;
}
d6 = ((b6 | 0xFFFFFFF) ^ 0xF0000000) & c6;
for(f6=0;f6<200;f6++){ //v15 :f6
g6 = 16 * c6; //v18 : g6
h6 = f6 + g6; // v20
i6 = f6 + g6;// v21
if( h6 & 0xF0000000 ){
i6 = ((h6 & 0xF0000000) >> 24) ^ h6;
}
j6 = ((h6 | 0xFFFFFFF) ^ 0xF0000000) & i6;
if( ((j6 + (j6 >> 31)) ^ (j6 >> 31)) == 960)
printf("第6位 f6= %d\n",f6);
}
/*=====================第7位=============*/
// int e7,f7,g7,j7, a7,b7,c7;
printf("===========================================\n");
for (e7 = 0; e7 <200; e7 ++){
f7 = sub_1238(64,e7,2);
// printf("f7= %d\n",f7);
g7= (f7 + (f7 >> 31)) ^ (f7 >> 31);
if ( g7 == 789320428 ){
printf("第7位 e7 = %d\n",e7);
}
}
}
//int sub_1238(unsigned __int8 *a1, int a2)
int sub_1238(int a1 ,int a3,int a2)
{
int v2; // r7
int v3; // r3
int v4; // r4
int v5; // r2
unsigned int v6; // r6
v2 = 0;
v3 = 0;
v4 = 0;
v5 = 0;
// while ( a2 )
// {
v6 = a1;
v4 += (v6 >> 2) * v4 * v6 + 804604770;
v2 += 32 * v6 * v2 * v6 + 1491913760;
v3 = v3 + 8 * v6 * v3 * v6 - 1774596542;
v5 = v5 + 2 * v6 * v5 * v6 - 1263339326;
//--a2;
v6 = a3;
v4 += (v6 >> 2) * v4 * v6 + 804604770;
v2 += 32 * v6 * v2 * v6 + 1491913760;
v3 = v3 + 8 * v6 * v3 * v6 - 1774596542;
v5 = v5 + 2 * v6 * v5 * v6 - 1263339326;
// a3;
// }
//printf("%d",v4+v5+v3+v2);
return v4 + v5 + v3 + v2;
}