正文
,
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];
}
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{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[] = {
0xBF, 0xD7, 0x2E, 0xDA, 0xEE, 0xA8, 0x1A, 0x10, 0x83, 0x73, 0xAC, 0xF1, 0x06, 0xBE, 0xAD, 0x88,
0x04, 0xD7, 0x12, 0xFE, 0xB5, 0xE2, 0x61, 0xB7, 0x3D, 0x07, 0x4A, 0xE8, 0x96, 0xA2, 0x9D, 0x4D,
0xBC, 0x81, 0x8C, 0xE9, 0x88, 0x78, 0x00, 0x00
};
char rand1[38];
unsigned int rand2[38],rand3[38];
int len = strlen(s2);
cout <"len:" < for(int i=0;i {
rand1[i] = rand();
个人比赛的时候就用了这种,但是rand2的生成循环写反了,以及rand1和rand3的位置没考虑。
#include
#include
#include
#include
#include
int main() {
char v28[38];
for(int i=0;i<1;i++){
srand(((int)time(0))&0xf0000000);
unsigned char v31[38]={220, 184, 64, 189, 156, 201, 110, 101, 239, 18, 216, 152, 105, 208, 222, 252, 107, 174, 125, 139, 214, 141, 15, 208, 79, 102, 62, 157, 250, 195, 233, 36, 211, 239, 255, 157, 231, 1};
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("\n\n");
for(int i=0;i<37;i++){
rand2[i]=rand();
}
printf("\n\n");
for(int i =0;i<38;i++){
rand3[i]=rand();
}
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