RE
freestyle
基本面 64位 无壳
静态分析 主函数中两个加密 验证成功之后的值进行md5加密即可
先看第一个函数(fun1) if判断 只要不让if成立即可
看第二个函数 一样的道理
直接上爆破脚本 方便又快捷
for i in range(10000):
if (i*3//9-9)*4 == 4400:
print(i)
for i in range(10000):
if (2 * (i % 56)) == 98:
print(i)
又因为题目给了提示取可被模除的最小值 也就是取3327和105进行加密即可
flag{31a364d51abd0c8304106c16779d83b1}
Re_function
基本面 32位无壳
直接分析 花指令直接nop掉跳转函数 在文件头创建函数 就可以看到主函数了 流程很清晰就一个简单的分步异或 然后题目中另一个文件是base64换表 所以先把base64的表解出来 再拿去异或就可以了 要注意ida中大小端存储问题
key = 'dqTTdxtxdA@Hpm'
key = list(key)
for i in range(0,len(key),2):
key[i] = chr(ord(key[i]) ^ 0x37)
for i in key:
print(i,end="")
str2 = [0x41,0x78,0x66,0x72,0x41,0x78,0x5e,0x4e,0x5d,0x52,0x0e,0x3d]
for i in range(0,len(str2),2):
str2[i] = str2[i] ^ 0x37
for i in str2:
print(chr(i),end="")
剩下就是一个base64换表了
import base64
import string
string = "SqcTSxCxSAwHGm/JvxQrvxiNjR9="
tableBase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
tableNew = "FeVYKw6a0lDIOsnZQ5EAf2MvjS1GUiLWPTtH4JqRgu3dbC8hrcNo9/mxzpXBky7+"
'''
maketrans():用于创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标;
translate():法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中;
decode():以encoding指定的编码格式解码字符串。
'''
'1.换表'
maketrans = str.maketrans(tableNew, tableBase64)
'2.使用新表转换字符串'
translate = string.translate(maketrans)
print(translate)
'2.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)
flag = list(flag)
print(flag)
b’flag{we1come_t0_wrb}’
easyiec
打开流量包,抓tcp流,就往下翻了翻
carefulguy
打开流量包,抓tcp流,从3流之后每个流都有一位flag 全部提取出来,16进制转成ascii码
flag{p4us315v3ry1nt3restic9}
|