reverse-XNUCA-babyfuscator

Posted on 2016-09-11 21:16  LOMOoO  阅读(473)  评论(0编辑  收藏  举报

上一次线上赛的一道题目

链接:http://pan.baidu.com/s/1qY9ztKC 密码:xlr2

这是一道代码混淆的题目,因为当时还不知道angr这样一个软件,所以我就用了自己的一种思路

本体是对32位密码进行顺次加密运算的(确实是顺次,我验算过),所以我的思路就是修改源代码,进行顺次爆破

 

主要思想是在每一次报错的goto跳转前加上一个唯一的m变量值,并在报错的代码处用n变量来保存上一次的m值,如果m=n则说明,是同一位发生错误,继续爆破该位,若m!=n则说明,上一位正确,已经跳转到下一位,则i++开始爆破下一位。

 

个人觉得方法还比较简单,工作量也比较小,上代码:

// ewwe.cpp : Defines the entry point for the console application.
//


#include<stdio.h>
#include<stdlib.h>
typedef char _BYTE;


void main()
{
    unsigned int v1; // [sp+Ch] [bp-24h]@0
               unsigned __int8 v2; // [sp+14h] [bp-1Ch]@69
              char v3; // [sp+16h] [bp-1Ah]@2
              char v4; // [sp+16h] [bp-1Ah]@32
              char v5; // [sp+16h] [bp-1Ah]@34
              char v6; // [sp+17h] [bp-19h]@8
              char v7; // [sp+18h] [bp-18h]@5
              char v8; // [sp+18h] [bp-18h]@19
              char v9; // [sp+18h] [bp-18h]@44
              char v10; // [sp+19h] [bp-17h]@0
              char v11; // [sp+19h] [bp-17h]@19
              char v12; // [sp+1Ah] [bp-16h]@4
              char v13; // [sp+1Ah] [bp-16h]@21
              char v14; // [sp+1Bh] [bp-15h]@10
              char v15; // [sp+1Bh] [bp-15h]@38
              char v16; // [sp+1Ch] [bp-14h]@44
              char v17; // [sp+1Dh] [bp-13h]@2
              char v18; // [sp+1Dh] [bp-13h]@4
              char v19; // [sp+1Fh] [bp-11h]@0
              char v20; // [sp+1Fh] [bp-11h]@26
    char table[]="abcdefghijklmnopqrstuvwxyz0123456789";
    char a1[]="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
    int i=0;
    int j=0;
    int m;
    int n=1;

    for(j;j<36;j++){
              a1[i]=table[j];
              if ( v1 + 0x717BAD35 > 0xFFFFFFFF )
                goto LABEL_75;
              v17 = ((*(_BYTE *)a1 ^ 0x10) + 10) ^ 0x12;
              v3 = ((((((v17 + 1) ^ 0x1B) + 6) ^ 0x39) + 8) ^ 0x29) + 8;
              if ( ((unsigned __int8)((v3 ^ 0x3B) + 4) ^ 0xA) != 216 )
                {m=1;
                goto LABEL_88;}
              if ( v1 + 4266592168 > 0xFFFFFFFF )
                goto LABEL_15;
                v18 = ((*(_BYTE *)(a1 + 1) ^ 5) + 10) ^ 0x16;
              v12 = ((v18 + 8) ^ 0x2F) + 9;;
              while ( 1 )
              {
                v7 = (v12 ^ 0x32) + 10;
                if ( ((unsigned __int8)((((v7 ^ 0xB) + 6) ^ 0x2B) + 6) ^ 6) != 132 )
                  {m=2;
                goto LABEL_88;}
                if ( v1 + 3722410627 <= 0xFFFFFFFF )
                {
                  v18 = ((*(_BYTE *)(a1 + 2) ^ 0x26) + 10) ^ 0x14;
                  v7 = ((((v18 + 7) ^ 7) + 7) ^ 9) + 5;
                }
                do
                {
                  v6 = v7 ^ 0x3D;
                  if ( ((unsigned __int8)((((v7 ^ 0x3D) + 6) ^ 0x31) + 5) ^ 0xC) != 40 )
                    {m=3;
                goto LABEL_88;}
                  if ( v1 + 2919940649 > 0xFFFFFFFF )
                    goto LABEL_83;
                  v18 = ((*(_BYTE *)(a1 + 3) ^ 0x2F) + 5) ^ 0x29;
                  v14 = (v18 + 10) ^ 0x1F;
                  if ( ((unsigned __int8)(((((((v18 + 10) ^ 0x27) + 6) ^ 0x31) + 9) ^ 0x26) + 8) ^ 0x32) != 12 )
                    {m=4;
                goto LABEL_88;}
                  if ( v1 + 1939742939 > 0xFFFFFFFF )
                    goto LABEL_82;
                  v18 = *(_BYTE *)(a1 + 4) ^ 0x1F;
                  v7 = ((((v18 + 9) ^ 0x21) + 4) ^ 0x27) + 9;
                  if ( ((unsigned __int8)((((v7 ^ 0x2D) + 7) ^ 0x19) + 9) ^ 0x39) != 52 )
                    {m=5;
                goto LABEL_88;}
                }
                while ( v1 + 1190965352 > 0xFFFFFFFF );
                v17 = (*(_BYTE *)(a1 + 5) + 9) ^ 0x26;
                v3 = ((((((v17 + 9) ^ 0x10) + 4) ^ 0x32) + 1) ^ 5) + 1;
            LABEL_15:
                if ( ((unsigned __int8)((v3 ^ 0xA) + 7) ^ 0x12) != 94 )
                  {m=6;
                goto LABEL_88;}
                if ( v1 + 4112981141 > 0xFFFFFFFF )
                  goto LABEL_59;
                if ( ((unsigned __int8)((((((((((*(_BYTE *)(a1 + 6) ^ 0x17) + 6) ^ 0x27) + 1) ^ 0x26) + 6) ^ 1) + 2) ^ 0x16) + 7) ^ 0x1C) != 45 )
                  {m=7;
                goto LABEL_88;}
                if ( v1 + 2939247801 > 0xFFFFFFFF )
                  goto LABEL_31;
                v19 = *(_BYTE *)(a1 + 7) ^ 0x1A;
                v11 = (((((v19 + 8) ^ 9) + 3) ^ 0x25) + 4) ^ 0x30;
                v8 = v11 + 7;
                if ( ((unsigned __int8)((((v11 + 7) ^ 0x24) + 5) ^ 0x2F) ^ 0x2B) != 79 )
                  {m=8;
                goto LABEL_88;}
                if ( v1 + 512742110 <= 0xFFFFFFFF )
                  break;
                while ( 1 )
                {
                  if ( ((unsigned __int8)((((v8 ^ 0x39) + 3) ^ 0x36) + 3) ^ 0x16) != 171 )
                    {m=9;
                goto LABEL_88;}
                  if ( v1 + 3944755611 <= 0xFFFFFFFF )
                  {
                    v19 = *(_BYTE *)(a1 + 28) ^ 0x30;
                    v10 = (((((v19 + 5) ^ 0x11) + 8) ^ 0x13) + 8) ^ 0x21;
            LABEL_75:
                    v2 = (((v10 ^ 0x35) + 4) ^ 0x19) + 7;
                    goto LABEL_76;
                  }
            LABEL_32:
                  v4 = v8 ^ 0x1B;
                  if ( ((unsigned __int8)((v8 ^ 9) + 6) ^ 0x21) != 107 )
                    {m=10;
                goto LABEL_88;}
                  if ( v1 + 2337003254 <= 0xFFFFFFFF )
                  {
                    v18 = ((*(_BYTE *)(a1 + 13) ^ 0x2C) + 9) ^ 0x35;
                    v12 = (v18 + 7) ^ 0x29;
                    v5 = ((((v18 + 7) ^ 0x21) + 8) ^ 0xA) + 6;
                    if ( ((unsigned __int8)((v5 ^ 0x26) + 10) ^ 0x2D) != 81 )
                      {m=11;
                goto LABEL_88;}
                    if ( v1 + 491014096 > 0xFFFFFFFF )
                      goto LABEL_42;
                    v17 = *(_BYTE *)(a1 + 14) ^ 0x1F;
                    v3 = ((((v17 + 5) ^ 0x3A) + 2) ^ 0x27) + 2;
                    if ( ((unsigned __int8)((v3 ^ 0x1B) + 9) ^ 0x16) != 61 )
                      {m=12;
                goto LABEL_88;}
                    if ( v1 + 979202538 > 0xFFFFFFFF )
                      goto LABEL_15;
                    v19 = *(_BYTE *)(a1 + 15) ^ 0x10;
                    v15 = (((v19 + 10) ^ 0x14) + 7) ^ 3;
            LABEL_39:
                    v11 = (v15 + 1) ^ 0x1E;
                    v4 = ((v11 + 9) ^ 0x1A) + 7;
                    if ( ((unsigned __int8)((v4 ^ 0x24) + 2) ^ 3) != 234 )
                      {m=13;
                goto LABEL_88;}
                    if ( v1 + 794401946 <= 0xFFFFFFFF )
                      break;
                  }
                  while ( 1 )
                  {
                    if ( ((unsigned __int8)((v4 ^ 0x2D) + 5) ^ 2) != 237 )
                      {m=14;
                goto LABEL_88;}
                    if ( v1 + 894565626 <= 0xFFFFFFFF )
                    {
                      v18 = ((*(_BYTE *)(a1 + 30) ^ 6) + 9) ^ 0x19;
                      v14 = (v18 + 6) ^ 0x2C;
                      goto LABEL_82;
                    }
            LABEL_69:
                    v2 = ((((v11 + 8) ^ 0x1B) + 3) ^ 0x1E) + 10;
                    if ( (v2 ^ 0x34) != 181 )
                      {m=15;
                goto LABEL_88;}
                    if ( v1 + 604121011 <= 0xFFFFFFFF )
                      break;
            LABEL_76:
                    if ( (v2 ^ 0x12) != 111 )
                      {m=16;
                goto LABEL_88;}
                    if ( v1 + 2158141150 > 0xFFFFFFFF )
                      goto LABEL_49;
                    v19 = *(_BYTE *)(a1 + 29) ^ 0x11;
                    v11 = (((((v19 + 9) ^ 6) + 1) ^ 0x15) + 1) ^ 0x3E;
                    v4 = ((v11 + 9) ^ 0xF) + 9;
                  }
                  v19 = *(_BYTE *)(a1 + 27) ^ 0x36;
                  v11 = (((((v19 + 3) ^ 0x14) + 2) ^ 0x3B) + 7) ^ 0x24;
                  v8 = v11 + 9;
                }
                v18 = ((*(_BYTE *)(a1 + 16) ^ 4) + 3) ^ 7;
                v12 = v18 + 15;
                v5 = ((((v18 + 15) ^ 0x33) + 6) ^ 0x1C) + 7;
            LABEL_42:
                if ( ((unsigned __int8)((v5 ^ 0x2A) + 8) ^ 0x2D) != 98 )
                  {m=17;
                goto LABEL_88;}
                if ( v1 + 3124487324 <= 0xFFFFFFFF )
                {
                  v18 = ((*(_BYTE *)(a1 + 17) ^ 0x20) + 3) ^ 0x1D;
                  v16 = v18 + 9;
                  v9 = ((((v18 + 9) ^ 0x3F) + 8) ^ 8) + 10;
                  if ( ((unsigned __int8)((((v9 ^ 0x23) + 3) ^ 0x11) + 5) ^ 0x28) != 101 )
                   {m=18;
                goto LABEL_88;}
                  if ( v1 + 4270394038 <= 0xFFFFFFFF )
                  {
                    v18 = ((*(_BYTE *)(a1 + 18) ^ 0x22) + 5) ^ 0x12;
                    v14 = (v18 + 8) ^ 0xA;
                    if ( ((unsigned __int8)(((((((v18 + 8) ^ 0x25) + 1) ^ 0x29) + 4) ^ 0x1F) + 4) ^ 0xF) == 72 )
                    {
                      if ( v1 + 38557390 > 0xFFFFFFFF )
                        goto LABEL_52;
                      v19 = *(_BYTE *)(a1 + 19) ^ 0x11;
            LABEL_49:
                      v18 = (v19 + 6) ^ 0x2E;
                      goto LABEL_50;
                    }
                    m=32;
            LABEL_88:
                   if(n==m)
                   {
                       goto label;
                   }
                   else
                   {
                       n=m;
                       i++;
                       j=-1;
                       goto label;

                   }
                  }
                  goto LABEL_62;
                }
              }
              v18 = ((*(_BYTE *)(a1 + 8) ^ 0xC) + 1) ^ 0x34;
              v14 = (v18 + 1) ^ 6;
              v13 = v14 + 8;
              if ( ((unsigned __int8)(((((((v14 + 8) ^ 0x27) + 8) ^ 0x3B) + 2) ^ 0x23) + 3) ^ 0x16) != 76 )
                {m=19;
                goto LABEL_88;}
              if ( v1 + 1600544217 > 0xFFFFFFFF )
                goto LABEL_56;
              v17 = ((*(_BYTE *)(a1 + 9) ^ 0xA) + 4) ^ 0x3D;
              if ( ((unsigned __int8)(((((((((v17 + 10) ^ 0x37) + 1) ^ 0x19) + 1) ^ 0x23) + 9) ^ 0x38) + 4) ^ 0x29) != 67 )
                {m=20;
                goto LABEL_88;}
              if ( v1 + 2943137373 <= 0xFFFFFFFF )
              {
                v20 = *(_BYTE *)(a1 + 10) ^ 0xD;
            LABEL_27:
                v17 = (v20 + 5) ^ 0x3A;
                if ( ((unsigned __int8)(((((((((v17 + 6) ^ 0x28) + 5) ^ 0x1B) + 1) ^ 0x1D) + 7) ^ 0x39) + 3) ^ 0x36) != 82 )
                  {m=21;
                goto LABEL_88;}
                if ( v1 + 2820845284 <= 0xFFFFFFFF )
                {
                  v18 = ((*(_BYTE *)(a1 + 11) ^ 0x20) + 3) ^ 0x3C;
                  if ( ((unsigned __int8)(((((((v18 + 10) ^ 0x3A) + 1) ^ 3) + 11) ^ 0x36) + 7) ^ 0x29) != 209 )
                    {m=22;
                goto LABEL_88;}
                  if ( v1 + 1784190321 > 0xFFFFFFFF )
                    goto LABEL_50;
            LABEL_31:
                  v19 = *(_BYTE *)(a1 + 12) ^ 9;
                  v11 = (((((v19 + 3) ^ 0x2F) + 1) ^ 0x38) + 1) ^ 0x3F;
                  v8 = v11 + 8;
                  goto LABEL_32;
                }
              }
              while ( 1 )
              {
            LABEL_59:
                if ( ((unsigned __int8)(((((((((v17 + 5) ^ 0x3A) + 7) ^ 0x1A) + 7) ^ 0xC) + 2) ^ 0x28) + 5) ^ 0x2A) != 101
                  || v1 + 2621123087 > 0xFFFFFFFF )
                  {m=23;
                goto LABEL_88;}
                v18 = *(_BYTE *)(a1 + 23) ^ 0x23;
                v16 = v18 + 3;
                v9 = ((((v18 + 3) ^ 9) + 3) ^ 0x1B) + 9;
            LABEL_62:
                if ( ((unsigned __int8)((((v9 ^ 0x11) + 2) ^ 0x3A) + 8) ^ 0xC) != 115 )
                  {m=24;
                goto LABEL_88;}
                if ( v1 + 649342143 > 0xFFFFFFFF )
                  break;
                v17 = ((*(_BYTE *)(a1 + 24) ^ 0x29) + 2) ^ 0x18;
                if ( ((unsigned __int8)(((((((v17 + 3) ^ 8) + 5) ^ 0x22) + 10) ^ 0x22) + 5) ^ 0x3A) != 98 )
                 {m=25;
                goto LABEL_88;}
                if ( v1 + 975235895 <= 0xFFFFFFFF )
                {
                  v19 = *(_BYTE *)(a1 + 25) ^ 0x2B;
                  v15 = (((v19 + 1) ^ 0x1F) + 7) ^ 2;
                  if ( ((unsigned __int8)(((((((v15 + 5) ^ 0x20) + 5) ^ 0x37) + 4) ^ 8) + 9) ^ 0x1F) != 129 )
                    {m=26;
                goto LABEL_88;}
                  if ( v1 + 1883000249 <= 0xFFFFFFFF )
                  {
                    v19 = *(_BYTE *)(a1 + 26) ^ 9;
                    v11 = (((((v19 + 3) ^ 0x35) + 3) ^ 0x2E) + 10) ^ 0xE;
                    goto LABEL_69;
                  }
                  goto LABEL_39;
                }
              }
              while ( 1 )
              {
                v14 = v16 ^ 0xB;
                if ( ((unsigned __int8)((((((((v16 ^ 0xB) + 6) ^ 0x24) + 9) ^ 0x1E) + 4) ^ 0x2A) + 5) ^ 0x21) != 98 )
                  {m=27;
                goto LABEL_88;}
            LABEL_52:
                if ( v1 + 188860014 <= 0xFFFFFFFF )
                {
                  v20 = *(_BYTE *)(a1 + 20) ^ 0x3C;
                  if ( ((unsigned __int8)((((((((v20 + 4) ^ 0x27) + 3) ^ 4) + 9) ^ 3) + 4) ^ 0x36) ^ 0x27) != 150 )
                   {m=28;
                goto LABEL_88;}
                  if ( v1 + 3222692128 > 0xFFFFFFFF )
                    goto LABEL_27;
                  v18 = ((*(_BYTE *)(a1 + 21) ^ 0x2C) + 1) ^ 0x28;
                  v14 = (v18 + 5) ^ 0x27;
                  v13 = (v18 + 5) ^ 0x27;
            LABEL_56:
                  if ( ((unsigned __int8)(((((v13 ^ 0x3A) + 7) ^ 1) + 10) ^ 0x2F) ^ 0x1B) != 69 )
                    {m=29;
                goto LABEL_88;}
                  if ( v1 + 1175584883 <= 0xFFFFFFFF )
                  {
                    v17 = ((*(_BYTE *)(a1 + 22) ^ 0x33) + 4) ^ 0x38;
                    goto LABEL_59;
                  }
                }
            LABEL_82:
                v6 = (((v14 + 7) ^ 0xF) + 10) ^ 0x24;
            LABEL_83:
                if ( ((unsigned __int8)(((v6 + 7) ^ 8) + 7) ^ 0x2E) != 187 )
                  {m=30;
                goto LABEL_88;}
                if ( v1 + 4239419545 <= 0xFFFFFFFF )
                {
                  if ( ((unsigned __int8)((((((((((((*(_BYTE *)(a1 + 31) ^ 8) + 7) ^ 0x2C) + 6) ^ 0x3C) + 3) ^ 0x17) + 8) ^ 0x30) + 6) ^ 0x3C)
                                        + 6) ^ 0x17) == 56 )
                  {
                    printf("Congratulations!The flag is %s\n", a1);
                    system("pause");
                  }
                  {m=31;
                goto LABEL_88;}
                }
            LABEL_50:
                v16 = v18 + 7;
              }
        label:continue;
        }

}