赤座灯里 发表于 2020-5-1 15:25

找自信CM

本帖最后由 赤座灯里 于 2020-5-3 06:54 编辑

成功:

无壳无混淆,请追码(先试试对不对

赤座灯里 发表于 2020-5-4 23:44

本帖最后由 赤座灯里 于 2020-5-5 00:05 编辑

已被枪手师傅干死{:1_909:}

梦游枪手 发表于 2020-5-2 10:44

另外一个so居然藏在图片里了,流弊。不过有混淆,调试的话要等会了{:1_909:}

赤座灯里 发表于 2020-5-1 20:22

本帖最后由 赤座灯里 于 2020-5-1 22:49 编辑

growuphappily 发表于 2020-5-1 17:07
第一次做安卓的CM,如果有什么不对请指正
不知道为啥,模拟器打不开这个apk,提示已停止运行
用Android K ...
这不是爆破题,而且你并没爆破成功哦

growuphappily 发表于 2020-5-1 17:07

第一次做安卓的CM,如果有什么不对请指正
不知道为啥,模拟器打不开这个apk,提示已停止运行
用Android Killer打开这个APK,找到MainActivity$1.smali

把这行删掉

把这行改为goto :cond_0
就可以实现爆破
算法懒得写了{:301_998:},不过好像用了AES,BASE64,MD5(不知道是不是,有个NotMD5Encrypt方法)加密算法
确实是给新手找自信用的{:301_1008:}

cptw 发表于 2020-5-1 17:39

感谢楼主

weikun444 发表于 2020-5-1 17:44

对不懂算法之辈,看看就行了。下面复杂的事就留给大神吧。{:1_909:}

public class MainActivity extends AppCompatActivity
{

    public MainActivity()
    {
      times = 0;
      success = 32;
    }

    public static String NotMD5Encrypt(String s)
    {
      int i;
      int j;
      int k;
      Object obj;
      try
      {
            obj = MessageDigest.getInstance("MD5");
            ((MessageDigest) (obj)).update(s.getBytes());
            s = ((MessageDigest) (obj)).digest();
            obj = new StringBuilder();
            k = s.length;
      }
      // Misplaced declaration of an exception variable
      catch(String s)
      {
            return "";
      }
      i = 0;
          goto _L1
_L5:
      if(j >= 16)
            break MISSING_BLOCK_LABEL_54;
      ((StringBuilder) (obj)).append("0");
      ((StringBuilder) (obj)).append(Integer.toHexString(j));
      i++;
          goto _L1
_L3:
      s = ((StringBuilder) (obj)).toString().substring(8, 24);
      return s;
_L1:
      if(i >= k) goto _L3; else goto _L2
_L2:
      byte byte0 = s;
      j = byte0;
      if(byte0 < 0)
            j = byte0 + 256;
      if(true) goto _L5; else goto _L4
_L4:
    }

    public boolean check()
    {
      int i = times;
      boolean flag = false;
      if(i == 0)
      {
            System.out.println(jniTest(0));
            times = times + 1;
            return false;
      }
      i++;
      times = i;
      if(i >= success)
            flag = true;
      return flag;
    }

    public void fail()
    {
      StringBuilder stringbuilder = new StringBuilder();
      stringbuilder.append("不生气倒计时");
      stringbuilder.append(success - times);
      Toast.makeText(this, stringbuilder.toString(), 0).show();
    }

    public native int jniTest(int i);

    protected void onCreate(Bundle bundle)
    {
      super.onCreate(bundle);
      setContentView(0x7f0a001c);
      try
      {
            bundle = String.format("%s/%s", new Object[] {
                getCacheDir(), "pic.jpg"
            });
            InputStream inputstream = getAssets().open("pic.jpg");
            FileOutputStream fileoutputstream = new FileOutputStream(bundle);
            byte abyte0[] = new byte;
            inputstream.read(abyte0);
            fileoutputstream.write(abyte0);
            inputstream.close();
            fileoutputstream.close();
            System.loadLibrary("c");
            showPic((ImageView)findViewById(0x7f070062), Uri.fromFile(new File(bundle)));
            (new File(bundle)).delete();
      }
      // Misplaced declaration of an exception variable
      catch(Bundle bundle) { }
      findViewById(0x7f070045).setOnClickListener(new android.view.View.OnClickListener() {

            public void onClick(View view)
            {
                if(!check() && times != -1)
                  fail();
                if(times < success)
                  break MISSING_BLOCK_LABEL_186;
                view = Cipher.getInstance("AES/CBC/PKCS5Padding");
                view.init(1, new SecretKeySpec(MainActivity.NotMD5Encrypt(String.valueOf(times)).getBytes(), "AES"), new IvParameterSpec(MainActivity.NotMD5Encrypt(String.valueOf(times)).getBytes()));
                if(Base64.encodeToString(view.doFinal(String.valueOf(success).getBytes()), 0).equals(((EditText)findViewById(0x7f070079)).getText().toString()))
                {
                  success();
                  break MISSING_BLOCK_LABEL_174;
                }
                times = 1;
                fail();
                return;
                view;
                return;
                view;
                return;
                view;
                return;
                view;
                return;
                view;
                return;
                view;
            }

            final MainActivity this$0;

            
            {
                this$0 = MainActivity.this;
                super();
            }
      }
);
    }

    public native void showPic(ImageView imageview, Uri uri);

    public void success()
    {
      Button button = (Button)findViewById(0x7f070045);
      EditText edittext = (EditText)findViewById(0x7f070079);
      button.setEnabled(false);
      edittext.setEnabled(false);
      edittext.setText(0x7f0c001e);
      edittext.setTextColor(0xffff0000);
    }

    public int success;
    public int times;
}

vrvree 发表于 2020-5-1 18:20


前排,精品贴

赤座灯里 发表于 2020-5-1 20:29

本帖最后由 赤座灯里 于 2020-5-1 21:40 编辑

请带上分析和成功截图哦~

赤座灯里 发表于 2020-5-1 20:34

本帖最后由 赤座灯里 于 2020-5-2 06:11 编辑

growuphappily 发表于 2020-5-1 17:07
第一次做安卓的CM,如果有什么不对请指正
不知道为啥,模拟器打不开这个apk,提示已停止运行
用Android K ...
不支持x86模拟器

处女-大龙猫 发表于 2020-5-1 21:31

收藏了, 虽然我连入门都没入, 在复习没时间搞这个{:301_998:}

赤座灯里 发表于 2020-5-1 22:16

本帖最后由 赤座灯里 于 2020-5-1 22:17 编辑

加了一点提示{:1_905:}
页: [1] 2 3 4
查看完整版本: 找自信CM