2015 0CTF Vezel 100

20150CTF的Mobile第一题,分值100

JEB打开一瞧,没有so,想想0CTF分数动不动好几百的比赛,100分的题目还上so那就太不道德了,关键三段代码如下,非常简单

public void confirm(View v) {
    if("0CTF{" + String.valueOf(this.getSig(this.getPackageName())) + this.getCrc() + "}".equals(
            this.et.getText().toString())) {
        Toast.makeText(((Context)this), "Yes!", 0).show();
    }
    else {
        Toast.makeText(((Context)this), "0ops!", 0).show();
    }
}

private String getCrc() {
    String v1;
    try {
        v1 = String.valueOf(new ZipFile(this.getApplicationContext().getPackageCodePath()).getEntry(
                "classes.dex").getCrc());
    }
    catch(Exception v0) {
        v0.printStackTrace();
    }

    return v1;
}

private int getSig(String packageName) {
    int v4;
    PackageManager v2 = this.getPackageManager();
    int v5 = 64;
    try {
        v4 = v2.getPackageInfo(packageName, v5).signatures[0].toCharsString().hashCode();
    }
    catch(Exception v0) {
        v0.printStackTrace();
    }

    return v4;
}

首先是签名部分,有的同学会认为这里是Dex Header里的SHA1 Signature,不是的,这里计算出来是很长的一大串

如果要算的话,我们写个APP去获取,代码如下

输出

算一下hashCode()

然后获取classes.dex的CRC32值

这个在线算一下就行,连同MD5什么的

这里需要转成十进制

两部分算完合起来就是flag

flag:0ctf{-1839715371189242199}

这样搞有点麻烦,其实动态调试一下就出来了,int要改为string类型,然而我并不会改,一改就崩溃

JEB2有动态调试的功能,我用的有点残

这里有个哥们写了篇使用JEB2调试APK的文章,这么详细的文章可惜百度搜半天搜不出来

  • jeb2.2.7动态调试apk: http://balis0ng.com/post/android/2016-11-27

挺简单一东西整的这么扎心

Last updated