在经过前七道题的厮杀之后,比赛逐渐接近尾声。主人公飞停的江湖之旅也进入关键时刻。
在第八题《众叛亲离》中,共有1400多人围观,最终16支战队挑战成功!依然是mininep、金左手战队率先攻破成功。
出题团队简介
专家点评
赛题设计思路
最近在鼓捣FPGA(想用FPGA模拟一个ECU作为加密芯片):一般FPGA工程师会使用硬件描述语言Verilog或者VHDL对FPGA进行“编程”,之后,再经过厂家提供的FPGA开发工具(Diamond或Radiant)的综合、布局、布线,会产生bit文件或bin文件。
这个题目就是软件模拟FPGA运行:我先写了一个算法产生的bin文件,自己写了一个程序来解析这个bin文件。
程序是完全仿真了一个CPU,包含指令读写、执行、标志位、和jtag调试,等等,算法源码都有,只不过本次的题目都没用到。
为了只有一个exe文件,bin文件我直接用数组的方式放在题目里面,如果后续需要,可以直接让程序加载bin文件。
由于目的不是考算法,而是考对bin文件的解析。所以算法设计得特别简单,可以蒙答案的。如果有需要,可以设计个特别复杂的算法。比如放一个AES128进去。
按照管理大大的要求,换成了方案2,重新上传了exe文件和源码。
SHA256:
185440ec231e13d7ff56fb06a7f0e6726128ebd12e8afc0f7af9bd1810fb189d
前面8个 185440EC231E13D7
公开的 用户名和序列号:
name1:185440EC231E13D7
serial1:4107A2C5AA746C59F1D630E2B29E912C
要破解的用户名和对应的序列号 //用户名是固定 KCTF 不带“”,没错吧
name2:KCTF
serial2:85A4A5E45B3B9227E3FD715E80BC999B
赛题解析
本赛题解析由看雪论坛 |_|sher 给出:
这题 IDA 直接 F5 不了,说 too big funtion。百度解决了以后,经过漫长的反编译:
终于反编译出了看不懂的15000余行代码!
通过字符串勉强找到了输入的地方,但是后面完全看不太懂的样子,看了graph 果然和题目名字非常的贴合。
好了 可以丢进回收站了。
过了不久看见群里居然有人拿了一血了!!!既然能在这么短时间内做出来,说明肯定不是常规解流程的,也就是说程序留有漏洞!
把题目从回收站里拿出来。通过字符串找到有可能是判断的地方:
拿真码断一下可以分析出,当ecx指向的位置为:
00 00 00 01 00 02 00 03 .... 00 07
就可以验证成功:
尝试随便改动一位serial
更改了倒数第三位,可以看到比较的序列只有1位改动了!!!
更改了倒数第四位,比较的序列号还是只有一位改动了!!!
仔细观察可以发现这里像是一个映射表的关系,serial的每一位对应着比较的半个比特。带着这个猜测再多比较了几次,发现确实是这样。
那不就好办了。
只要name输入为KCTF,然后dump出000000.... 11111.... fffff....的比较序列,再把要求的00 00 00 01 00 02 00 03 .... 00 07所对应的找到组合起来,就可以得到正确的serial。
00000001000200030004000500060007
85A4A5E45B3B9227E3FD715E80BC999B
验证正确!!!
这个题居然就这样做出来了,如果是作者是没想到这一点的话,那可真是太可惜了,感觉这题应该是一个非常有难度的题目。
往期解析
1. 看雪·深信服 2021 KCTF 春季赛 | 第二题设计思路及解析
球分享
球点赞
球在看