IDA中文不显示解决
参考链接
VScode中文乱码解决参考链接
(1 ~ 10攻防世界)(11~20为Buu,近乎为shift + F12
查找字符串)
1. xxxorrr
题目链接
题目WP
心得:可能会有其它隐藏函数对所需结果进行操作
2. SignIn
RSA算法介绍
c是密文,m是明文,e是公钥,d是私钥,n=pq
题目链接:其中用到GMP库
题目WP
3. IgniteMe
题目链接
题目WP
4. python-trade
题目链接
题目WP
5. 流浪者
题目链接
题目WP
6. csaw2013reversing2
题目链接
题目WP
7. BABYRE
题目链接
题目WP
input = "fmcd" + chr(0x7f) + "k7d;V`;np"
res = ''
for i, c in enumerate(input): # enumerate枚举,将其元素对应数组下标res += chr(ord(c) ^ i)
print(res)"""output
flag{n1c3_j0b}
"""
8. CTFshow re2
rc4加密
题目链接
题目WP
9. 666
题目链接
题目WP
10. re1
题目链接
简单WP
11. reverse1
Buuctf reverse1
题目wp
12. reverse2
Buuctf reverse2
题目WP
13. 内涵的软件
Buuctf 内涵的软件
题目wp
14. 新年快乐
Buuctf 新年快乐
- upx -d 脱壳
- 题目WP2
15. xor
Buuctf xor
IDA
shift + e 提取static字符串
flag = ""
static = (102, 10, 107, 12, 119, 38, 79, 46, 64, 17,120, 13, 90, 59, 85, 17, 112, 25, 70, 31,118, 34, 77, 35, 68, 14, 103, 6, 104, 15,71, 50, 79,)
print('f', end = "")
for i in range(1, len(static)):flag += chr(static[i] ^ static[i - 1])
print(flag)
17. helloworld
下载文件为一个apk文件,用ApkIDE打开,查找main函数,发现flag
18. reverse3
PE查壳,无壳,且为32为程序
IDA32位打开,找main函数,看反汇编有点麻烦,F5查看伪C代码,查看到关键位置
进入sub_4110BE
函数,精确发现讯在大量的2,4移位,自己了解过base64
加密解密,可得知其为类似base64加密,点击黄色区域查看base64表为ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
其中Str2
e3nifIH9b_C@n@dH已知,for循环将字符串还原,还原后直接在线转换
p = ""
s = "e3nifIH9b_C@n@dH"
for i in range(len(s)):p += chr(ord(s[i]) - i)
print(p)
19. 不一样的flag
下载文件打开,出现下图左侧结果,让我们输入,拖入IDA,伪代码显示如下右侧,简单分析
从以下25的字符串长度,以及移位4,1的特性,可简单绘制5X5
的格子,*
表示推箱人,#
表示出口,1
表示墙,由图可简单发现一条出路,按照路径进行推动,222441144222
即为flag
m = "*11110100001010000101111#"
print(len(m)) # 25
'''* 1 1 1 10 1 0 0 00 1 0 1 00 0 0 1 01 1 1 1 #
'''
20. SimpleRev
这题有点意思,其在强制转换时考虑到了小端序存储
等知识点
小端存序储示例:
存储
12345678
按照字节存储(char
):12 34 56 78
按照字存储(word
):34 12 78 56
按照双字存储(dword
):78 56 34 12
进入题目,IDAF5
伪代码,进入关键函数Decry(),关键步骤如下
红色方框发现其强制转换了,则小端序存储读其内存时就会发生错误,即上面所注释就不正确,这里还以 存储12345678
为例
- 当从
dword
强转为char
时,由于存储
方式并没有改变,读取
方式发生了改变,原来是小端序4字节读取,现今变为小端序1字节读取,所以此时text拼接,应将后面v9倒序,即text = killshadow
;- 同理,倒过来依旧成立,数组在计算机的存储是按照其数据类型依次存储的,学过编程语言的应该都了解。
char
类型存储方式未改变,以dword
的4字节方式来读取,再次将后面src倒序,即key = ADSFKNDCLS
根据以上分析将key
转为小写,Str2=text
求v1
即可
key = 'adsfkndcls'
text = str2 = 'killshadow'
flag = ''
# 方法一,此方法更容易理解
for i in range(len(key)):for j in range(65, 122):if ord(text[i]) == (j - 39 - ord(key[i % 10]) + 97) % 26 + 97:flag += chr(j)break
print(flag)
# 方法二
for i in range(len(str2)):for j in range(10):m = ord(str2[i]) - 97 + 26 * j - 97 + 39 + ord(key[i])if (m > 64) & (m < 91):flag += chr(m)break
print(flag)