大佬教程收集整理的这篇文章主要介绍了[长安“战疫”网络安全卫士守护赛]hello_py,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
flag{He110_cazy}
本题主要考察线程知识
首先拿到.pyc
文件,随便找个网站在线反编译一下:
生成对应的有效.py
源代码,查看源代码
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
import threading
import time
def encode_1(n):
global num
if num >= 0:
flag[num] = flag[num] ^ num
num -= 1
time.sleep(1)
if num <= 0:
pass
def encode_2(n):
global num
if num >= 0:
flag[num] = flag[num] ^ flag[num + 1]
num -= 1
time.sleep(1)
if num < 0:
pass
Happy = [
44,
100,
3,
50,
106,
90,
5,
102,
10,
112]
num = 9
f = input('Please input your flag:')
if len(f) != 10:
print('Your input is illegal')
continue
flag = list(f)
j = 0
print("flag to 'ord':", flag)
t1 = threading.Thread(encode_1, (1,), **('target', 'args'))
t2 = threading.Thread(encode_2, (2,), **('target', 'args'))
t1.start()
time.sleep(0.5)
t2.start()
t1.join()
t2.join()
if flag == Happy:
print('Good job!')
continue
print('No no no!')
continue
程序中出现了使用thread
的痕迹。首先把Happy
数组取出备用。然后查看对线程的操作。这里可见两个线程中存在对同一个资源进行同时访问的情况,因此估计存在交叉修改的问题。根据以下代码又证实了我的观点:
t1.start()
time.sleep(0.5)
t2.start()
这段代码表示了两个线程在不同时启动,但是线程之中含有时间复杂度差不多的两个语句和一个相同的延时指令。也就是说,这里的两个线程是混合执行的,分别对num依此处理。此处的t1
首先被调用,因此可以肯定t1
线程处理的是num = 0,2,4,...
这样的序列对应的值,反之亦然。因而可以编写一个对应的小程序来执行这一过程
#include <cstdio>
//关键:thread交替打断
int main(int argc, char** argv)
{
char happy[] = { 44,100,3,50, 106, 90, 5, 102,10,112 };
char flag[64] = { 0 };
for (int i = 0; i < 10; i++)
{
if (i % 2 == 1)flag[i] = happy[i] ^ i;
if (i % 2 == 0)flag[i] = happy[i] ^ happy[i + 1];
}
for (int i = 0; i < 32; i++)
{
printf("%c", flag[i]);
}
return 0;
}
这里我们知道了Happy
数组,这个数组做了很简单的异或加密。
以上是大佬教程为你收集整理的[长安“战疫”网络安全卫士守护赛]hello_py全部内容,希望文章能够帮你解决[长安“战疫”网络安全卫士守护赛]hello_py所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。