小编Ali*_*250的帖子

在Python中复制shell环境以执行bash命令

我正在尝试使用该模块从 python 内部执行 bash 脚本subprocess。问题是这个 bash 脚本依赖于我的文件中设置的许多环境变量.bashrc。我想要的是 python 子进程能够准确复制启动终端窗口时设置的环境。到目前为止我尝试过:

p = subprocess.Popen(args=['my-script.sh', '--additional_args'], stdout=subprocess.PIPE, env=os.environ.copy(), shell=True)
output_buffer, return_code = p.communicate()
Run Code Online (Sandbox Code Playgroud)

但后来在某处读到,即使在执行完之后shell=True.bashrc文件仍然没有加载,我应该尝试这样的事情:

p = subprocess.Popen(args=['/bin/bash', '-i', '-c', 'my_script.sh', '--additional_args'], stdout=subprocess.PIPE)
output_buffer, return_code = p.communicate()
Run Code Online (Sandbox Code Playgroud)

但是通过这个函数调用,我得到这个错误:

tput: No value for $TERM and no -T specified
bash: cannot set terminal process group (2071): Inappropriate ioctl for device
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)

python linux bash shell

5
推荐指数
1
解决办法
2174
查看次数

混淆存储在源代码中的解密密钥

我想随我的软件一起发送一个文件,其内容需要对我的软件用户隐藏(无法进行在线身份验证,因为该软件需要离线执行)。我执行此操作的方法是使用 AES-256 加密文件,然后将加密密钥存储在源文件中。但事实证明,从编译的可执行文件中恢复这个密钥非常容易,因为整个字符串只是位于一个连续的块中。以下 Python 代码查找密钥:

with open("/path/to/executable", 'rb') as readfile:
    content = readfile.read()

to_find = 'C0SH3VKNTKR4CRGH0R8WXD9WR5I1GS'  # example key

for i in range(len(content) - len(to_find)):
substr = content[i:i + len(to_find)]
if substr == to_find:
    print "Found at index %d" % i
Run Code Online (Sandbox Code Playgroud)

当然,作为攻击者,我不知道我在寻找什么。但是,通过查看可执行文件所依赖的共享库(这些库是开源的,解密文件的格式也是一种广泛使用的标准),人们可以轻松推断出解密文件所需的格式。因此基本上,人们可以在构成可执行文件的二进制内容上滑动一个 30 个字符的长窗口,使用每个字符串解密文件,然后检查是否可以正确解析它。

我知道,如果密钥以某种格式存在于源代码中,则不可能完全保护密钥,但是在这种情况下,有哪些典型技术可用于使攻击者的日子变得更加艰难?

我想到的明显解决方案是将密钥拆分为多个子字符串并将它们分散在整个代码中,或者在字符串中间插入虚拟字符,但我对软件安全性的了解为零,所以很高兴听到其他建议。

security encryption obfuscation

5
推荐指数
1
解决办法
2480
查看次数

标签 统计

bash ×1

encryption ×1

linux ×1

obfuscation ×1

python ×1

security ×1

shell ×1