逝者如斯夫 不舍昼夜

0%

第二届安洵杯-逆向-WP

Easy_Encryption


题目

ida启动

Shift+F12查找字符串

找到flag字段然后利用X快捷键找到main

如图 前面是系统函数,直接看系统函数下第一条函数

不能F5

然后转汇编页面进去试试

然后找到不能f5的地方

然后把这条命令上面一条去掉就可以了

E重设置函数结尾,然后就能F5了

进入了一个算法,先不看,出去看main

进入一个if判定 进去查看判定条件

有个赋值,进去看

能看出来这是个base64加密,直接跳过

后面是一个字符串对比,找str1来自哪里

来自v6,因此只需要分析上面那个算法即可

算法提取出来解密如下:

table = list(‘ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/‘)
input = ‘artqkoehqpkbihv’

for i in range(len(table)):
temp = ord(table[i]) - ord(‘a’)
if temp < 0:
temp *= -1
table[i] = temp
def allTable(io):
each = []
for i in range(15):
a = []
for i2 in range(ord(‘a’), ord(‘z’) + 1):
if (i2 + io[i] - ord(‘a’)) % 26 + ord(‘a’) > ord(‘z’):
stringb = chr((i2 + io[i] - ord(‘a’)) % 26 + ord(‘G’))
else:
stringb = chr((i2 + io[i] - ord(‘a’)) % 26 + ord(‘a’))
a.append(stringb)
each.append(a)
return each

table = allTable(table)
flag = ‘’
for i in range(len(input)):
flag += chr(table[i].index(input[i]) + ord(‘a’))

print flag

if name == ‘main‘:
pass
———————————分割线——————————————

加密算法本身不难,解密算法由于懒得想,知道flag长度15位,加密算法只涉及到字符位置和字符,所以可以爆字符对应表,即可断点flag。

-------------本文结束感谢您的阅读-------------