首页
社区
课程
招聘
[求助]请教这段android的关键call如何进行标志位破解
2011-10-29 14:07 7033

[求助]请教这段android的关键call如何进行标志位破解

2011-10-29 14:07
7033
目前,我在学习android的破解,下面一段程序,为关键call,①、②、③为同一段程序,经过不同的工具反编译的,但怎么也对应不上,哪位大牛,帮忙看看,如果要对②进行爆破修改,应怎么改?谢谢。


method private static c(Ljava/lang/String;)Z
  .limit stack 4
  .limit locals 17
  0: bipush 21
  2: newarray char
  4: dup
  5: iconst_0
  6: aconst_null
  7: sastore
  8: dup
  9: iconst_1
  10: aconst_null
  11: sastore
  12: dup
  13: iconst_2
  14: aconst_null
  15: sastore
  16: dup
  17: iconst_3
  18: aconst_null
  19: sastore
  20: dup
  21: iconst_4
  22: aconst_null
  23: sastore
  24: dup
  25: iconst_5
  26: aconst_null
  27: sastore
  28: dup
  29: bipush 6
  31: aconst_null
  32: sastore
  33: dup
  34: bipush 7
  36: aconst_null
  37: sastore
  38: dup
  39: bipush 8
  41: aconst_null
  42: sastore
  43: dup
  44: bipush 9
  46: aconst_null
  47: sastore
  48: dup
  49: bipush 10
  51: aconst_null
  52: sastore
  53: dup
  54: bipush 11
  56: aconst_null
  57: sastore
  58: dup
  59: bipush 12
  61: aconst_null
  62: sastore
  63: dup
  64: bipush 13
  66: aconst_null
  67: sastore
  68: dup
  69: bipush 14
  71: aconst_null
  72: sastore
  73: dup
  74: bipush 15
  76: aconst_null
  77: sastore
  78: dup
  79: bipush 16
  81: aconst_null
  82: sastore
  83: dup
  84: bipush 17
  86: aconst_null
  87: sastore
  88: dup
  89: bipush 18
  91: aconst_null
  92: sastore
  93: dup
  94: bipush 19
  96: aconst_null
  97: sastore
  98: dup
  99: bipush 20
  101: aconst_null
  102: sastore
  103: astore_1
  104: bipush 10
  106: newarray int
  108: astore_2
  109: aload_0
  110: invokevirtual java/lang/String/length()I
  113: bipush 8
  115: if_icmplt Label141
  118: aload_0
  119: invokevirtual java/lang/String/length()I
  122: bipush 21
  124: if_icmpgt Label141
  127: iconst_0
  128: istore_3
Label129:
  129: aload_0
  130: invokevirtual java/lang/String/length()I
  133: istore 4
  135: iload_3
  136: iload 4
  138: if_icmplt Label221
Label141:
  141: aload_2
  142: iconst_0
  143: iaload
  144: iconst_5
  145: if_icmpge Label215
  148: aload_2
  149: iconst_1
  150: iaload
  151: iconst_5
  152: if_icmpge Label215
  155: aload_2
  156: iconst_2
  157: iaload
  158: iconst_5
  159: if_icmpge Label215
  162: aload_2
  163: iconst_3
  164: iaload
  165: iconst_5
  166: if_icmpge Label215
  169: aload_2
  170: iconst_4
  171: iaload
  172: iconst_5
  173: if_icmpge Label215
  176: aload_2
  177: iconst_5
  178: iaload
  179: iconst_5
  180: if_icmpge Label215
  183: aload_2
  184: bipush 6
  186: iaload
  187: iconst_5
  188: if_icmpge Label215
  191: aload_2
  192: bipush 7
  194: iaload
  195: iconst_5
  196: if_icmpge Label215
  199: aload_2
  200: bipush 8
  202: iaload
  203: iconst_5
  204: if_icmpge Label215
  207: aload_2
  208: bipush 9
  210: iaload
  211: iconst_5
  212: if_icmplt Label448
Label215:
  215: iconst_1
  216: istore 5
Label218:
  218: iload 5
  220: ireturn
Label221:
  221: aload_0
  222: iload_3
  223: invokevirtual java/lang/String/charAt(I)C
  226: istore 6
  228: aload_1
  229: iload_3
  230: iload 6
  232: castore
  233: aload_1
  234: iload_3
  235: caload
  236: bipush 48
  238: if_icmpne Label253
  241: aload_2
  242: iconst_0
  243: iaload
  244: iconst_1
  245: iadd
  246: istore 7
  248: aload_2
  249: iconst_0
  250: iload 7
  252: iastore
Label253:
  253: aload_1
  254: iload_3
  255: caload
  256: bipush 49
  258: if_icmpne Label273
  261: aload_2
  262: iconst_1
  263: iaload
  264: iconst_1
  265: iadd
  266: istore 8
  268: aload_2
  269: iconst_1
  270: iload 8
  272: iastore
Label273:
  273: aload_1
  274: iload_3
  275: caload
  276: bipush 50
  278: if_icmpne Label293
  281: aload_2
  282: iconst_2
  283: iaload
  284: iconst_1
  285: iadd
  286: istore 9
  288: aload_2
  289: iconst_2
  290: iload 9
  292: iastore
