buuctf刷题记录
2022-1-16
reverse2
扔到IDA64里解析, F5生成伪代码 通过分析得出经过一定的变换后与flag进行比较的
查看flag的值,是{hacking_for_fun} 再返回前面看如何对flag进行变换的,将105、114、49转换成值, 箭头所指的函数功能为,把flag中存在的’i’以及’r’转换成’1’,进而得出正确flag。
2022-1-17
内涵的软件
下载好以后发现是乱码的exe文件,拖到ExeinfoPE里查看信息,
没有加壳,用IDA打开,查看main函数
可以看到跳转到main0函数里 打开main0函数 F5看伪代码, 看到一串字符串,直接尝试,就是了,不得不吐槽一下,这字符串我以为还是加密的呢,然而并不是。
2022-1-18
新年快乐
先放到ExeinfoPE里查看
发现是加壳的
使用脱壳工具脱一下壳
脱壳后再扔到IDA里,F5查看,
代码逻辑如图,比对str1和str2,str2的值直接就给了。就是"HappyNewYear!"。
2022-1-19
XOR
下载下来是个无后缀文件,扔到IDA64里解析,看到main函数,直接F5, 看到是对_b跟global做对比,所以看一下global什么内容,跟进是字符串。
写一个python脚本
s = ['f',0xA,'k',0xC,'w&O.@',0x11,'x',0xD,'Z;U',0x11,'p',0x19,'F',0x1F,'v"M#D',0xE,'g',6,'h',0xF,'G2O',0]for i in range(1,len(s)):if(isinstance(s[i],int)): #如果为int类型,转换为char类型s[i]=chr(s[i])s = ''.join(s) #将列表拼接成字符串 flag = 'f' #flag的第一位不进行异或,所以直接写为ffor i in range(1,len(s)):flag += chr(ord(s[i])^ord(s[i-1])) #异或操作,两次异或会还原print(flag)
2022-1-20
reverse3
下载下来是reverse_3.exe,扔到ExeinfoPE里,没加壳,扔到IDA里,看见了main0,直接F5,
int __cdecl main_0(int argc, const char **argv, const char **envp){size_t v3; // eaxconst char *v4; // eaxsize_t v5; // eaxchar v7; // [esp+0h] [ebp-188h]char v8; // [esp+0h] [ebp-188h]signed int j; // [esp+DCh] [ebp-ACh]int i; // [esp+E8h] [ebp-A0h]signed int v11; // [esp+E8h] [ebp-A0h]char Destination[108]; // [esp+F4h] [ebp-94h] BYREFchar Str[28]; // [esp+160h] [ebp-28h] BYREFchar v14[8]; // [esp+17Ch] [ebp-Ch] BYREFfor ( i = 0; i < 100; ++i ){if ( (unsigned int)i >= 0x64 )j____report_rangecheckfailure();Destination[i] = 0;}sub_41132F("please enter the flag:", v7);sub_411375("%20s", (char)Str);v3 = j_strlen(Str);v4 = (const char *)sub_4110BE(Str, v3, v14);strncpy(Destination, v4, 0x28u);v11 = j_strlen(Destination);for ( j = 0; j < v11; ++j )Destination[j] += j;v5 = j_strlen(Destination);if ( !strncmp(Destination, Str2, v5) )sub_41132F("rigth flag!\n", v8);elsesub_41132F("wrong flag!\n", v8);return 0;}
看出来是输入一个字符串然后经过sub_4110BE函数进行加密,然后再通过一个for循环进行变换,然后与str2进行比较。先看一下str2的值, 看一下sub_4110BE函数,
void *__cdecl sub_4110BE(char *a1, unsigned int a2, int *a3){int v4; // [esp+D4h] [ebp-38h]int v5; // [esp+D4h] [ebp-38h]int v6; // [esp+D4h] [ebp-38h]int v7; // [esp+D4h] [ebp-38h]int i; // [esp+E0h] [ebp-2Ch]unsigned int v9; // [esp+ECh] [ebp-20h]int v10; // [esp+ECh] [ebp-20h]int v11; // [esp+ECh] [ebp-20h]void *v12; // [esp+F8h] [ebp-14h]char *v13; // [esp+104h] [ebp-8h]if ( !a1 || !a2 )return 0;v9 = a2 / 3;if ( (int)(a2 / 3) % 3 )++v9;v10 = 4 * v9;*a3 = v10;v12 = malloc(v10 + 1);if ( !v12 )return 0;j_memset(v12, 0, v10 + 1);v13 = a1;v11 = a2;v4 = 0;while ( v11 > 0 ){byte_41A144[2] = 0;byte_41A144[1] = 0;byte_41A144[0] = 0;for ( i = 0; i < 3 && v11 >= 1; ++i ){byte_41A144[i] = *v13;--v11;++v13;}if ( !i )break;switch ( i ){case 1:*((_BYTE *)v12 + v4) = aAbcdefghijklmn[(int)(unsigned __int8)byte_41A144[0] >> 2];v5 = v4 + 1;*((_BYTE *)v12 + v5) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | (16 * (byte_41A144[0] & 3))];*((_BYTE *)v12 + ++v5) = aAbcdefghijklmn[64];*((_BYTE *)v12 + ++v5) = aAbcdefghijklmn[64];v4 = v5 + 1;break;case 2:*((_BYTE *)v12 + v4) = aAbcdefghijklmn[(int)(unsigned __int8)byte_41A144[0] >> 2];v6 = v4 + 1;*((_BYTE *)v12 + v6) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | (16 * (byte_41A144[0] & 3))];*((_BYTE *)v12 + ++v6) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | (4 * (byte_41A144[1] & 0xF))];*((_BYTE *)v12 + ++v6) = aAbcdefghijklmn[64];v4 = v6 + 1;break;case 3:*((_BYTE *)v12 + v4) = aAbcdefghijklmn[(int)(unsigned __int8)byte_41A144[0] >> 2];v7 = v4 + 1;*((_BYTE *)v12 + v7) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | (16 * (byte_41A144[0] & 3))];*((_BYTE *)v12 + ++v7) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | (4 * (byte_41A144[1] & 0xF))];*((_BYTE *)v12 + ++v7) = aAbcdefghijklmn[byte_41A144[2] & 0x3F];v4 = v7 + 1;break;}}*((_BYTE *)v12 + v4) = 0;return v12;}
看上去是base64加密,写个python解一下。
import base64str = 'e3nifIH9b_C@n@dH'flag = ''for i in range(len(str)):flag += chr(ord(str[i])-i)print(base64.b64decode(flag))
2022-1-21
不一样的flag
下载下来是"不一样的flag.exe",扔到ExeinfoPE,未加壳,扔到IDA里,看一下伪代码,此处贴一下看的别人的伪代码分析, 说实话一开始没看明白,乱七八糟的,后来看了解析发现是个迷宫题,将49跟35转成值,发现是1跟#,大概想了一下,结尾是#,就输出正确,然后就看一下字符串是以#结尾,但是还是不知道是个啥,不过说起来做这种题,也从来没有想过直接打开xxx.exe,直接打开发现是可以操纵上下左右的,看了解析才知道是一个迷宫,将字符串分为5行5列(留个疑问,为什么是5行5列)。
*11110100001010000101111#
贴一下伪代码
int __cdecl __noreturn main(int argc, const char **argv, const char **envp){char v3[29]; // [esp+17h] [ebp-35h] BYREFint v4; // [esp+34h] [ebp-18h]int v5; // [esp+38h] [ebp-14h] BYREFint i; // [esp+3Ch] [ebp-10h]char v7[12]; // [esp+40h] [ebp-Ch] BYREF__main();v4 = 0;strcpy(v3, "*11110100001010000101111#");while ( 1 ){puts("you can choose one action to execute");puts("1 up");puts("2 down");puts("3 left");printf("4 right\n:");scanf("%d", &v5);if ( v5 == 2 ){++*(_DWORD *)&v3[25];}else if ( v5 > 2 ){if ( v5 == 3 ){--v4;}else{if ( v5 != 4 )LABEL_13:exit(1);++v4;}}else{if ( v5 != 1 )goto LABEL_13;--*(_DWORD *)&v3[25];}for ( i = 0; i <= 1; ++i ){if ( *(int *)&v3[4 * i + 25] < 0 || *(int *)&v3[4 * i + 25] > 4 )exit(1);}if ( v7[5 * *(_DWORD *)&v3[25] - 41 + v4] == 49 )exit(1);if ( v7[5 * *(_DWORD *)&v3[25] - 41 + v4] == 35 ){puts("\nok, the order you enter is the flag!");exit(0);}}}
*号为开头,只能走0,走1直接就退出,操纵的顺序即为flag,222441144222。
2022-1-22
SimpleRev
下载下来是SimpleRev,甩到IDA64里进行分析。直接F5, 发现输入d/D就可以进入,紧接着是一个Decry函数,我们对Decry函数进行分析
unsigned __int64 Decry(){char v1; // [rsp+Fh] [rbp-51h]int v2; // [rsp+10h] [rbp-50h]int v3; // [rsp+14h] [rbp-4Ch]int i; // [rsp+18h] [rbp-48h]int v5; // [rsp+1Ch] [rbp-44h]char src[8]; // [rsp+20h] [rbp-40h]__int64 v7; // [rsp+28h] [rbp-38h]int v8; // [rsp+30h] [rbp-30h]__int64 v9; // [rsp+40h] [rbp-20h]__int64 v10; // [rsp+48h] [rbp-18h]int v11; // [rsp+50h] [rbp-10h]unsigned __int64 v12; // [rsp+58h] [rbp-8h]v12 = __readfsqword(0x28u);*(_QWORD *)src = 0x534C43444ELL;v7 = 0LL;v8 = 0;v9 = 0x776F646168LL; //数据在内存中是小端顺序,高位在高地址处,低位在低地址处//故实际的字符顺序应为'0x4e44434c53'转为字符为'NDCLS'v10 = 0LL;v11 = 0;text = join(key3, (const char *)&v9); // 让text等于key3+v9// key3 = "kills"// v9 = "hadow" // 因为小端序存储 // 则text = "killshadow"strcpy(key, key1); // 将key1复制给key// key = "ADSFK"strcat(key, src); // 将src处的字符串拼接到key后// key = "ADSFKNDCLS"v2 = 0;v3 = 0;getchar(); // 获取输入(清空缓冲区?)v5 = strlen(key); // v5 = key的长度 v5 = 10for ( i = 0; i < v5; ++i ){if ( key[v3 % v5] > 64 && key[v3 % v5] <= 90 )// if(key[v3]>64 && key[v3]<=90)// key[v3] = key[v3]+32// :将大写字母转换成小写字母key[i] = key[v3 % v5] + 32; // key = "adsfkndcls"++v3;}printf("Please input your flag:", src);while ( 1 ){v1 = getchar();if ( v1 == '\n' ) // 如果输入的为换行符,则退出break;if ( v1 == ' ' ){++v2; // 如果输入的为空格,则v2加一}else{if ( v1 <= 96 || v1 > 122 ) // 如果输入的v1不为小写字母{if ( v1 > 64 && v1 <= 90 ) // 如果v1为大写字母str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;// 对str2[v2]进行处理(v2为0每次加1)// str2[v2] = (v1-key[v3]+58)%26 + 97// 变换后str2[v2]存放小写字母}else{ // 如果输入的值v1为小写字母str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;// 做同样处理} // 如果不为大小写字母,则不进行处理if ( !(v3 % v5) ) // 如果循环到key的最后一位putchar(' '); // 打印处一个空格++v2;}}if ( !strcmp(text, str2) ) // 如果text和str2存储的相同,则成功// text = "killshadow"puts("Congratulation!\n");elseputs("Try again!\n");return __readfsqword(0x28u) ^ v12;}
其中在处理text时,有一个函数为join,即text = join
&v9);,我们去查看一下
char *__fastcall join(const char *a1, const char *a2){size_t v2; // rbxsize_t v3; // raxchar *dest; // [rsp+18h] [rbp-18h]v2 = strlen(a1); //v2为a1的长度,即key的长度v3 = strlen(a2); //v3为a2的长度,即v9的长度dest = (char *)malloc(v2 + v3 + 1); //动态分配一个能存下key3和v9的空间destif ( !dest )exit(1);strcpy(dest, a1); //将a1的值赋给deststrcat(dest, a2); //将a2的值拼接到destreturn dest; //实则返回a1+a2,即key+v9}
其中对于str2做的处理为
str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;
所以我们要做的就是对于str2进行逆向处理,写出脚本
#第一种 逆推text = 'killshadow' # str2key = 'adsfkndcls'v3 = 0v5 = len(key)n = 0flag = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]for i in range(0, 10):for j in range(0, 10):v1 = (ord(text[j])-97)+26*i+ord(key[v3 % v5])-58if(65 < v1 <= 90) or (v1 >= 97 and v5 <= 122):flag[j] = chr(v1)n = n+1if n == 10:print(''.join(flag))breakv3 = v3 + 1#第二种 暴力字典破解text = 'killshadow' # str2key = 'adsfkndcls'v3 = 0v5 = len(key)dict1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"flag = ""for i in range(0, 10):n = 0for char in dict1:x = (ord(char) - 39 - ord(key[v3 % v5])+97) % 26 + 97if chr(x) == text[i]:n = n + 1if n == 1:print(char, end="")v3 = v3 + 1
2022-1-23
[GXYCTF2019]luck_guy
下载下来是名为luck_guy的文件,扔到IDA里,直接F5,
int __cdecl main(int argc, const char **argv, const char **envp){welcome(argc, argv, envp);puts("_________________");puts("try to patch me and find flag");puts("please input a lucky number");__isoc99_scanf("%d");patch_me(0LL);puts("OK,see you again");return 0;}
可以看到,存在一个patch_me的函数,跟踪
int __fastcall patch_me(int a1){int result; // eaxif ( a1 % 2 == 1 )result = puts("just finished");elseresult = get_flag();return result;}
肯定是get_flag
有用,跟踪
unsigned __int64 get_flag(){unsigned int v0; // eaxint i; // [rsp+4h] [rbp-3Ch]int j; // [rsp+8h] [rbp-38h]__int64 s; // [rsp+10h] [rbp-30h] BYREFchar v5; // [rsp+18h] [rbp-28h]unsigned __int64 v6; // [rsp+38h] [rbp-8h]v6 = __readfsqword(0x28u);v0 = time(0LL); //得到时间srand(v0); //使用时间作为种子生成随机数字for ( i = 0; i <= 4; ++i ){switch ( rand() % 200 ) // 产生1-199之间的随机数{case 1:puts("OK, it's flag:");memset(&s, 0, 0x28uLL);strcat((char *)&s, f1);strcat((char *)&s, &f2);printf("%s", (const char *)&s);break;case 2:printf("Solar not like you");break;case 3:printf("Solar want a girlfriend");break;case 4:s = 0x7F666F6067756369LL;v5 = 0;strcat(&f2, (const char *)&s);break;case 5:for ( j = 0; j <= 7; ++j ){if ( j % 2 == 1 )*(&f2 + j) -= 2;else--*(&f2 + j);}break;default:puts("emmm,you can't find flag 23333");break;}}return __readfsqword(0x28u) ^ v6;}
可以看出来是随机组合,最后得出flag。flag的拼接是在case1里进行的,flag=f1+f2, 可以看到f1=‘GXY{do_not_’,f2的值是由case4进行赋值,将s赋给f2,case5对f2进行了一定的处理,所以正确的运行顺序应该是4->5->1。
写一下脚本
flag = 'GXY{do_not_'f2 = [0x7F, 0x66, 0x6F, 0x60, 0x67, 0x75, 0x63, 0x69][::-1]s = ''for i in range(8):if i % 2 == 1:s = chr(int(f2[i]) - 2)else:s = chr(int(f2[i]) - 1)flag += sprint(flag)
结果是GXY{do_not_hate_me}
flag{do_not_hate_me}
2022-1-24
[ACTF新生赛2020]easyre
下载下来easy_re.exe,扔到ExeinfoPE里分析,发现是加壳的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDO4UC8c-1644421331922)(http://skyofstars.cn/usr/uploads/2021/06/1939646823.png)]
脱一下壳,扔到IDA里,直接F5,
int __cdecl main(int argc, const char **argv, const char **envp){_BYTE v4[12]; // [esp+12h] [ebp-2Eh] BYREF_DWORD v5[3]; // [esp+1Eh] [ebp-22h]_BYTE v6[5]; // [esp+2Ah] [ebp-16h] BYREFint v7; // [esp+2Fh] [ebp-11h]int v8; // [esp+33h] [ebp-Dh]int v9; // [esp+37h] [ebp-9h]char v10; // [esp+3Bh] [ebp-5h]int i; // [esp+3Ch] [ebp-4h]sub_401A10();qmemcpy(v4, "*F'\"N,\"(I?+@", sizeof(v4));printf("Please input:");scanf("%s", v6);if ( v6[0] != 65 || v6[1] != 67 || v6[2] != 84 || v6[3] != 70 || v6[4] != 123 || v10 != 125 )return 0;v5[0] = v7;v5[1] = v8;v5[2] = v9;for ( i = 0; i <= 11; ++i ){if ( v4[i] != byte_402000[*((char *)v5 + i) - 1] )return 0;}printf("You are correct!");return 0;}
根据代码可以看到,flag是由v6+v5+v10组成的,v6为’ACTF{’,v10为’}’,此处主要分析v5,下面有个for循环函数,我们来分析一下。首先i为12位,那么v5应该也为12位,其主要意思是查找字符,从_data_start字符串中查找v4(v4的值在前面有给出),此处v7、v8、v9均为int型变量,可以分别存储4个字符型数据,通过循环在_data_start_中找到v7、v8、v9中存储的12个字符型变量的ASCII码对应的元素,与v4数组进行比较。其中_data_start的下标就是flag的ascll码-1,v4=byte_402000[输入的数组的每一位值-1]。
写一下脚本
key = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"'v4 = "*F'\"N,\"(I?+@"v4_list = []for i in v4:v4_list.append(ord(i))x = []flag = ''for i in v4_list:x.append(key.find(chr(i))+1)for i in x:flag += chr(i)print(flag)
这个地方自行调整,有的要求是写flag{U9X_1S_W6@T?}
2022-1-25
[2019红帽杯]EASYRE
这题太坑了
一开始找到一串base64加密的字符串,解密之后是个网址,被坑了。
后面看了别人的writeup才知道,原来不在那个函数里,在主函数下面的函数里面。
unsigned __int64 sub_400D35(){unsigned __int64 result; // raxunsigned int v1; // [rsp+Ch] [rbp-24h]int i; // [rsp+10h] [rbp-20h]int j; // [rsp+14h] [rbp-1Ch]unsigned int v4; // [rsp+24h] [rbp-Ch]unsigned __int64 v5; // [rsp+28h] [rbp-8h]v5 = __readfsqword(0x28u);v1 = sub_43FD20(0LL) - qword_6CEE38;for ( i = 0; i <= 1233; ++i ){sub_40F790(v1);sub_40FE60();sub_40FE60();v1 = sub_40FE60() ^ 0x98765432;}v4 = v1;if ( ((unsigned __int8)v1 ^ byte_6CC0A0[0]) == 102 && (HIBYTE(v4) ^ (unsigned __int8)byte_6CC0A3) == 103 ) // 关键代码{for ( j = 0; j <= 24; ++j )sub_410E90(byte_6CC0A0[j] ^ *((_BYTE *)&v4 + j % 4));}result = __readfsqword(0x28u) ^ v5;if ( result )sub_444020();return result;}
v4^byte_6CC0A0[0] == ‘f’
v7 = v4
HIBYTE=HIBYTE=(((_BYTE)&
+1))
也就是v4的下一位
byte_6CC0A3 也就是byte_6CC0A0[3]
第一次开始解出来flag开头是flag
可以推测就是判断v4的四位是不是与byte_6CC0A0前四位异或后等于’flag’
然后下面的异或应该是出flag的
写一个脚本:
s = [0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32, 0x45, 0x5B]s1 = 'flag'flag = ''key = ''for i in range(4):key += chr(s[i] ^ ord(s1[i]))for i in range(len(s)):flag += chr(s[i] ^ ord(key[i % 4]))print(flag)
2022-1-26
[ACTF新生赛2020]rome
老规矩,先拖ExeinfoPE,没壳,再扔到IDA里,进到main里,发现有个func函数,进到func函数里,v3-v6是’ACTF{’,大致意思就是分别对大小写字母进行处理,直接暴力破解。
int func(){int result; // eaxint v1[4]; // [esp+14h] [ebp-44h]unsigned __int8 v2; // [esp+24h] [ebp-34h] BYREFunsigned __int8 v3; // [esp+25h] [ebp-33h]unsigned __int8 v4; // [esp+26h] [ebp-32h]unsigned __int8 v5; // [esp+27h] [ebp-31h]unsigned __int8 v6; // [esp+28h] [ebp-30h]int v7; // [esp+29h] [ebp-2Fh]int v8; // [esp+2Dh] [ebp-2Bh]int v9; // [esp+31h] [ebp-27h]int v10; // [esp+35h] [ebp-23h]unsigned __int8 v11; // [esp+39h] [ebp-1Fh]char v12[29]; // [esp+3Bh] [ebp-1Dh] BYREFstrcpy(v12, "Qsw3sj_lz4_Ujw@l");printf("Please input:");scanf("%s", &v2);result = v2;if ( v2 == 65 ){result = v3;if ( v3 == 67 ){result = v4;if ( v4 == 84 ){result = v5;if ( v5 == 70 ){result = v6;if ( v6 == 123 ){result = v11;if ( v11 == 125 ){v1[0] = v7;v1[1] = v8;v1[2] = v9;v1[3] = v10;*(_DWORD *)&v12[17] = 0;while ( *(int *)&v12[17] <= 15 ){if ( *((char *)v1 + *(_DWORD *)&v12[17]) > 64 && *((char *)v1 + *(_DWORD *)&v12[17]) <= 90 )*((_BYTE *)v1 + *(_DWORD *)&v12[17]) = (*((char *)v1 + *(_DWORD *)&v12[17]) - 51) % 26 + 65;if ( *((char *)v1 + *(_DWORD *)&v12[17]) > 96 && *((char *)v1 + *(_DWORD *)&v12[17]) <= 122 )*((_BYTE *)v1 + *(_DWORD *)&v12[17]) = (*((char *)v1 + *(_DWORD *)&v12[17]) - 79) % 26 + 97;++*(_DWORD *)&v12[17];}*(_DWORD *)&v12[17] = 0;while ( *(int *)&v12[17] <= 15 ){result = (unsigned __int8)v12[*(_DWORD *)&v12[17]];if ( *((_BYTE *)v1 + *(_DWORD *)&v12[17]) != (_BYTE)result )return result;++*(_DWORD *)&v12[17];}result = printf("You are correct!");}}}}}}return result;}
写个脚本
key = "Qsw3sj_lz4_Ujw@l"flag = ""for i in range(len(key)):for a in range(128):x = aif 64 < x <= 90:x = (x - 51) % 26 + 65if 96 < a <= 122:x = (x - 79) % 26 + 97if x == ord(key[i]):flag += chr(a)print(flag)
2022-1-27
[WUSTCTF2020]level1
下载下来扔到IDA里,F5看一下伪代码
int __cdecl main(int argc, const char **argv, const char **envp){int i; // [rsp+4h] [rbp-2Ch]FILE *stream; // [rsp+8h] [rbp-28h]char ptr[24]; // [rsp+10h] [rbp-20h] BYREFunsigned __int64 v7; // [rsp+28h] [rbp-8h]v7 = __readfsqword(0x28u);stream = fopen("flag", "r");fread(ptr, 1uLL, 0x14uLL, stream);fclose(stream);for ( i = 1; i <= 19; ++i ){if ( (i & 1) != 0 )printf("%ld\n", (unsigned int)(ptr[i] << i));elseprintf("%ld\n", (unsigned int)(i * ptr[i]));}return 0;}
对下标索引为奇数进行移位,偶数进行乘法。输出的数字在外层的output.txt里。写一下脚本
key = [198, 232, 816, 200, 1536, 300, 6144, 984, 51200, 570, 92160,1200, 565248, 756, 1474560, 800, 6291456, 1782, 65536000]for i in range(19):if (i + 1) & 1:print(chr(key[i] >> (i + 1)), end='')else:print(chr(key[i] // (i + 1)), end='')
2022-1-28
[WUSTCTF2020]level2
下载下来扔到ExeinfoPE里发现有壳, 下用工具去不了壳,于是下载upx,upx -d,脱壳。 扔到IDA里,直接看到flag。
2022-1-29
[GWCTF 2019]xxor
老规矩,先ExeinfoPE,没加壳,扔到IDA里
__int64 __fastcall main(int a1, char **a2, char **a3){int i; // [rsp+8h] [rbp-68h]int j; // [rsp+Ch] [rbp-64h]__int64 v6[6]; // [rsp+10h] [rbp-60h] BYREF__int64 v7[6]; // [rsp+40h] [rbp-30h] BYREFv7[5] = __readfsqword(0x28u);puts("Let us play a game?");puts("you have six chances to input");puts("Come on!");v6[0] = 0LL;v6[1] = 0LL;v6[2] = 0LL;v6[3] = 0LL;v6[4] = 0LL;for ( i = 0; i <= 5; ++i ){printf("%s", "input: ");a2 = (char **)((char *)v6 + 4 * i);__isoc99_scanf("%d", a2);}v7[0] = 0LL;v7[1] = 0LL;v7[2] = 0LL;v7[3] = 0LL;v7[4] = 0LL;for ( j = 0; j <= 2; ++j ){dword_601078 = v6[j];dword_60107C = HIDWORD(v6[j]);a2 = (char **)&unk_601060;sub_400686(&dword_601078, &unk_601060);LODWORD(v7[j]) = dword_601078;HIDWORD(v7[j]) = dword_60107C;}if ( (unsigned int)sub_400770(v7, a2) != 1 ){puts("NO NO NO~ ");exit(0);}puts("Congratulation!\n");puts("You seccess half\n");puts("Do not forget to change input to hex and combine~\n");puts("ByeBye");return 0LL;}
先分析一下main函数,
printf("%s", "input: ");a2 = (char **)((char *)v6 + 4 * i);
v6应该就是输入的6个数,v6的每个元素占4个字节。跟踪v6的行踪,仔细分析与v6有关的加密代码。
dword_601078 = v6[j];dword_60107C = HIDWORD(v6[j]);a2 = (char **)&unk_601060;sub_400686(&dword_601078, &unk_601060);LODWORD(v7[j]) = dword_601078;HIDWORD(v7[j]) = dword_60107C;
dword_601078是取了每个v6元素四个字节中的后两个字节中的值,dword_60107c则是取了每个v6元素四个字节中前两个字节的值(详细去看hidword和lodword的定义)。
这其实有个疑问,问什么dword——601078那一条语句没有lodword函数却依然和有lodword函数的结果相同,查了别人写的WriteUp才知道这是由于dword_601078这个变量只能存储2个字节的数据,因此在读取v6[j]时只能读取其前两个字节,那么效果其实就跟lodword一样了。
其中主要是两个函数,sub_400686和sub_400770
__int64 __fastcall sub_400686(unsigned int *a1, _DWORD *a2){__int64 result; // raxunsigned int v3; // [rsp+1Ch] [rbp-24h]unsigned int v4; // [rsp+20h] [rbp-20h]int v5; // [rsp+24h] [rbp-1Ch]unsigned int i; // [rsp+28h] [rbp-18h]v3 = *a1;v4 = a1[1];v5 = 0;for ( i = 0; i <= 0x3F; ++i ){v5 += 1166789954;v3 += (v4 + v5 + 11) ^ ((v4 << 6) + *a2) ^ ((v4 >> 9) + a2[1]) ^ 0x20;v4 += (v3 + v5 + 20) ^ ((v3 << 6) + a2[2]) ^ ((v3 >> 9) + a2[3]) ^ 0x10;}*a1 = v3;result = v4;a1[1] = v4;return result;}
看一下这几行代码
*a1 = v3;result = v4;a1[1] = v4;return result;
v3的值赋值到a1地址处,v4的值赋值到a1头部之后的元素上,考虑到a1其实是dword_601078,a1的一个元素大小为4字节,a1[1]所指向的地址是dword_60107c。这样这段代码的意义就是对输入的数据两个两个一组进行异或加密。
__int64 __fastcall sub_400770(_DWORD *a1){__int64 result; // raxif ( a1[2] - a1[3] == 2225223423LL&& a1[3] + a1[4] == 4201428739LL&& a1[2] - a1[4] == 1121399208LL&& *a1 == -548868226&& a1[5] == -2064448480&& a1[1] == 550153460 ){puts("good!");result = 1LL;}else{puts("Wrong!");result = 0LL;}return result;}
这一段是对a1这个数组进行了赋值
if ( (unsigned int)sub_400770(v7, a2) != 1 )
这里要使得异或之后的值与v7相同,才能成功。
v7可以通过逻辑运算得到值,然后逆一下就出来结果了。
贴一下Python脚本
from Crypto.Util.number import long_to_bytesfrom ctypes import *a1 = [3746099070, 550153460, 3774025685, 1548802262, 2652626477, 2230518816]key = [2, 2, 3, 4]for i in range(0, 5, 2):v5 = (c_int(1166789954*0x40))v3 = c_uint(a1[i])v4 = c_uint(a1[i + 1])for j in range(64):v4.value -= (v3.value + v5.value + 20) ^ ((v3.value << 6) + key[2]) ^ ((v3.value >> 9) + key[3]) ^ 0x10v3.value -= (v4.value + v5.value + 11) ^ ((v4.value << 6) + key[0]) ^ ((v4.value >> 9) + key[1]) ^ 0x20v5.value -= 1166789954a1[i] = v3.valuea1[i + 1] = v4.valuefor k in range(6):print(long_to_bytes(a1[k]).decode(), end="")
2022-2-6
[SUCTF2019]SignIn
说实话,我刚开始看这题的时候感觉很简单,但是越看越没思路,去查了writeup,才知道这是RSA加密,这没接触过RSA加密做这题我觉得就离谱。
__int64 __fastcall main(int a1, char **a2, char **a3){char v4[16]; // [rsp+0h] [rbp-4A0h] BYREFchar v5[16]; // [rsp+10h] [rbp-490h] BYREFchar v6[16]; // [rsp+20h] [rbp-480h] BYREFchar v7[16]; // [rsp+30h] [rbp-470h] BYREFchar v8[112]; // [rsp+40h] [rbp-460h] BYREFchar v9[1000]; // [rsp+B0h] [rbp-3F0h] BYREFunsigned __int64 v10; // [rsp+498h] [rbp-8h]v10 = __readfsqword(0x28u);puts("[sign in]");printf("[input your flag]: ");__isoc99_scanf("%99s", v8);sub_96A(v8, v9);__gmpz_init_set_str(v7, "ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35", 16LL);__gmpz_init_set_str(v6, v9, 16LL);__gmpz_init_set_str(v4, "103461035900816914121390101299049044413950405173712170434161686539878160984549", 10LL);__gmpz_init_set_str(v5, "65537", 10LL);__gmpz_powm(v6, v6, v5, v4);if ( (unsigned int)__gmpz_cmp(v6, v7) )puts("GG!");elseputs("TTTTTTTTTTql!");return 0LL;}
sub_96A函数是把用户输入的字符串转换为16进制存入v9中。
程序调用了 __gmpz_init_set_str 函数,通过搜索得知这是一个 GNU 高精度算法库,官方文档地址:https://gmplib.org/manual/
__gmpz_init_set_str 其实就是 mpz_init_set_strint mpz_init_set_str (mpz_t rop, const char *str, int base) [Function]Initialize rop and set its value like mpz_set_strint mpz_set_str (mpz_t rop, const char *str, int base) [Function]Set the value of rop from str, a null-terminated C string in base base. White space is allowedin the string, and is simply ignored.
这三个参数分别是多精度整数变量,字符串,进制。
这个函数的作用就是将 str 字符数组以 base 指定的进制解读成数值并写入 rop 所指向的内存。然后后面还调用了一个__gmpz_powm函数,官方文档中的定义是这样。
void mpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const mpz_t mod) [Function]Set rop to base^exp mod mod.
其实就是计算 base 的 exp 次方,并对 mod 取模,最后将结果写入 rop 中这个运算的过程和RSA的加密过程一样。
接下来就是__gmpz_cmp函数,看这个函数名就知道这是比较函数。
if ( (unsigned int)__gmpz_cmp(v6, v7) )
v6是用户输入,v7是程序的硬编码数据
RSA的加解密算法
RSA加密是对明文的E次方后除以N后求余数的过程
加密算法
C=MEmodN
C是密文,M是明文,E是公钥(E和 φ互为质数),N是公共模数(质数 P 、Q相乘得到N),MOD就是模运算。
解密算法
M=CDmodN
C是密文,M是明文,D是私钥(私钥由这个公式计算得出E * D % φ = 1),N是公共模数(质数 P 、Q相乘得到N),MOD就是模运算,φ是欧拉函数(由这个公式计算得出φ =
)。
下面写解密过程
通过main
函数,我们可以得到
C = ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35N = 103461035900816914121390101299049044413950405173712170434161686539878160984549E = 65537
知道这3条数据我们就可以开始解密密文了,首先我们要分解N得到P、Q。
分解网站:http://www.factordb.com/
P = 282164587459512124844245113950593348271Q = 366669102002966856876605669837014229419
现在我们有了P、Q和E,我们就可以计算出欧拉函数,然后我们就可以通过欧拉函数φ
和公钥E计算出私钥D。
D = gmpy2.invert(e,(p-1)*(q-1))
计算出私钥d后我们就可以对密文C进行解密,解密算法是(密文C的私钥D次方对公共模数N取余)
M = gmpy2.powmod(c,d,n)
解密脚本
import gmpy2import binasciip = 282164587459512124844245113950593348271q = 366669102002966856876605669837014229419c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35n = 103461035900816914121390101299049044413950405173712170434161686539878160984549e = 65537d = gmpy2.invert(e, (p-1)*(q-1))m = gmpy2.powmod(c, d, n)print(binascii.unhexlify(hex(m)[2:]).decode(encoding="utf-8"))
得到flag
2022-2-7
[MRCTF2020]Transform
下载下来扔到ExeinfoPE里,发现没有加壳,拖到IDA64里
int __cdecl main(int argc, const char **argv, const char **envp){char Str[104]; // [rsp+20h] [rbp-70h] BYREFint j; // [rsp+88h] [rbp-8h]int i; // [rsp+8Ch] [rbp-4h]sub_402230(argc, argv, envp);sub_40E640("Give me your code:\n");sub_40E5F0("%s", Str);if ( strlen(Str) != 33 ) //33位{sub_40E640("Wrong!\n");system("pause");exit(0);}for ( i = 0; i <= 32; ++i ) {byte_414040[i] = Str[dword_40F040[i]]; //将输入的flag使用dword_40F040数组作为索引,打乱顺序byte_414040[i] ^= LOBYTE(dword_40F040[i]); //再将打乱后的flag数组,与dword_40F040数组异或,得到byte_40F0E0}for ( j = 0; j <= 32; ++j ){if ( byte_40F0E0[j] != byte_414040[j] ){sub_40E640("Wrong!\n");system("pause");exit(0);}}sub_40E640("Right!Good Job!\n");sub_40E640("Here is your flag: %s\n", Str);system("pause");return 0;}.data:000000000040F040 ; int dword_40F040[40].data:000000000040F040 dword_40F040 dd 9, 0Ah, 0Fh, 17h, 7, 18h, 0Ch, 6, 1, 10h, 3, 11h, 20h.data:000000000040F040 ; DATA XREF: main+79↑o.data:000000000040F040 ; main+B8↑o.data:000000000040F040 dd 1Dh, 0Bh, 1Eh, 1Bh, 16h, 4, 0Dh, 13h, 14h, 15h, 2, 19h.data:000000000040F040 dd 5, 1Fh, 8, 12h, 1Ah, 1Ch, 0Eh, 8 dup(0).data:000000000040F0E0 ; _BYTE byte_40F0E0[96].data:000000000040F0E0 byte_40F0E0 db 67h, 79h, 7Bh, 7Fh, 75h, 2Bh, 3Ch, 52h, 53h, 79h, 57h.data:000000000040F0E0 ; DATA XREF: main+EF↑o.data:000000000040F0E0 db 5Eh, 5Dh, 42h, 7Bh, 2Dh, 2Ah, 66h, 42h, 7Eh, 4Ch, 57h.data:000000000040F0E0 db 79h, 41h, 6Bh, 7Eh, 65h, 3Ch, 5Ch, 45h, 6Fh, 62h, 4Dh.data:000000000040F0E0 db 3Fh dup(0)
整体思路很见到简单,就是将输入的flag使用dword_40F040数组作为索引,打乱顺序,再将打乱后的flag数组,与dword_40F040数组异或,得到的值与byte_40F0E0相等。(此处还有个坑,8dup
=0,不等于8)
加密方式:
a = flag[b[i]];a ^= b;c == a即c = a ^ b
解密就反过来,因为a是不知道的,所以就先解出a:
a = a ^ b即 a = c ^ b然后 flag[b[i]] = a。
贴上脚本
dword_40F040 = [0x9, 0x0A, 0x0F, 0x17, 0x7, 0x18, 0x0C, 0x6, 0x1,0x10, 0x3, 0x11, 0x20, 0x1D, 0x0B, 0x1E, 0x1B, 0x16, 0x4,0x0D, 0x13, 0x14, 0x15, 0x2, 0x19, 0x5, 0x1F, 0x8, 0x12, 0x1A, 0x1C, 0x0E, 0]byte_40F0E0 = [0x67, 0x79, 0x7B, 0x7F, 0x75, 0x2B, 0x3C, 0x52, 0x53, 0x79,0x57, 0x5E, 0x5D, 0x42, 0x7B, 0x2D, 0x2A, 0x66, 0x42, 0x7E,0x4C, 0x57, 0x79, 0x41, 0x6B, 0x7E, 0x65, 0x3C, 0x5C, 0x45, 0x6F, 0x62, 0x4D, 0]flag = [0] * 33for i in range(33):byte_40F0E0[i] ^= dword_40F040[i]for i in range(33):flag[dword_40F040[i]] = byte_40F0E0[i]print(''.join([chr(x) for x in flag]))
2022-2-8
[ACTF新生赛2020]usualCrypt
下载下来,先扔到ExeinfoPE里,无壳,然后再放到IDA里。
int __cdecl main(int argc, const char **argv, const char **envp){int v3; // esiint result; // eaxint v5[3]; // [esp+8h] [ebp-74h] BYREF__int16 v6; // [esp+14h] [ebp-68h]char v7; // [esp+16h] [ebp-66h]char v8[100]; // [esp+18h] [ebp-64h] BYREFsub_403CF8((int)&unk_40E140); //输出scanf("%s", v8); //输入v5[0] = 0;v5[1] = 0;v5[2] = 0;v6 = 0;v7 = 0;sub_401080((int)v8, strlen(v8), (int)v5); //加密函数v3 = 0;while ( *((_BYTE *)v5 + v3) == byte_40E0E4[v3] ) //比较函数{if ( ++v3 > strlen((const char *)v5) )goto LABEL_6;}sub_403CF8((int)aError);LABEL_6:if ( v3 - 1 == strlen(byte_40E0E4) )result = sub_403CF8((int)aAreYouHappyYes);elseresult = sub_403CF8((int)aAreYouHappyNo);return result;}
打开sub_401080函数,可以看出来主体基本上是base64加密
int __cdecl sub_401080(int a1, int a2, int a3){int v3; // ediint v4; // esiint v5; // edxint v6; // eaxint v7; // ecxint v8; // esiint v9; // esiint v10; // esiint v11; // esi_BYTE *v12; // ecxint v13; // esiint v15; // [esp+18h] [ebp+8h]v3 = 0;v4 = 0;sub_401000();v5 = a2 % 3;v6 = a1;v7 = a2 - a2 % 3;v15 = a2 % 3;if ( v7 > 0 ){do{LOBYTE(v5) = *(_BYTE *)(a1 + v3);v3 += 3;v8 = v4 + 1;*(_BYTE *)(v8 + a3 - 1) = byte_40E0A0[(v5 >> 2) & 0x3F];*(_BYTE *)(++v8 + a3 - 1) = byte_40E0A0[16 * (*(_BYTE *)(a1 + v3 - 3) & 3)+ (((int)*(unsigned __int8 *)(a1 + v3 - 2) >> 4) & 0xF)];*(_BYTE *)(++v8 + a3 - 1) = byte_40E0A0[4 * (*(_BYTE *)(a1 + v3 - 2) & 0xF)+ (((int)*(unsigned __int8 *)(a1 + v3 - 1) >> 6) & 3)];v5 = *(_BYTE *)(a1 + v3 - 1) & 0x3F;v4 = v8 + 1;*(_BYTE *)(v4 + a3 - 1) = byte_40E0A0[v5];}while ( v3 < v7 );v5 = v15;}if ( v5 == 1 ){LOBYTE(v7) = *(_BYTE *)(v3 + a1);v9 = v4 + 1;*(_BYTE *)(v9 + a3 - 1) = byte_40E0A0[(v7 >> 2) & 0x3F];v10 = v9 + 1;*(_BYTE *)(v10 + a3 - 1) = byte_40E0A0[16 * (*(_BYTE *)(v3 + a1) & 3)];*(_BYTE *)(v10 + a3) = 61;LABEL_8:v13 = v10 + 1;*(_BYTE *)(v13 + a3) = 61;v4 = v13 + 1;goto LABEL_9;}if ( v5 == 2 ){v11 = v4 + 1;*(_BYTE *)(v11 + a3 - 1) = byte_40E0A0[((int)*(unsigned __int8 *)(v3 + a1) >> 2) & 0x3F];v12 = (_BYTE *)(v3 + a1 + 1);LOBYTE(v6) = *v12;v10 = v11 + 1;*(_BYTE *)(v10 + a3 - 1) = byte_40E0A0[16 * (*(_BYTE *)(v3 + a1) & 3) + ((v6 >> 4) & 0xF)];*(_BYTE *)(v10 + a3) = byte_40E0A0[4 * (*v12 & 0xF)];goto LABEL_8;}LABEL_9:*(_BYTE *)(v4 + a3) = 0;return sub_401030(a3);}
加密函数里还有两个函数,分别是sub_401000跟sub_401030
。分别打开看一下
int sub_401000(){int result; // eaxchar v1; // clfor ( result = 6; result < 15; ++result ){v1 = byte_40E0AA[result];byte_40E0AA[result] = byte_40E0A0[result];byte_40E0A0[result] = v1;}return result;}
将两个数组里的数据进行了交换,看地址两个数组是连在一起的,其实也可以连在一起当成一个数组看,从下标为6开始到下标为15,往后偏移了10(0xA)位,也就是QRSTUVWXY和GHIJKLMNOP相互交换了一下,所以原始用来加密的base64密码表是‘ABCDEFQRSTUVWXYGHIJKLMNOPZabcdefghijklmnopqrstuvwxyz0123456789+/’。
再来看一下sub_401030函数,可以看出是对字符串进行了大小写转换。
int __cdecl sub_401030(const char *a1){__int64 v1; // raxchar v2; // alv1 = 0i64;if ( strlen(a1) ){do{v2 = a1[HIDWORD(v1)];if ( v2 < 97 || v2 > 122 ){if ( v2 < 65 || v2 > 90 )goto LABEL_9;LOBYTE(v1) = v2 + 32;}else{LOBYTE(v1) = v2 - 32;}a1[HIDWORD(v1)] = v1;LABEL_9:LODWORD(v1) = 0;++HIDWORD(v1);}while ( HIDWORD(v1) < strlen(a1) );}return v1;}
逆向思路就是:–>结果大小写互换–>修改base64转换表–>加密结果通过转换表得到正常的加密后的结果–>base64解密。
贴上脚本:
import base64result = 'zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'.swapcase() # 大小写转换base64key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'base64keylist = list(base64key)translist = list(base64key)offset = 10flag = ''for i in range(6, 15): # 置换密码表translist[i], translist[i + offset] = translist[i + offset], translist[i]base64dict = dict(zip(base64keylist, translist)) # 生成旧密码表跟新密码表的映射for i in range(len(result)):flag += base64dict[result[i]]flag = base64.b64decode(flag)print(flag)
2022-2-9
[GUET-CTF2019]re
先下载下来,拖到ExeinfoPE里,发现有壳,用upx去一下壳。
拖到IDA64里
__int64 __fastcall sub_400E28(__int64 a1, int a2, int a3, int a4, int a5, int a6){int v6; // edxint v7; // ecxint v8; // er8int v9; // er9__int64 result; // rax__int64 v11; // [rsp+0h] [rbp-30h] BYREFunsigned __int64 v12; // [rsp+28h] [rbp-8h]v12 = __readfsqword(0x28u);sub_40F950((unsigned int)"input your flag:", a2, a3, a4, a5, a6, 0LL, 0LL, 0LL, 0LL);sub_40FA80((unsigned int)"%s", (unsigned int)&v11, v6, v7, v8, v9, v11);if ( (unsigned int)sub_4009AE(&v11) )sub_410350("Correct!");elsesub_410350("Wrong!");result = 0LL;if ( __readfsqword(0x28u) != v12 )sub_443550();return result;}
打开sub_4009AE函数:
_BOOL8 __fastcall sub_4009AE(char *a1){if ( 1629056 * *a1 != 166163712 )return 0LL;if ( 6771600 * a1[1] != 731332800 )return 0LL;if ( 3682944 * a1[2] != 357245568 )return 0LL;if ( 10431000 * a1[3] != 1074393000 )return 0LL;if ( 3977328 * a1[4] != 489211344 )return 0LL;if ( 5138336 * a1[5] != 518971936 )return 0LL;if ( 7532250 * a1[7] != 406741500 )return 0LL;if ( 5551632 * a1[8] != 294236496 )return 0LL;if ( 3409728 * a1[9] != 177305856 )return 0LL;if ( 13013670 * a1[10] != 650683500 )return 0LL;if ( 6088797 * a1[11] != 298351053 )return 0LL;if ( 7884663 * a1[12] != 386348487 )return 0LL;if ( 8944053 * a1[13] != 438258597 )return 0LL;if ( 5198490 * a1[14] != 249527520 )return 0LL;if ( 4544518 * a1[15] != 445362764 )return 0LL;if ( 3645600 * a1[17] != 174988800 )return 0LL;if ( 10115280 * a1[16] != 981182160 )return 0LL;if ( 9667504 * a1[18] != 493042704 )return 0LL;if ( 5364450 * a1[19] != 257493600 )return 0LL;if ( 13464540 * a1[20] != 767478780 )return 0LL;if ( 5488432 * a1[21] != 312840624 )return 0LL;if ( 14479500 * a1[22] != 1404511500 )return 0LL;if ( 6451830 * a1[23] != 316139670 )return 0LL;if ( 6252576 * a1[24] != 619005024 )return 0LL;if ( 7763364 * a1[25] != 372641472 )return 0LL;if ( 7327320 * a1[26] != 373693320 )return 0LL;if ( 8741520 * a1[27] != 498266640 )return 0LL;if ( 8871876 * a1[28] != 452465676 )return 0LL;if ( 4086720 * a1[29] != 208422720 )return 0LL;if ( 9374400 * a1[30] == 515592000 )return 5759124 * a1[31] == 719890500;return 0LL;}
其实就是很简单的挨个计算问题,贴上脚本:
a = [0] * 32flag = ''a[0] = chr(166163712//1629056)a[1] = chr(731332800 // 6771600)a[2] = chr(357245568 // 3682944)a[3] = chr(1074393000 // 10431000)a[4] = chr(489211344 // 3977328)a[5] = chr(518971936 // 5138336)a[7] = chr(406741500 // 7532250)a[8] = chr(294236496 // 5551632)a[9] = chr(177305856 // 3409728)a[10] = chr(650683500 // 13013670)a[11] = chr(298351053 // 6088797)a[12] = chr(386348487 // 7884663)a[13] = chr(438258597 // 8944053)a[14] = chr(249527520 // 5198490)a[15] = chr(445362764 // 4544518)a[16] = chr(981182160 // 10115280)a[17] = chr(174988800 // 3645600)a[18] = chr(493042704 // 9667504)a[19] = chr(257493600 // 5364450)a[20] = chr(767478780 // 13464540)a[21] = chr(312840624 // 5488432)a[22] = chr(1404511500 // 14479500)a[23] = chr(316139670 // 6451830)a[24] = chr(619005024 // 6252576)a[25] = chr(372641472 // 7763364)a[26] = chr(373693320 // 7327320)a[27] = chr(498266640 // 8741520)a[28] = chr(452465676 // 8871876)a[29] = chr(208422720 // 4086720)a[30] = chr(515592000 // 9374400)a[31] = chr(719890500 // 5759124)for i in range(len(a)):print(a[i], end='')
但是a[6]我们是不知道的,所以我们只能爆破,得出a[6]=1。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 趣谈网络协议-数据中心
一、DNS协议 1. DNS 服务器 2. DNS 解析流程 3. 负载均衡 4. 示例:DNS 访问数据中心中对象存储上的静态资源 二、HttpDNS 1. 传统 DNS 的问题 2. HttpDNS 的工作模式 3. HttpDNS 的缓存设计 4. HttpDNS 的调度设计 三、CDN 四、数据中心 五、VPN 六、移动网…...
2024/3/4 11:19:31 - Java8使用stream流,快速实现List转map 、分组、过滤等操作
文章目录0.准备资源1. 分组2. List转Map3.过滤Filter4.求和5.集合中的元素去重6.集合中的元素转新集合7.集合去空0.准备资源 public class Apple {private Integer id;private String name;private BigDecimal money;private Integer num; //省略 get/set/满参 } Apple apple1…...
2024/3/4 11:19:29 - 苹果CMS v10模板 - JOEOEL模板/苹果CMS手机端模板
☑️ 编号:ym264 ☑️ 品牌:苹果CMS ☑️ 语言:PHP ☑️ 大小:1.77MB ☑️ 类型:JOEOEL模板 ☑️ 支持:手机端 🎉 欢迎免费领取(注明编号) 🎉 ✨ 源码介绍 苹…...
2024/3/4 11:19:28 - vim的安装
①vi两次tab键可查看是否安装vim ②安装命令sudo apt-get install vim-gtk 按i进入插入模式 按esc退出插入模式 :wq 保存并退出...
2024/3/4 11:19:27 - C语言 指针
输入 x、y 两个整数,然后将其中的值大的赋值给 x,小的赋值给 y。即:假设输入 x 8,y 9。就将 9 赋值给 x,8 赋值给 y。 #include <stdio.h> void main() {int x, y;int* px, * py; //声明普通变量和指针变量in…...
2024/3/7 10:18:17 - java-打印空心的菱形
代码 /* 空心菱形 层数只能取奇数 */ public class HollowDiamond {/*** ** ********思路分析化繁为简1. 先打印一个矩形*************************2. 打印半个金字塔* //第1层 有 1个*** //第2层 有 2个**** //第3层 有 3个***** //第4层 有 4个****** //第5层…...
2024/3/7 10:18:16 - Lint Code - ASCII 码对应的字符
今天开始做题。。 基础不牢地动山摇啊。记录一下。 【题目】 给定一个 int 类型的数字 n,输出 n 对应 ASCII 码的字符,若超过 ASCII 码表的范围,则输出 error。 代码如下: import java.util.Scanner; public class ASCII {public…...
2024/3/7 10:18:16 - 代码保护壳的优化(实现客户端隐藏壳跳转代码)
通过调试我们之前加壳后的程序。 发现从这个代码执行过后,跳转到了一个新的模块 这个函数又是返回一个地址 然后跳转到新的模块 跳过去第一句又是pop,所以有经验的人很容易看出来其端倪 。(这个壳相当于什么都没有保护) 我们可以对…...
2024/3/7 10:18:14 - SpringMVC学习笔记(三)。RestFul风格详解。@RequestMapping注解,@PathVariable注解,RequestMethod请求方式
文章目录RestFul风格1. 概念2. 功能3. 学习测试4. 优点5. 使用method属性指定请求类型6. 小结7. 完整的目录结构RestFul风格 1. 概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更…...
2024/3/7 10:18:13 - Python基础6--类3(类的封装、继承和多态)
目录 一、封装 二、类的继承 三、多态性 python编程的重点是面向对象编程,而面向对象编程的核心方法就是封装、继承和多态。 一、封装 先简单介绍下封装,个人理解说就是把数据和方法封起来,然后装到一个类里,使用者不关注里面…...
2024/3/7 10:18:12 - 2022新春总结及期待
title: 2022新春总结及期待 date: 2022-02-09 23:11:38 tags: [总结] categories: 阶段性总结 年前所学基础技术 不知不觉来到大学已经两年,从一名小萌新变为颇有经验的初级程序员,路途坎坷,仍需砥砺前行。 首先总结一下自己已经学会的基础…...
2024/3/7 10:18:11 - 什么是NPM和NPM的使用
快速使用 npm命令序号命令说明1npm init初始化项目(按照提示一步步输入相关信息,如果用默认值直接回车下一步即可,最后生成package.json 文件)2npm init -y初始化项目(跳过所有询问输入环节,直接生成 packa…...
2024/3/7 10:18:10 - 蓝桥杯每日一练——爬楼梯
问题描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2…...
2024/3/7 10:18:09 - LeetCode#36. 有效的数独
题目: 请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 ,验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。 数字 1-9 在每一列只能出现一次。 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图&#…...
2024/3/7 10:18:08 - 全球手机验证码发放+短视频去水印等组合微信小程序源码
☑️ 编号:ym263 ☑️ 品牌:无 ☑️ 语言:PHP ☑️ 大小:1.65MB ☑️ 类型:全球手机验证码发放短视频去水印等组合 ☑️ 支持:小程序 🎉 欢迎免费领取(注明编号) &#x…...
2024/3/7 10:18:07 - 面试官:给我讲讲Spring加载配置
面试官:给我讲讲Spring加载配置 场景回顾 大家新年好呀,我是小张,今天是复工的第一天,回到寝室,小叶又闷闷不乐,也就有了如下场景。 面试官:小叶你好,我看简历上写了精通Spring&a…...
2024/3/7 10:18:06 - 虚拟机 VMtools的安装
①先打开ububtu,虚拟机——设置——vmtools安装——安装成功后,会有如下的情况 ②把VMwareTools…tar.gz文件提取到某个目录(随便)下,提取完成后会发现里面多了一个vmware-tools-distrib文件夹 ③进入到该终端&#…...
2024/3/7 10:18:06 - 多线程研究1
单线程: from urllib.request import urlretrieve import time import random starttime.time() fopen(E:\Python\py\web\hh.txt,r)#打开存放URL的文件 af.readlines() f.close() for i in a:brandom.randint(0,30)urlretrieve(i,%d.png%b) endtime.time() print(…...
2024/3/7 10:18:04 - java基础教程17讲:运算符之算数运算符
程序中对于数值类的计算还是应用比较广泛的,我们这里需要掌握7个基本的运算符,都是大家比较熟悉的: 加、减、乘、除、求余、自加、自减 //1、7大算数运算符:加、减、乘、除、取余、自加、自减int a 2;int b 1;int c a b;int d…...
2024/3/7 10:18:03 - 拟牛顿法学习
拟牛顿法 拟牛顿法的基本思想就是将海森矩阵Gk∇2f(xk)\mathbf{G}_k\nabla^2 f\left(\mathbf{x}_k\right)Gk∇2f(xk)用一个近似矩阵Bk\mathbf{B}_kBk来代替 通常Bk\mathbf{B}_kBk应该有3个特点 Bk≈Gk\mathbf{B}_k\approx \mathbf{G}_kBk≈Gk使相应的算法产生的方…...
2024/3/7 10:18:02
最新文章
- 量化交易入门(二十五)什么是RSI,原理和炒股实操
前面我们了解了KDJ,MACD,MTM三个技术指标,也进行了回测,结果有好有坏,今天我们来学习第四个指标RSI。RSI指标全称是相对强弱指标(Relative Strength Index),是通过比较一段时期内的平均收盘涨数和平均收盘跌数来分析市…...
2024/3/29 9:25:58 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - eclipse自动跳到console 解决办法
eclipse启动服务后,想看一些properties信息或者别的,但老是自动跳转到console页面,下面是解决办法: Eclipse中按照如下顺序找到设置菜单的位置: Window — Preferences — Run/Debug — Console 找到以下两项…...
2024/3/29 8:22:39 - HCIP —— 生成树 (下)
目录 STP(生成树)的角色选举 根网桥 根端口 选举规则: 指定端口 生成树的端口状态 STP的接口状态:禁用、阻塞、侦听、学习、转发 五种状态 禁用状态 阻塞状态 侦听状态 学习状态 转发状态 当生成树拓扑结构发生变化 …...
2024/3/28 18:59:53 - android 音频焦点,音频策略梳理
音频焦点和音频策略两个不同的概念,容易搞混 先来看下音频焦点和音频策略直接的区别和联系 音频策略的主要功能是为该音频找到合适的硬件设备播放 1 音频策略流程: (从usage->device) attributesBuilder.setUsage--->audioservice.mCarAudioCont…...
2024/3/28 20:27:58 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/3/27 10:21:24 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/3/24 20:11:25 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/3/29 2:45:46 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/3/24 20:11:23 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/3/29 5:19:52 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/3/28 17:01:12 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/3/24 5:55:47 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/3/29 1:13:26 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/3/29 8:28:16 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/3/29 7:41:19 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/3/24 20:11:18 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/3/28 9:10:53 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/3/29 0:49:46 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/3/24 20:11:15 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/3/27 7:12:50 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/3/24 20:11:13 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/3/26 11:21:23 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/3/28 18:26:34 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/3/28 12:42:28 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/3/28 20:09:10 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57