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