首页 > 其他 > 详细

【攻防世界】对于parallel-comparator-200的理解的感想

时间:2020-04-18 18:07:14      阅读:202      评论:0      收藏:0      [点我收藏+]

这是一道代码审计的题

pthread.h库函数涉及到UNIX内核了,一些关于线程的函数现在还读不太懂。但是不妨碍我们做题。

技术分享图片

主函数告诉我们输入flag到user_string函数中。然后is_ok是函数high_optimized_parallel_comparsion的返回值。我们要做的是让这个函数的返回值为1。

?

进入函数high_optimized_parallel_comparsion:

技术分享图片

函数的一部分是在告诉我们:

声明了两个变量:initialization_number和first_letter,这两个变量下面都要用到。

initialization_number是一个大于64的随机数,而first_letter是前面那个数对26取模再加97;

一个数对26取模,取模后的数的范围是0-25,所以我们反推initialization_number的范围是97-122;

?

接下来的pthread_create函数用到了checking函数,我们先往下看。

?

技术分享图片

?

这里声明了result,根据最后的函数我们可以得知,reault必须为0。

?

而恰好checking函数会返回result的值:

技术分享图片

?

将checking函数和high_optimized_parallel_comparsion函数中的pthread_create函数相结合,我们可以分析出来:argument[0] 是first_letter,argument[1] 是数组differences中对应下标的值,而argument[2]就是我们要输入的对应位置的字符。

?

经过一番逆向推导,result的值要保持为0,那么0^任何数都是这个数本身,所以我们有:

?

argument[2] = argument[0] + argument[1]

?

既有:我们输入的字符由first_letter和数组differences组成。

换句话说,我们只要知道first_letter,知道initialization_number是多少,就可以了。

initialization_number的范围我们在上文已经推测出,是一个定值。

经过爆破我们可以得到自己想要的答案:

?

技术分享图片

?

实际上涉及到的进程函数我还是很想搞明白的,但是要搞明白的话就需要了解更多的知识。慢慢来吧,从语言到操作系统到内核,一口可吃不成个胖子。

虽然我想说C语言天下第一,但是不得不承认有些时候C还是比较折磨人的。

【攻防世界】对于parallel-comparator-200的理解的感想

原文:https://www.cnblogs.com/DorinXL/p/12726849.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!