码迷,mamicode.com
首页 > 其他好文 > 详细

2020/5/31 [GKCTF2020]Chelly’s identity

时间:2020-05-31 19:46:11      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:-128   返回   c代码   输入   中间   一段   red   通过   img   

技术图片

这是一道当时比赛没做出来的题,沉迷口袋妖怪。

没做出来是因为看着这花里胡哨的IDA就不想做了【不是】

事后冷静分析一波,挺多干扰的。

技术图片

简单来讲就是输入之后进行处理然后对比。IDA反编译出来的语句太迷了看的我头都大了。

技术图片

↑这个是处理输入位数的,要16位。

技术图片

↑这个是对输入的字符出进行处理,这个for可有点东西,以下是我个人理解:

首先取值i,i的范围是0-v8,v8一开始是0,通过下面的v9语句进行自增,也就是说这个i的范围是数组v12从开始到某个值的一段。(对那个sub_411325其实是返回数组内容)

这个值的判断标准就是中间的 *i < *v11,也就是说,把所有v12数组中小于v11的值取出来累加得到v9,再和v11异或保存。而v11恰好就是我们输入的字符串,也就是flag

那么现在有个问题,我们知道v11是输入,那v12是啥?

寻找最先出现v12的位置,sub_4112F8:

技术图片

那个判断条件是这样的:

技术图片

如果是质数,那么保存。

如此一来我们就可以知道,整个算法是将1-128的质数保存在数组,然后依次遍历每个flag的字符,将比字符小的质数累加的和与该字符异或,最后对比

技术图片

C代码:

技术图片

技术图片

有一说一,我是真的看着这些个sub函数顶的不行,还是见识太少。

?

2020/5/31 [GKCTF2020]Chelly’s identity

标签:-128   返回   c代码   输入   中间   一段   red   通过   img   

原文地址:https://www.cnblogs.com/DorinXL/p/13020550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!