Label293:
  293: aload_1
  294: iload_3
  295: caload
  296: bipush 51
  298: if_icmpne Label313
  301: aload_2
  302: iconst_3
  303: iaload
  304: iconst_1
  305: iadd
  306: istore 10
  308: aload_2
  309: iconst_3
  310: iload 10
  312: iastore
Label313:
  313: aload_1
  314: iload_3
  315: caload
  316: bipush 52
  318: if_icmpne Label333
  321: aload_2
  322: iconst_4
  323: iaload
  324: iconst_1
  325: iadd
  326: istore 11
  328: aload_2
  329: iconst_4
  330: iload 11
  332: iastore
Label333:
  333: aload_1
  334: iload_3
  335: caload
  336: bipush 53
  338: if_icmpne Label353
  341: aload_2
  342: iconst_5
  343: iaload
  344: iconst_1
  345: iadd
  346: istore 12
  348: aload_2
  349: iconst_5
  350: iload 12
  352: iastore
Label353:
  353: aload_1
  354: iload_3
  355: caload
  356: bipush 54
  358: if_icmpne Label375
  361: aload_2
  362: bipush 6
  364: iaload
  365: iconst_1
  366: iadd
  367: istore 13
  369: aload_2
  370: bipush 6
  372: iload 13
  374: iastore
Label375:
  375: aload_1
  376: iload_3
  377: caload
  378: bipush 55
  380: if_icmpne Label397
  383: aload_2
  384: bipush 7
  386: iaload
  387: iconst_1
  388: iadd
  389: istore 14
  391: aload_2
  392: bipush 7
  394: iload 14
  396: iastore
Label397:
  397: aload_1
  398: iload_3
  399: caload
  400: bipush 56
  402: if_icmpne Label419
  405: aload_2
  406: bipush 8
  408: iaload
  409: iconst_1
  410: iadd
  411: istore 15
  413: aload_2
  414: bipush 8
  416: iload 15
  418: iastore
Label419:
  419: aload_1
  420: iload_3
  421: caload
  422: bipush 57
  424: if_icmpne Label441
  427: aload_2
  428: bipush 9
  430: iaload
  431: iconst_1
  432: iadd
  433: istore 16
  435: aload_2
  436: bipush 9
  438: iload 16
  440: iastore
Label441:
  441: iload_3
  442: iconst_1
  443: iadd
  444: istore_3
  445: goto Label129
Label448:
  448: iconst_0
  449: istore 5
  451: goto Label218
.end method

