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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章