exe->pyc && RC4 &&pyc反编译
内容
这篇文章主要介绍ctfre部分,从exe文件转化成pyc文件,顺便提一下rc4加密。
题目来自basectf,如果选手看到了请务必避开。
转化
exe->pyc
首先明白为什么要从exe->pyc,见下图:
我们发现图片虽然是一个exe,但是程序图标是可以发现是一个.py文件,于是我们要去转化成pyc
介绍一篇文章看看:csdn-blog
觉得麻烦提供一个在线网站:PyInstaller Extractor WEB (pyinstxtractor-web.netlify.app)
自己选择exe文件运行就行,会得到一个压缩包,里面会有pyc文件
pyc->py代码:
先了解什么是pyc:我们所看到的pyc文件,其实是PyCodeObject,是Python编译后的结果。当python程序运行时,编译的结果是保存于PyCodeObject,程序运行结束后,Python就将PyCodeObject写入到pyc文件中,这是个字节码文件。[引用 ]
RC4
先前得到的pyc转化为py代码,我们可以发现如下的加密脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.9
import Key
import sys
def init_Sbox(seed):
k_b = (lambda .0 = None: [ ord(seed[i % len(seed)]) for i in .0 ])(range(256))
s = list(range(256))
j = 0
for i in range(256):
j = (j + s[i] + k_b[i]) % 256
s[i] = s[j]
s[j] = s[i]
return s
def KeyStream(text, Sbox):
s = Sbox.copy()
(i, j) = (0, 0)
k = [0] * len(text)
for r in range(len(text)):
i = (i + 1) % 256
j = (j + s[i]) % 256
s[i] = s[j]
s[j] = s[i]
t = (s[i] + s[j]) % 256
k[r] = s[t] ^ Key.keykey[r % len(Key.keykey)]
return k
def Encrypt(text, seed):
Sbox = init_Sbox(seed)
key = KeyStream(text, Sbox)
enc = (lambda .0 = None: [ text[i] ^ key[i] for i in .0 ])(range(len(text)))
return bytes(enc)
enc = b'\xe6\xaeC~F\xf2\xe3\xbb\xac\x9a-\x02U\x85p\xeb\x19\xd1\xe4\xc93sG\xb0\xeb1\xb5\x05\x05\xc3\xd7\x00\x18+D\xbc\x0cO\x9em\xf1\xbd'
flag = input('Please input Your flag:')
flag = (lambda .0: [ ord(i) for i in .0 ])(flag)
flag = Encrypt(flag, Key.key)
if flag != enc:
print("It's not flag!")
continue
print('You are right!')
sys.exit(1)
continue
'''
key = 'yOU_f1nd_m3'
keykey = [66,97,115,101]
'''
这就是很明显的RC4加密了,256次循环初始化Sbox,目的就是为了打乱数字顺序,顺序依靠key,然后再通过异或获得flag。
- 解密脚本(仅针对本题,因为此题有两个key)
1 | import numpy as np |
通用解密脚本
参考:Python3.7实现RC4加密解密(超详细) - 简书 (jianshu.com)
1 | import base64 |
加解密其实没太大区别,可以上网搜搜
pyc反编译
magic number
- 正常的直接丢到在线网站分解发现无法分解,发现给的附件里面还有struct文件,上网查了查,发现是给的pyc文件的magic number出现错误
- 正确的magic number在struct
E3前面的就是magic number,修改或者增添到给的pyc文件,再去网站解密即可。
- 标题: exe->pyc && RC4 &&pyc反编译
- 作者: D0wnBe@t
- 创建于 : 2024-08-22 20:56:07
- 更新于 : 2024-10-14 19:13:51
- 链接: http://downbeat.top/2024/08/22/exe-pyc-RC4/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论