nbctf
0x01 py逆向给了一个main.py和out.txt 的文件,打开分析一下
12345678910111213141516171819202122232425import random key1 = random.choices(range(256), k=20) #0到255里取20个随机数key2 = list(range(256)) #0到255的列表random.shuffle(key2) #随机排列flag = open('flag.txt', 'rb').read() #读取flag,设置成input def enc(n): #加密函数 q = key2[n] w = key1[q % 20] n ^= q return n, w x = 0x00000000for i, c in enumerate(flag): #枚举遍历,第一个是下标,第二个是里面的东西 x <<= 8 #x左移动8位,一个字节 n, w = enc(c) #根据密钥和flag出两个数 i ...
CPP类的基础
构造函数和析构函数函数名和类名相同,有参数,构造函数创建对象时会自动调用且只调用一次,而析构函数在对象销毁前会自动调用一次,这两个函数是必需的,如果不手动设置,编译器会自动设置
1234567891011//构造函数class Person{ public: Person(){ std::cout<<"OK"; } //析构函数 ~Person(){ std::cout<<"OK"; }};
构造函数的分类默认无参构造函数,有参构造函数,拷贝构造函数
调用方法有括号法显示法和隐式转化法
1234567891011121314151617181920212223242526272829303132333435class Person{ public: Person(){ //无参 } Person(int a){ //有参 } Person(const Person &am ...