历史的第一位:在我工作的地方,一些开发商/股东将他们的知识产权汇集在一起,组成了公司。IP和源代码仍然单独存在。
此外,几年前,我们还遇到了来自第三方的工业间谍活动方面的问题。所有这些都导致一些开发人员/公司所有者提出了非常规的措施,以确保即使被盗,我们的二进制文件也无法使用。
当前的问题:我们正在租用一台超级计算机来做一些硬数字运算,以便在最后期限之前完成。麻烦的是,如果该可执行文件对埋在我们网络目录结构内部的文本文件具有静态依赖性,则该文件是可行的。
为什么不没有这种“依赖关系”就重新编译呢?因为相关开发人员当前正在个人旅行中,并且预计不会在我们的截止日期之前返回以重新编译此代码。
执行:
./run.sh
错误输出:
forrtl: No such file or directory
forrtl: severe (29): file not found, unit 1, file /foo/bar/.xyz
Image PC Routine Line Source
number_crunch 000000000048B933 Unknown Unknown Unknown
number_crunch 0000000000499ADB Unknown Unknown Unknown
number_crunch 0000000000445941 Unknown Unknown Unknown
number_crunch 0000000000403BFE Unknown Unknown Unknown
libc.so.6 00002AAAAB6C10BD Unknown Unknown Unknown
number_crunch 0000000000403B09 Unknown Unknown Unknown
run.sh的内容:
#!/bin/bash
#SBATCH --nodes=10
#SBATCH --job-name=number_crunch
#SBATCH --cpus-per-task=8
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/share/intel/ics2013/composer_xe_2013_sp1.2.144/compiler/lib/intel64/
module load glibc
./number_crunch
我需要的是:在/foo/bar/.xyz
没有root权限的情况下,欺骗二进制文件以确认结构的某种方法。
这可能吗?我知道alias
别名名称中不允许斜线,并且ln
需要我有写许可/
。
修补二进制文件怎么办?strings yourbinary | grep -F /foo/bar/.xyz
应该打印出来/foo/bar/.xyz
。如果/foo/bar/.xyz
字符串中的字符足够唯一,则可以执行以下操作:
sed -i "s_/foo/bar/\.xyz_/control/.xyz_g" yourbinary
/control/
您可以控制的目录在哪里。替换字符串的长度(以字节数为单位)必须等于原始字符串的长度。如果替换字符串较短,则可以用空字节填充sed -i "_/foo/bar/.xyz_/contr/xyz\x00\x00\x00_g" yourbinary
(o
,l
和.
,并将其填充为空字节),但是此操作的成功与否取决于对的长度是否存在硬编码依赖性/foo/bar/.xyz
。另外,您可以通过添加一些/
字符(/tmp/////.xyz
)来延长路径。
如果替换字符串较长,那么您可能不适合这种就地修补样式。但是,如果需要,您可以将其与符号链接解决方案结合使用,/control/xyz
该路径是适当长度的路径,但它指向实际文件所在的较长路径。
如果您具有专业知识,并且需要更多地控制要替换的字符串实例,则可以使用十六进制编辑器代替sed
。
在进行任何重要更改之前,我会先测试此更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句