一道爆破题,我不理解为什么不把这题放在第二个
ida打开
先对输入做了分割,分成了三部分
看到下面对中间部分做了校验,得到第一部分KCTF
剩下两部分都用到了随机数,随机数的种子是五位,并且都是数字
判断正确的条件是,循环执行20次,每次rand()都要等于v7,下面同理,直接给出脚本
#include<stdio.h> #include<iostream> #include <stdlib.h> #include<windows.h> using namespace std; int dword_A2F050[20] = { 0x00002BB6, 0x00006B5A, 0x000003D4, 0x0000152B, 0x00006E04, 0x0000254C, 0x000040AE, 0x000056CA, 0x000017E1, 0x000055C7, 0x00003641, 0x00002D3C, 0x00000A41, 0x00004BC5, 0x00006233, 0x00001FE7, 0x00006E05, 0x00000F6E, 0x00006398, 0x00006AD7 }; int dword_A2F000[20] = { 0x00003BFC, 0x00002173, 0x000025BB, 0x0000380B, 0x00002C13, 0x000075BE, 0x00007366, 0x000046A3, 0x000013C1, 0x0000159B, 0x00005B5F, 0x0000534F, 0x00004E37, 0x00003A04, 0x00001301, 0x00005D0C, 0x00004155, 0x000048E9, 0x000061D2, 0x00006158 }; int main() { DWORD x = 0; for(int i = 0;i <= 9;i++) { for(int i1 = 0;i1 <= 9;i1++) { for(int i2 = 0;i2 <= 9;i2++) { for(int i3 = 0;i3 <= 9;i3++) { for(int i4 = 0;i4 <= 9;i4++) { x = i4 + (i3 * 10) + (i2*100) + (i1 * 1000) + (i*10000); srand(x); int times = 0; while (rand()== dword_A2F000[times]) { times += 1; if (times == 20){ printf("%d,%d,%d,%d,%d\n",i,i1,i2,i3,i4); } } } } } } } return 0; }
标签:20,病疫,int,KCTF,dword,include,先兆 From: https://www.cnblogs.com/polang19/p/16936671.html