MSC-第四题

整理资料,发现上次MSC第四题没爆,那就爆一下吧。

-----------------------------------------------------------------------

0x01 脱壳:

脱壳方法差不多,不过脱壳出来直接baksmali发现有错误,是StubRuntimeException annotation有误。

既然是StubRuntimeException有问题,那么直接赋值一个脱壳之前的StubRuntimeException.smali过来。重建dex成功。

0x02 分析:

从mann入口,btn设置e方法:

public void onClick(View arg8) {
        bKn.b(bKn.a());//垃圾方法
        this.b.b.setEnabled(false);
        try {
            this.b.a.setText("");
        }
        catch(Exception v0) {
            goto label_26;
        }

        try {
            this.b.c.setText(2130968577);  // Tv赋值btn
        }
        catch(Exception v0) {
            try {
                new Timer().schedule(new f(this, this.a.getText().toString()), 2000);//开始检测。
            }
            catch(Exception v0) {
            label_26:
                throw new RuntimeException();
            }
        }
    }

public void run() {
        bKn.b(bKn.a());
        try {
            if(Build$VERSION.SDK_INT >= 10) {
                if(!Debug.isDebuggerConnected()) {  //检测调试状态,直接patch
                    goto label_13;
                }

                Main.a(this.b.b).sendEmptyMessage(1);
            }
            else {
            label_13:
                ali$a.M$j(this.a.getBytes("utf-8"), 48, Main.a(this.b.b));  //根据参数,猜测其直接发送message返回结果。
            }

            return;
        }
        catch(Exception v0) {
            throw new RuntimeException();
        }
    }

动态跟踪M$j方法,发现其通过load pc 跳转到:0x80C562A0,真正入口点。

代码也跟之前写的第四题混淆类似。

....

跟踪发现其反射调用bh的a方法:

    public static byte[] a(byte[] arg4, int arg5) {  // 直接传入参数
        bKn.b(bKn.a());
        int v0 = arg5 + 1;
        int v2 = v0 + 1;
        int v1 = v2 - 1;
        byte[] v0_1 = x.a(p.a(cC.a(cd.a(arg4, arg5), v0), v2), v1);
        v2 = v1 - 1;  // v2 = arg5
        v0_1 = ali$a.M$d(v0_1, v1);  // v1 = arg5 + 1
        v1 = v2 + 1;
        v0_1 = x.a(aS.a(v0_1, v2), v1);  //  // v1 = arg5 + 1
        v2 = v1 + 1;
        return cC.a(cd.a(ali$a.M$z(v0_1, v1), v2), v2 + 1);
    }

跟踪M$d方法,同样混淆,其结果是:arg2[3] += 8;

之后跟踪M$z,发现其根本修改byte[]数据,仅仅跟一个"aJTCZnf6NyBPYJfbrBuLu0wOhRFbPtvqpYjiby5J81M=" 比较,然后设置了一个变量的值。

猜测即为返回值。故直接全速运行,得到正确结果,证明了猜想。 cd.a和cC.a方法根本没用。

编写解码算法,得到结果:alibaba2345ba


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值