首页
社区
课程
招聘
[原创]第十一题 步步逼近
发表于: 2023-9-29 12:00 4524

[原创]第十一题 步步逼近

xym 活跃值
4
2023-9-29 12:00
4524
1
2
3
根据前期分析得知,所求目标是一个长度小于等于9位的数字,而且值在0x10000x100000000之间。虽然不能明白具体含义,但是暴力求取肯定是可行的。
一开始对随机取值的含义没有理解,把rand全部取返回0,导致走了一会儿弯路,很快就发现固定随机数和真实随机数的执行结果不同。也就是题目求取的是一个满足极大概率的情况,而不是所有概率的情况。
因为题目自带的多线程和锁操作很容易导致多花时间,因此先随便根据ida的反编译结果写了64位的代码放到机器上跑,结果跑了一天半全部跑完都没结果。很可能是自己的代码恢复的不对,因此只要调用原程序跑。

又根据小于1024时的经验和题意,应该是求取满足条件的最小值,因此满足条件的数可能有很多,因此编写代码从最高位开始求取,很快就搜索到符合条件的一个值,然后再递减确认,直到找到最小值,就是答案。


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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 3070
活跃值: (30876)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-10-2 22:11
1
雪    币: 237
活跃值: (56)
能力值: ( LV4,RANK:51 )
在线值:
发帖
回帖
粉丝
3
请问wp里的“从高位开始求取”具体是如何操作的,是常规穷举吗,可否再详细说说思路
2023-10-3 11:50
0
雪    币: 6839
活跃值: (3714)
能力值: ( LV13,RANK:1664 )
在线值:
发帖
回帖
粉丝
4

就是常规穷举。针对具有大片连续结果的穷举,如果从最低bit位一个个搜索,每次都使用i++,显然效率低下,因此可以切换思路。假如我们猜测至少有连续的16个结果,那么可以使用i+=0x10进行搜索,这样我们跳过了最低4个比特的搜索,速度提升了16倍。但是这题并不明确连续结果的长度,但是给定了结果的上限0x100000000,这样我们就可以从最高比特开始搜索,相当于把1、2、3、4、5这几个字高低比特反序,这样搜索的值依次为0x80000000、0x40000000、0xc0000000、0x20000000、0xa0000000.因为这题的连续结果很多,且只有一片,因此这种搜索速度非常快,基本低12比特都跳过了,穷举空间只有20比特左右。我记得搜索出的结果类似是0xXXXXX000,经过验证结果的正确性后,顺着这个数继续二分搜索低位的3个0(12比特)就行了。

最后于 2023-10-7 10:18 被xym编辑 ,原因:
2023-10-7 10:14
0
游客
登录 | 注册 方可回帖
返回
//