零碎操作:
ida shift+e 指定字符串的特定格式
ida shift +f12 看字符串
ida ctrl+x 指定字符串交叉引用
reverse3
找到字符串 e3nifIH9b_C@n@dH
每个字符与对应下标相减后base64解码
import base64
str=[0x65, 0x33, 0x6E, 0x69, 0x66, 0x49, 0x48, 0x39, 0x62, 0x5F,
0x43, 0x40, 0x6E, 0x40, 0x64, 0x48, 0x00]
for i in range(len(str)-1):
str[i]=chr(str[i]-i)
str.pop()
str=''.join(str)
print (str)
print (base64.b64decode(str))
helloword
是Android的apk文件,用apk ide 打开
找到helloword的main那里,看到flag
不一样的flag
是一个走迷宫
应该要观察到后面判断的1和**#**,与上面有个字符串长度为25
*11110100001010000101111#
可以分为5列
*1111
01000
01010
00010
1111#
对应flag是
flag{222441144222}
SimpleRev
小端程序的话,转换ascll码要反一下,(应该)
可得到两个字符串
text=killshadow
key=ADSFKNDCLS
转换为小写key=adsfkndcls
思路就是把key的每个字符经过结合flag的每个字符,特定操作后变成text的每个字符
脚本的话用枚举,然后模仿程序的操作,满足条件就break然后找下一个字符
(感觉逆着写写不出来)
#SimpleRev
text=['k','i','l','l','s','h','a','d','o','w']
key=['a','d','s','f','k','n','d','c','l','s']
flag=[]
v3=0
for i in range(len(text)):
for k in range(65,123):
if ( ((k<=96 or k>122)and (k>64 and k<=90))or (k>96 and k<=122) ):
if (ord(text[i])==(k-39-ord(key[v3%len(text)])+97)%26+97):
flag.append(chr(k))
v3+=1
break
flag=''.join(flag)
print(flag)
Java逆向解密
用jd-gui打开
然后观察下,就是flag每个ascll+64异或0x20要等于key的每个数值
key=[180, 136, 137, 147, 191, 137, 147, 191, 148, 136,
133, 191, 134, 140, 129, 135, 191, 65]
flag=[]
for i in range(len(key)):
flag.append(chr(key[i]-64^0x20))
flag=''.join(flag)
print("flag{"+flag+"}")
[GXYCTF2019]luck_guy
这种elf文件都是小端的,ascll码要反以下用reverse()方法
找到字符串GXY{do_not_
根据程序功能减-1-2,组合就能得到flag了
#[GXYCTF2019]luck_guy
s=[127,102,111,96,103,117,99,105]
s.reverse()
for i in range(1):
for i in range(len(s)):
if (i%2==1):
s[i]-=2
else:
s[i]-=1
for i in range(len(s)):
s[i]=chr(s[i])
flag=''.join(s)
print('GXY{do_not_'+flag)
[BJDCTF2020]JustRE
发现字符串BJD{%d%d2069a45792d233ac}
两个fomat,跟进一看有19999,和0两个参数,放进去就行