APK反编译后代码分析(二)

 6,一个continue对应一个back原则(switch while结构)

在这种形式中,一个contiune一定是对应一个back,但一个case不一定只对应一个contiune,也有一个case对应两个或多个contiune(即back).
如以下反编译后的代码:

 

[java]  view plain copy
  1. switch (getId())  
  2.  {  
  3.  case 2131034119:  
  4.  case 2131034120:  
  5.  case 2131034121:  
  6.  case 2131034122:  
  7.  case 2131034123:  
  8.  case 2131034124:  
  9.  case 2131034125:  
  10.  case 2131034126:  
  11.  case 2131034127:  
  12.  case 2131034128:  
  13.  default:  
  14.  case 2131034129:  
  15.  case 2131034130:  
  16.  case 2131034131:  
  17.  case 2131034132:  
  18.  case 2131034133:  
  19.  case 2131034134:  
  20.  case 2131034117:  
  21.  case 2131034118:  
  22.  }  
  23.  while (true)  
  24.  {  
  25.    return;  
  26.    int i = paramVerticalSeekBar.getProgress() * 14;  
  27.    int j = paramVerticalSeekBar.getMax();  
  28.    int k = i / j;  
  29.    if (APPActivity.access$200(this.this$0) == k)  
  30.      continue;  
  31.    int l = APPActivity.access$202(this.this$0, k);  
  32.    int i1 = APPActivity.access$200(this.this$0);  
  33.     continue;  
  34.    int i3 = paramVerticalSeekBar.getProgress() * 14;  
  35.    int i4 = paramVerticalSeekBar.getMax();  
  36.    k = i3 / i4;  
  37.    if (APPActivity.access$400(this.this$0) == k)  
  38.      continue;  
  39.    int i5 = APPActivity.access$402(this.this$0, k);  
  40.    EQ localEQ2 = APPActivity.access$1400(this.this$0);  
  41.    int i6 = APPActivity.access$400(this.this$0);  
  42.    int i7 = localEQ2.sendCommand(2572, i6);  
  43.    continue;  
  44.    int i8 = paramVerticalSeekBar.getProgress() * 14;  
  45.    int i9 = paramVerticalSeekBar.getMax();  
  46.    k = i8 / i9;  
  47.    if (APPActivity.access$500(this.this$0) == k)  
  48.      continue;  
  49.    int i10 = APPActivity.access$502(this.this$0, k);  
  50.    int i11 = APPActivity.access$500(this.this$0);  
  51.    continue;  
  52.    int i13 = paramVerticalSeekBar.getProgress() * 3;  
  53.    int i14 = paramVerticalSeekBar.getMax();  
  54.    k = i13 / i14;  
  55.    if (APPActivity.access$600(this.this$0) == k)  
  56.      continue;  
  57.    int i15 = APPActivity.access$602(this.this$0, k);  
  58.    EQ localEQ4 = APPActivity.access$1400(this.this$0);  
  59.    int i16 = APPActivity.access$600(this.this$0);  
  60.    int i17 = localEQ4.sendCommand(2578, i16);  
  61.    continue;  
  62.    int i18 = paramVerticalSeekBar.getProgress() * 3;  
  63.    int i19 = paramVerticalSeekBar.getMax();  
  64.    k = i18 / i19;  
  65.    if (EQActivity.access$700(this.this$0) == k)  
  66.      continue;  
  67.    int i20 = APPActivity.access$702(this.this$0, k);  
  68.    EQ localEQ5 = APPActivity.access$1400(this.this$0);  
  69.    int i21 = APPActivity.access$700(this.this$0);  
  70.    continue;  
  71.    int i23 = paramVerticalSeekBar.getProgress() * 3;  
  72.    int i24 = paramVerticalSeekBar.getMax();  
  73.    k = i23 / i24;  
  74.    if (APPActivity.access$800(this.this$0) == k)  
  75.      continue;  
  76.    int i25 = APPActivity.access$802(this.this$0, k);  
  77.    EQ localEQ6 = APPActivity.access$1400(this.this$0);  
  78.    int i26 = APPActivity.access$800(this.this$0);  
  79.    continue;  
  80.    int i28 = paramVerticalSeekBar.getProgress() * 14;  
  81.    int i29 = paramVerticalSeekBar.getMax();  
  82.    k = i28 / i29;  
  83.    if (APPActivity.access$900(this.this$0) == k)  
  84.      continue;  
  85.    int i30 = APPActivity.access$902(this.this$0, k);  
  86.    EQ localEQ7 = APPActivity.access$1400(this.this$0);  
  87.    int i31 = APPActivityvity.access$900(this.this$0);  
  88.    continue;  
  89.    int i33 = paramVerticalSeekBar.getProgress() * 3;  
  90.    int i34 = paramVerticalSeekBar.getMax();  
  91.    k = i33 / i34;  
  92.    if (APPActivity.access$1000(this.this$0) == k)  
  93.      continue;  
  94.    int i35 = APPActivity.access$1002(this.this$0, k);  
  95.    EQ localEQ8 = APPActivity.access$1400(this.this$0);  
  96.    int i36 = APPActivity.access$1000(this.this$0);  
  97.  }  


    分析代码:

1),上遍已对这种形式有讲过,一个continue对应一个case,但是你数一数会发现,对不上号,明显case多于contiune,原因是什么呢?其实switch里的default对应的是while中的return,在switch中default以上的case是用不着,是没有用的。

2),如果default上面的case没有用,聪明的你可以可能会问两个问题?
A,default上面的case没有用,为什么还会有呢?原因很简单,因为反编译器也不是全智能的总会有不对的(但是执行逻辑是不会有错),呵呵真正的原因当然不会是这样,你可以自己去分析一下,从整个程序分析就可以得出结论来。
B,那按一个continue对应一个back的原则不是有错吗? 当然没有。一个continue还是对应一个back, 聪明的你一定看懂了,每两个continue中间还有一个if语句,对,没错,你理解是对的,就是在这中间满足条件时就会back,所以就会有一个continue与之相对应。
  所这里每个if + continue + continue的形式对应一个case。
3),恢复原代码结构就变的简单,这里就再敖叙了。


原文:http://blog.csdn.net/ordinaryjoe/article/details/8834059
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值