②,
.method private static c(Ljava/lang/String;)Z
    .registers 11

    const/4 v9, 0x2

    const/16 v8, 0x8

    const/4 v7, 0x1

    const/4 v6, 0x0

    const/4 v5, 0x5

    const/16 v0, 0x15

    new-array v0, v0, [C

    fill-array-data v0, :array_e2

    const/16 v1, 0xa

    new-array v1, v1, [I

    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v2

    if-lt v2, v8, :cond_26

    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v2

    const/16 v3, 0x15

    if-gt v2, v3, :cond_26

    move v2, v6

    :goto_20
    invoke-virtual {p0}, Ljava/lang/String;->length()I

    move-result v3

    if-lt v2, v3, :cond_56

    :cond_26
    aget v0, v1, v6

    if-ge v0, v5, :cond_54

    aget v0, v1, v7

    if-ge v0, v5, :cond_54

    aget v0, v1, v9

    if-ge v0, v5, :cond_54

    const/4 v0, 0x3

    aget v0, v1, v0

    if-ge v0, v5, :cond_54

    const/4 v0, 0x4

    aget v0, v1, v0

    if-ge v0, v5, :cond_54

    aget v0, v1, v5

    if-ge v0, v5, :cond_54

    const/4 v0, 0x6

    aget v0, v1, v0

    if-ge v0, v5, :cond_54

    const/4 v0, 0x7

    aget v0, v1, v0

    if-ge v0, v5, :cond_54

    aget v0, v1, v8

    if-ge v0, v5, :cond_54

    const/16 v0, 0x9

    aget v0, v1, v0

    if-lt v0, v5, :cond_de

    :cond_54
    move v0, v7

    :goto_55
    return v0

    :cond_56
    invoke-virtual {p0, v2}, Ljava/lang/String;->charAt(I)C

    move-result v3

    aput-char v3, v0, v2

    aget-char v3, v0, v2

    const/16 v4, 0x30

    if-ne v3, v4, :cond_68

    aget v3, v1, v6

    add-int/lit8 v3, v3, 0x1

    aput v3, v1, v6

    :cond_68
    aget-char v3, v0, v2

    const/16 v4, 0x31

    if-ne v3, v4, :cond_74

    aget v3, v1, v7

    add-int/lit8 v3, v3, 0x1

    aput v3, v1, v7

    :cond_74
    aget-char v3, v0, v2

    const/16 v4, 0x32

    if-ne v3, v4, :cond_80

    aget v3, v1, v9

    add-int/lit8 v3, v3, 0x1

    aput v3, v1, v9

    :cond_80
    aget-char v3, v0, v2

    const/16 v4, 0x33

    if-ne v3, v4, :cond_8d

    const/4 v3, 0x3

    aget v4, v1, v3

    add-int/lit8 v4, v4, 0x1

    aput v4, v1, v3

    :cond_8d
    aget-char v3, v0, v2

    const/16 v4, 0x34

    if-ne v3, v4, :cond_9a

    const/4 v3, 0x4

    aget v4, v1, v3

    add-int/lit8 v4, v4, 0x1

    aput v4, v1, v3

    :cond_9a
    aget-char v3, v0, v2

    const/16 v4, 0x35

    if-ne v3, v4, :cond_a6

    aget v3, v1, v5

    add-int/lit8 v3, v3, 0x1

    aput v3, v1, v5

    :cond_a6
    aget-char v3, v0, v2

    const/16 v4, 0x36

    if-ne v3, v4, :cond_b3

    const/4 v3, 0x6

    aget v4, v1, v3

    add-int/lit8 v4, v4, 0x1

    aput v4, v1, v3

    :cond_b3
    aget-char v3, v0, v2

    const/16 v4, 0x37

    if-ne v3, v4, :cond_c0

    const/4 v3, 0x7

    aget v4, v1, v3

    add-int/lit8 v4, v4, 0x1

    aput v4, v1, v3

    :cond_c0
    aget-char v3, v0, v2

    const/16 v4, 0x38

    if-ne v3, v4, :cond_cc

    aget v3, v1, v8

    add-int/lit8 v3, v3, 0x1

    aput v3, v1, v8

    :cond_cc
    aget-char v3, v0, v2

    const/16 v4, 0x39

    if-ne v3, v4, :cond_da

    const/16 v3, 0x9

    aget v4, v1, v3

    add-int/lit8 v4, v4, 0x1

    aput v4, v1, v3

    :cond_da
    add-int/lit8 v2, v2, 0x1

    goto/16 :goto_20

    :cond_de
    move v0, v6

    goto/16 :goto_55

    nop

    :array_e2
    .array-data 0x2
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
        0x61t 0x0t
    .end array-data
.end method

③,
private static boolean c(String paramString)
  {
    char[] arrayOfChar = { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null };
    int[] arrayOfInt = new int[10];
    int m;
    if ((paramString.length() >= 8) && (paramString.length() <= 21))
    {
      m = 0;
      int n = paramString.length();
      if (m < n);
    }
    else
    {
      if ((arrayOfInt[0] < 5) && (arrayOfInt[1] < 5) && (arrayOfInt[2] < 5) && (arrayOfInt[3] < 5) && (arrayOfInt[4] < 5) && (arrayOfInt[5] < 5) && (arrayOfInt[6] < 5) && (arrayOfInt[7] < 5) && (arrayOfInt[8] < 5) && (arrayOfInt[9] < 5))
        break label448;
    }
    label448: for (int i1 = 1; ; i1 = 0)
    {
      return i1;
      int i2 = paramString.charAt(m);
      arrayOfChar[m] = i2;
      if (arrayOfChar[m] == '0')
      {
        int i3 = arrayOfInt[0] + 1;
        arrayOfInt[0] = i3;
      }
      if (arrayOfChar[m] == '1')
      {
        int i4 = arrayOfInt[1] + 1;
        arrayOfInt[1] = i4;
      }
      if (arrayOfChar[m] == '2')
      {
        int i5 = arrayOfInt[2] + 1;
        arrayOfInt[2] = i5;
      }
      if (arrayOfChar[m] == '3')
      {
        int i6 = arrayOfInt[3] + 1;
        arrayOfInt[3] = i6;
      }
      if (arrayOfChar[m] == '4')
      {
        int i7 = arrayOfInt[4] + 1;
        arrayOfInt[4] = i7;
      }
      if (arrayOfChar[m] == '5')
      {
        int i8 = arrayOfInt[5] + 1;
        arrayOfInt[5] = i8;
      }
      if (arrayOfChar[m] == '6')
      {
        int i9 = arrayOfInt[6] + 1;
        arrayOfInt[6] = i9;
      }
      if (arrayOfChar[m] == '7')
      {
        int i10 = arrayOfInt[7] + 1;
        arrayOfInt[7] = i10;
      }
      if (arrayOfChar[m] == '8')
      {
        int i11 = arrayOfInt[8] + 1;
        arrayOfInt[8] = i11;
      }
      if (arrayOfChar[m] == '9')
      {
        int i12 = arrayOfInt[9] + 1;
        arrayOfInt[9] = i12;
      }
      m += 1;
      break;

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (2)
雪    币: 820
活跃值: (380)
能力值: ( LV12,RANK:310 )
在线值:
发帖
回帖
粉丝
古河 6 2011-10-29 15:51
2
0
是要让这个关键函数返回true吗?
试试把
:goto_55
return v0
改成
:goto_55
const/4 v0, 0x1
return v0
雪    币: 5
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
藏经阁 2011-11-5 13:46
3
0
谢谢朋友,我看看
游客
登录 | 注册 方可回帖
返回