-
-
[原创]看雪.深信服 2021 KCTF 春季赛 第五题 华山论剑 WP
-
2021-5-17 01:48
13999
-
[原创]看雪.深信服 2021 KCTF 春季赛 第五题 华山论剑 WP
初识
这是一道不太会的安卓题,使用了规则二,即提供一组可用的用户名及对应注册码。安装后试运行了一下,有正确及错误提示。
按步就班地开始先看看java层的代码。JEB拖入APK后发现,JAVA层的代码比较少,也没什么业务功能,校验按钮的响应函数就是检查输入是否为空,并调用native层函数校验并显示结果,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public void Btn1_Click(View arg6) {
String v2;
String v0 = this.text.getText().toString();
String v1 = this.text2.getText().toString();
if (v0 = = null || (v0.isEmpty())) {
v2 = "name为空" ;
}
else {
if (v1 ! = null) {
if (v1.isEmpty()) {
}
else {
System.loadLibrary( "hello-jni" );
v2 = this.stringFromJNI(v0, v1);
goto label_21;
}
}
v2 = "serial为空" ;
}
label_21:
AlertDialog$Builder v3 = new AlertDialog$Builder(HelloJni.mContext);
v3.setTitle("");
v3.setMessage(((CharSequence)v2));
v3.show();
}
|
于是接着静态看hello-jni
这个native库的代码。结果发现没有JNI_OnLoad
函数,stringFromJNI
函数也好奇怪,如下图。
还有两个比较可疑的导出函数xxxxxxxxxx1
和 xxxxxxxxxx2
,这两个函数的奇怪情况和stringFromJNI
是一样一样的,整个nativ库中就没有大段看起来比较“正常”的代码。这完全超出了我的认知,感觉大脑不够用了,心里好慌乱,不知道作者是用了什么黑科技或黑技术。
尝试
想不明白,直接上手干,默默掏出小米4C手机,动态调试。在stringFromJNI
函数处断下后,尝试单步跟踪,结果没跟住,直接就跑飞了。又尝试了几次,不是跑飞,就是异常,而且最后结果还不对了,本来的恭喜成功
变成了输入错误
。
似乎面临的一切都是未知的,未知中又会诱发出诸多猜想。我猜想,作者应该是通过黑科技隐藏了JNI_OnLoad
函数,JNI_OnLoad
函数会改写代码。于是开始尝试从libart.so
着手,跟踪LoadNativeLibrary
、artFindNativeMethod
函数。一切迹象表明,确实没有JNI_OnLoad
函数,stringFromJNI
函数的入口也是对的,似乎也没有SMC。
于是又回到想方设法跟踪stringFromJNI
函数上来。经过坚持不懈地努力再努力,我终于发现这个native库中arm和thumb代码混得比较多,有些ida解析的不对,又加上可能有断点或单步的临时断点,这样会影响代码执行,轻则跑飞,次重则异常,app重启,再重就是手机黑屏无反应。
不管路途多么坎坷,至少已经上路了,现在至少能看到稍微比较“正常”一点的代码了。
小成
再经过我坚持不懈地努力,我大概能看出这可能是VM代码或者相类似的。找到了几个代码片断,功能有从堆栈读取或写入值,比较,异或操作,还有三个功能固定的函数,整理如下:
1 2 3 4 5 6 7 8 9 10 | 偏移 功能 类型
0xDB0 内存复制 函数
0xDDA unhex的一部分 函数
0xE04 生成 hash ,针对用户名 函数
0x72FC 读取byte VM功能
0x730C 读取dword VM功能
0x71F4 写入byte VM功能
0x7204 写入dword VM功能
0x75AC 比较 VM功能
0x766c 字节异或 VM功能
|
还原代码,我是不可能做的了。也就只会体力劳动下,人肉代码跟踪。
经过我坚持不懈地努力,大致了解了业务流程。粗略的过程是:先取出name和serial,name生成20字节的hash,serial进行unhex,对hash进行RC4加密,最后与unhex的serial比较。
求解
求解是不用求了,一切都让app告诉我们。所以我又一次次人肉代码跟踪,在一次次的app崩溃到系统崩溃中终于迎来了曙光。经过我最后一次坚持不懈地努力,我终于找到了serial:17726331DA0FE737149C8202。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-5-17 13:56
被kanxue编辑
,原因: