当前位置: 首页> 娱乐> 影视 > [XYCTF新生赛]-Reverse:ez_rand解析(爆破时间戳,汇编结合反汇编)

[XYCTF新生赛]-Reverse:ez_rand解析(爆破时间戳,汇编结合反汇编)

时间:2025/7/12 10:46:30来源:https://blog.csdn.net/2301_79326813/article/details/139502008 浏览次数:0次

无壳

查看ida

这里是利用time64获取种子,但是time64不是标准的函数,这里是伪随机数,简单地来说就是它不是通过时间来确定种子,所以我们没办法在脚本里直接调用它得到种子,那就意味着我们不知道种子是多少,只能爆破。

完整exp:

#include<iostream>
#include<ctime>
#include<cstdlib>
#include<cmath>
#include<cstring>
using namespace std;int main()
{int seed=0;int v7;unsigned char result[50]={0x5D, 0x0C, 0x6C, 0xEA, 0x46, 0x19, 0xFC, 0x34, 0xB2, 0x62, 0x23, 0x07, 0x62, 0x22, 0x6E, 0xFB, 0xB4, 0xE8, 0xF2, 0xA9, 0x91, 0x12, 0x21, 0x86,0xDB, 0x8E, 0xE9, 0x43,0x4D};char flag[50]={0};for(seed=0;seed<pow(2,16);seed++){srand(seed);for(int i=0;i<29;i++){v7=rand();long long temp=(2155905153*1LL*v7)>>32;flag[i]=result[i]^(v7+((temp&0x80000000)!=0)+(temp>>7));}if(strstr(flag,"flag")||strstr(flag,"XYCTF")){printf("%s %d",flag,seed);}}
}

这里建议用c++写

#补充1:这里的temp是为了减少括号的使用,以免括号过多导致编程错误。

#补充2:这里的result最好用ida的export data出来,这里要注意

前面3个数据0xc7,0x45,0xb0是机器码,是进行操作的,它不是v9数组的字符,后续出来的v9数组字符同理。

#补充3:这里能爆破时间戳是因为从汇编上看返回的种子存在ax寄存器里,而movzx指令只是用0扩展并转移数据用的,那意味着种子就只有16位,也就是两个字节,最大值为2的16次方,可以爆破。

关键字:[XYCTF新生赛]-Reverse:ez_rand解析(爆破时间戳,汇编结合反汇编)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: