首页
社区
课程
招聘
[原创]CTF2019参赛题:圆圈舞DancingCircle
发表于: 2019-3-5 14:00 3508

[原创]CTF2019参赛题:圆圈舞DancingCircle

2019-3-5 14:00
3508
圆圈舞DancingCircle

一起跳着圆圈舞啊,跳啊跳啊一二一……算法题+轻度ANTI,祝玩的开心!

简单说一下程序流程,初始化一个数独游戏,使用DancingLinks算法计算出答案,与用户输入值比较,正确后输出“Well Done!”。
具体实现比较绕,希望这种隐藏思路的方式能带给大家一点惊喜。
第一步,对程序二处位置进行数据校验,生成大数Num1。
第二步,用Num1与一固定大数Num2相乘,得到数独初始化数据Data1。
第三步,对Data1进行解析并填入DancingLinks初始化数据DLX,同时用户输入16进制数据转换成10进制数后按位置填入一个九宫格UserData1中,一共80位。数独数据最中间位没有直接提供,根据9个CheckDebug()调试检查函数返回值计算得出,必须为7。
第四步,DLX开始Dancing,同时在DLX的cover()函数中对用户数据UserData1进行转置。转置方法为,把数据交换操作拆分为5个小步骤,每一次cover()执行一个小步骤,执行60次交换后,九宫格数据向右旋转90度。一共执行4次旋转,最后用户数据转了一圈Circle后回到原位置,只是每一位进行了6次数据变换操作,生成用户数据UserData2。一共需要执行5*60*4=1200次操作,也就是说DLX.cover()操作要多于1200次。
第五步,对UserData2查表与DLX运算结果按位比较,得到完全匹配的位数总和cnt,必须为79(比较到中间位时cnt--)。
第六步,用cnt对一个数据进行解码并计算校验值,当校验值正确时输出解码数据,正确时输出“Well Done!”。
最后修改程序,添加花指令和自校验,方法为:
1.在代码中加了一些标志数据,用python把这些标志数据替换成花指令。
2.在代码中加了一个大段数据的空函数,在python中把自校验代码添加花指令后填入这个空函数。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 10902
活跃值: (3288)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
2
初步检测没发现问题,不过加个输入提示看起来更美观,加不加可以自己定
2019-3-5 19:04
0
雪    币: 6051
活跃值: (1441)
能力值: ( LV15,RANK:1473 )
在线值:
发帖
回帖
粉丝
3
不加提示了,为了隐藏意图就不加这些明显的提示了。
我又测试了一下其他系统,一台win7x32正常,一台win10正常,一台VM winXP失败,但是在自己家里的一台win7x64也失败了,原因是反调试检测OpenProcess('csrss.exe')居然不改权限也能成功,比较诡异。
2019-3-6 09:56
0
游客
登录 | 注册 方可回帖
返回
//