专栏名称: 看雪学苑
致力于移动与安全研究的开发者社区,看雪学院(kanxue.com)官方微信公众帐号。
目录
相关文章推荐
四川生态环境  ·  人人讲安全、个个会应急 ·  15 小时前  
看雪学苑  ·  欢迎投递简历~ ·  2 天前  
安徽文明网  ·  徽风皖韵扮靓网络空间 ·  昨天  
FreeBuf  ·  FreeBuf热门电台精选集第六期 ·  5 天前  
嘶吼专业版  ·  勒索软件团伙越来越多地使用Skitnet开发 ... ·  2 天前  
51好读  ›  专栏  ›  看雪学苑

伪随机数总结

看雪学苑  · 公众号  · 互联网安全  · 2025-04-24 17:59

正文

请到「今天看啥」查看全文


, 234 };
char ptr[ 38 ]={ 0x12 , 0x0E , 0x1B , 0x1E , 0x11 , 0x05 , 0x07 , 0x01 , 0x10 , 0x22 , 0x06 , 0x17 , 0x16 , 0x08 , 0x19 , 0x13 , 0x04 , 0x0F , 0x02 , 0x0D , 0x25 , 0x0C , 0x03 , 0x15 , 0x1C , 0x14 , 0x0B , 0x1A , 0x18 , 0x09 , 0x1D , 0x23 , 0x1F , 0x20 , 0x24 , 0x0A , 0x00 , 0x21 };
for (int i = 0 ; i 38; i++) {
v31[i] = v31[i] ^ rand3[i];
//printf("%d ",rand());
//ptr[i] = i;
}

// for (int k = 37; k; --k) {
//  int v18 = rand() % 38;
//  //printf("%d ",v18);
//  int tmp = ptr[k];
//  ptr[k] = ptr[v18];
//  ptr[v18] = tmp;
// }
//printf("\n");
for (int i = 0 ; i < 38 ; i++) {
v28[ptr[i]] = v31[i];
}
for (int i = 0 ; i 38; i++) {
v28[i] = v28[i] ^ rand1[i];
}
for (int i = 0 ; i 38; i++) {
printf ( "%c" , v28[i]& 0xff );
}
printf ( "\n" );

}

return 0 ;
}
//flag{�8bace5989660ee38f1fd980a4b4fbcd}


最后一位爆破即可: flag{78bace5989660ee38f1fd980a4b4fbcd}


还有一种是直接用时间戳,注意要在linux下运行


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

using namespace std;
typedef long long LL;
typedef long double DD;

int main()
{
    srand(((int)time(0))& 0xF0000000);
    char s2[] = "congratulationstoyoucongratulationstoy";
    unsigned char byte_10A0[] = {
    0xBF0xD70x2E0xDA0xEE0xA80x1A0x100x830x730xAC0xF10x060xBE0xAD0x88
    0x040xD70x120xFE0xB50xE20x610xB70x3D0x070x4A0xE80x960xA20x9D0x4D
    0xBC0x810x8C0xE90x880x780x000x00
};
    char rand1[38];
    unsigned int rand2[38],rand3[38];
    int len = strlen(s2);
    cout <"len:" <    for(int i=0;i        {
            rand1[i] = rand();
            // cout <
        }
    for(int i=len-1;i;--i)
        {
            rand2[i] = rand()%(i+1);
            // cout <
        }
    for(int i=0;i        {
            rand3[i] = rand();
        }

    for(int i=0;i        {
            s2[i] ^= byte_10A0[i];
        }

    for(int i=0;i        {
            s2[i] ^= rand3[i];
        }

    int str3[39];
    for(int i=0;i        {
            str3[i] = i;
        }

    for(int i=len-1;i;--i)
        {
            int temp = str3[i];
            str3[i] = str3[rand2[i]];
            str3[rand2[i]] = temp;
        }

    //s2[i]=str2[str3[i]];
    char str2[39] = {0};
    for(int i=0;i        {
            str2[str3[i]] = s2[i];
        }
    for(int i=0;i        {
            str2[i] ^= rand1[i];
        }
    cout <
    return 0//-22 61 13 92
}


个人比赛的时候就用了这种,但是rand2的生成循环写反了,以及rand1和rand3的位置没考虑。


#include 
#include 
#include 
#include
#include
int main() {
    char v28[38];
    for(int i=0;i<1;i++){
        //int a[16]={0,0x10000000,0x20000000,0x30000000,0x40000000,0x50000000,0x60000000,0x70000000,0x80000000,0x90000000,0xa0000000,0xb0000000,0xc0000000,0xd0000000,0xe0000000,0xf0000000};
        srand(((int)time(0))&0xf0000000);
        unsigned char v31[38]={2201846418915620111010123918216152105208222252107174125139214141152087910262157250195233362112392551572311};
        char s[50]="congratulationstoyoucongratulationstoy";
        int ptr[38];
        unsigned int rand1[38];
        unsigned int rand2[38];
        unsigned int rand3[38];
        for(int i =0;i<38;i++){
            rand1[i]=rand();
            //printf("%d ",rand1[i]);
        }
        printf("\n\n");
        for(int i=0;i<37;i++){
            rand2[i]=rand();
            //printf("%d ",rand2[i]);
        }
        printf("\n\n");
        for(int i =0;i<38;i++){
            rand3[i]=rand();
            //printf("%d ",rand3[i]);
        }
        for(int i=0;i<38;i++){
            v31[i]=v31[i]^rand3[i];
            printf("%d ",rand3[i]);
            ptr[i]=i;
        }

        for(int k=37,j=0;k>=0;k--,j++){
            uint32_t t=rand2[j]%(k+1);
            printf("%d ",t);
            char tmp=ptr[k];
            ptr[k]=ptr[t];
            ptr[t]=tmp;
        }

        for(int i=0;i<38;i++){
            v28[ptr[i]]=v31[i];
        }
        for(int i=0;i<38






请到「今天看啥」查看全文