2019-08-05

逆向 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;
}

你可能感兴趣的:(2019-08-05)