GeekChallenge 2023 re wp
前言感觉有点尴尬,这个wp并不全,因为本人打算在比赛结束后写出此文,然后发现靶场的题全下完了,然后自己也没有备份,呃呃怎么办呢?只能凭印象了,想到哪道题就写哪道题罢,然后Ida的界面的东西也没有(因为题目被我删了)只剩解密脚本了凑合着看。。。
0x01 shiftjmp
die查壳,发现是无壳的ELF64文件,直接拖入ida64
按tab发现无法生存伪代码,发现这里有两处错误。
这两处错误是花指令,花指令详情见花指令 - CTF Wiki (ctf-wiki.org)
第一处是无意义跳转,第二处是jmp造成的脏字节。
把jz和imp都nop掉。
undefine (U)然后按 c生存代码 按p生存函数main
非常简单的异或加密,写个python脚本解密
12345enc='SXAxS6jd8doTxBQ{x"Ma'+chr(0x27)+r"csE-|El,o/{^\\"flag=""for i in range(34): flag+=chr(ord(enc[i])^i^0)print ...
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 ...