IDA中文不显示解决
参考链接
VScode中文乱码解决参考链接
(1 ~ 10攻防世界)(11~20为Buu,近乎为shift + F12
查找字符串)
1. xxxorrr
题目链接
题目WP
心得:可能会有其它隐藏函数对所需结果进行操作
2. SignIn
RSA算法介绍
c是密文,m是明文,e是公钥,d是私钥,n=pq
3. IgniteMe
4. python-trade
5. 流浪者
6. csaw2013reversing2
7. BABYRE
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
9. 666
10. re1
11. reverse1
12. reverse2
13. 内涵的软件
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 1
0 1 0 0 0
0 1 0 1 0
0 0 0 1 0
1 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)