RE
【你看我反不反就完了】字符串对比:
拖到die中,发现是无壳,64位,拖动到64位的ida中进行反编译
成功打开后,就找到了最开始界面,就已经看到了flag
可以按一下f5进入伪代码的窗口:
这样就得到了flag:QLNU{he11ow_re!}
可以win+r 然后输入cmd进行命令界面,然后把程序拖动进去,输入得到的flag,显示输入正确
【阿斯克】ascll码表对比:
还是一样的查壳,是64位无壳,直接进行反编译
这里看到了有一个v5的数组,这个就是所谓的ascll码
ascll码81对应的字符的‘Q’,76是‘L’,所以不难猜测,这一串字符连起来就是flag了
81,76,78,85,123,119,51,49,99,48,109,101,95,116,48,95,114,51,125
flag:QLNU{w31c0me_t0_r3}
给一个比较不错的转化网站实现ascll码、16进制、10进制、二进制互相转化:
https://www.rapidtables.org/zh-CN/convert/number/ascii-hex-bin-dec-converter.html
非预期解:
在进入软件后按空格进入汇编指令,然后就可以直接看到把ascll码转换过之后的flag
还有一样的操作,在cmd窗口运行一下:
【f1@g】
首先,把下载的文件拖入die(查壳工具),无壳,32位
然后拖入ida32,F5反编译
很显然,这不是flag,点进replaceOneWithI函数
很明显,这个函数就是修改了部分flag,对着数字按R转换
替换部分字母,得到正确的flag
【好多get啊!你get到了吗??】
首先,把下载的文件拖入die(查壳工具),无壳,32位
然后拖入ida32,F5反编译
看见好多get函数,点进去
对着数字,按R转换
依次转换get函数,得到flag
1
| QLNU{ni_zhua_dao_wo_le!}
|
【我也很疑惑呀????!】
这题涉及到异或的计算,是一个位运算
就是每一位和6进行异或计算,脚本直接嗦了
1 2 3 4 5 6 7 8 9
| str1 = "WJHS}^itY~iTY~6tY^6TY~itY^iTY~It{"
result = ""
for i in range(len(str1)): result += chr(ord(str1[i]) ^ 6)
print(result)
|
【baby_base64】
首先,把下载的文件拖入die(查壳工具),无壳,64位
然后拖入ida64,F5反编译
根据提示可以看出是base64加密且是换表加密
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import base64 import string
string = "rrOxqoSIkKCVloqgjJeWoJKeoJ2WnpCgkKmQ3oL="
tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" tableNew = "+/9876543210zyxwvutsrqponmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA"
'1.换表' maketrans = str.maketrans(tableNew, tableBase64) '2.使用新表转换字符串' translate = string.translate(maketrans) print(translate) '3.Base64解码' flag = base64.b64decode(translate)
flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64))) print(flag) QLNU{wo_jiu_shi_ma_biao_oVo!}
|
【走个迷宫试试_3岁小孩版】
首先,把下载的文件拖入die(查壳工具),无壳,64位
然后拖入ida64,F5反编译
迷宫算法,跑程序
迷宫路径:ssdsddwwwd
在线MD5加密网站
【走个迷宫试试_18岁青年版】
首先,把下载的文件拖入die(查壳工具),无壳,64位
然后拖入ida64,F5反编译
俩循环,外循环循环10次,代表行,内循环循环16次,代表列
1 2 3 4 5 6 7 8 9 10 11 12
| 1111111111111111 1001000100000011 1101110101101011 1100010001001011 1111011101100011 1100000100001111 1111101101100111 1100000000010011 1100000000101001 1111111111111111
dssddssdssdddwwdddsdsdsd
|
1
| QLNU{zhnZzgrZC2rZC2rKzhD3zgrKC2rZzhnK}
|
【ez_base64】
【hard_base64】
首先,把下载的文件拖入die(查壳工具),无壳,64位
然后拖入ida64,F5反编译
解题脚本
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
| def generate_new_base(): base = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" index = [52, 62, 0, 26, 1, 27, 2, 28, 3, 29, 4, 30, 5, 31, 6, 32, 7, 33, 8, 34, 9, 35, 10, 36, 11, 37, 12, 38, 13, 39, 14, 40, 15, 41, 16, 42, 17, 43, 18, 44, 19, 45, 20, 46, 21, 47, 22, 48, 23, 49, 24, 50, 25, 51, 53, 61, 54, 60, 55, 59, 56, 58, 57, 63]
new_base = [base[index[i]] for i in range(64)] return ''.join(new_base)
if __name__ == "__main__": new_base = generate_new_base() print(new_base)
import base64 string = "GJlBLSlCjbtZGibfMyrKLKpRhJzZGjlfmZ2yKabCMSbSjRnpOkfLjR62jjJ="
tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" tableNew = "0+AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz192837465/" ''' maketrans():用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标; translate():法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中; decode():以encoding指定的编码格式解码字符串。 '''
'1.换表' maketrans = str.maketrans(tableNew, tableBase64) '2.使用新表转换字符串' translate = string.translate(maketrans) print(translate) '3.Base64解码' flag = base64.b64decode(translate)
''' 三合一操作: flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64))) ''' flag = base64.b64decode(string.translate(str.maketrans(tableNew, tableBase64))) print(flag)
input_str = "9FDbfFTZt91Mk9VahdEMt9VMoN3X1FjafVGaysXVOxUU" reversed_str = input_str[::-1] print(reversed_str0)
import base64
encoded_data = "UUxOVXsyaGVfajF1X3NoMV9tMEdhaV9kM19tZTFfbDF9"
decoded_data = base64.b64decode(encoded_data).decode('utf-8') print("Decoded:", decoded_data)
|
或者使用cyberchef
【有时候运气也是实力的一部分!】
首先,把下载的文件拖入die(查壳工具),有壳,UPX壳,64位
先进行脱壳,使用upx工具
然后拖入ida64,F5反编译
其他都是题目加密函数,重点看画红框的函数
函数sub10087
函数sub10086
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| def sub10087(): Str = ",W=%%6W]:B0+73#GO}" Str = list(Str)
for i in range(len(Str)): if ord(Str[i]) > 59 and ord(Str[i]) <= 100: Str[i] = chr(ord(Str[i]) - 60)
Destination = "".join(Str)
for j in range(len(Destination) - 2, -1, -1): Destination = Destination[:j] + chr(ord(Destination[j]) ^ ord(Destination[j + 1])) + Destination[j + 1:]
return Destination
result = sub10087() print(result)
|
看代码看到这里
v5就是a1
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
| v13 = 678 if v13 == 678: v5 = [0] * 3 for i in range(3): v5[i] = v13 % 10 v13 //= 10 else: v5 = None
print(v5)
def encrypt_v0(v0, a1): v3 = [0] * len(v0)
for i in range(len(v0)): key = a1[i % 3] v3[i] = chr(ord(v0[i]) ^ key)
return ''.join(v3)
v0 = "YKH]|_}iWaX_mTna" a1 = [8, 7, 6]
encrypted_v0 = encrypt_v0(v0, a1) print(encrypted_v0)
|
得到flag
1
| QLNU{YunQi_YeShi_shiLi_De_YiBuFen}
|