加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用一点信息注释C二进制文件

发布时间:2020-12-16 07:02:15 所属栏目:百科 来源:网络整理
导读:我正在尝试用各种信息“水
我正在尝试用各种信息“水印”一个二进制文件.在构建时包含此信息很困难,因为我无法控制构建过程.到目前为止,唯一的想法接近于我从 here获得的内容,它是一个脚本,当给出一个c二进制文件时,会生成一个Bash脚本,如下所示.

简而言之,它在原始二进制文件中附加一个bash if-else,它检查第一个参数是否为“–version”(在这种情况下它会回显一些信息)或者不是(在这种情况下它只是将自身解码为文件“originalBinary”) “然后运行./originalBinary).

这显然不太理想:

>我现在有2份二进制文件(对于大型二进制文件可能有问题)和
>进程运行是由./originalBinary启动的,这对于不知道发生了什么的人来说很困惑

我想知道的是我是否可以做一些事情,比如用某种特殊的exec $0替换./originalBinary调用,我也可以告诉exec不要从头开始读取文件,但偏移量为100字符(或者开头的Bash位的长度).

另一个想法是让Bash脚本自己编辑,即用sed删除前21行,调用./ $0来调用自身,然后在./$0命令返回时追加if-else.然而,这似乎很脆弱(如果机器在调用返回之前崩溃了怎么办?).

最后,我得到的印象是,当二进制文件是共享资源时,这会失败,因为当它尝试加载库时,链接器会被beginnig中的bash东西搞糊涂:(

或者,你能建议任何其他方式来注释c二进制后构建吗?

我考虑使用所需信息准备一个目标文件,而不是将其链接到给定的二进制文件,但是这需要我以某种方式将ELF转换回进入它的目标文件,将我的目标文件添加到列表中,然后重新链接(我从here得到的印象是,这可以用objcopy完成,但我还没有设法让它工作).此外,这种方法的问题在于没有很好的方法来获取信息,比如使用“–version”调用二进制文件.

我想做什么不可能?我希望我能清楚地解释一下.

谢谢.

#!/bin/bash

function PrintInformation()
{
    echo "various bits of information"
}

if [[ $# -eq 1 && "$1" == "--version" ]]; then
    PrintInformation
    exit 0
else
    uudecode $0
    ./originalBinary
    exit 0
fi

begin 755 originalBinary
M?T5,1@(!`0````````````(`/@`!````X`9```````!``````````'`1````
M`````````$``.``)`$``'@`;``8````%````0`````````!``$```````$``
M0```````^`$```````#X`0````````@``````````P````0````X`@``````
M`#@"0```````.`)````````<`````````!P``````````0`````````!````
M!0````````````````!``````````$```````*0*````````I`H`````````
M`"````````$````&`````T```````#P#6```````/`-8```````6`(`````
M``"8`P``````````(````````@````8````@#@```````"`.8```````(`Y@
M``````#``0```````,`!````````"``````````$````!````%0"````````
M5`)```````!4`D```````$0`````````1``````````$`````````%#E=&0$
M````L`D```````"P"4```````+`)0```````-``````````T``````````0`
M````````4>5T9`8`````````````````````````````````````````````
M````````````"`````````!2Y71D!````/`-`````````U@``````#P#6``
...............// my uuencode'd binary here
end

解决方法

您可以使用libelf,ELFsh或其他ELF工具在二进制文件中创建自己的“部分”,并在其中放置您想要的任何内容. This question还有更多链接.如果你想要做的只是将一个数据块添加到二进制文件中,可能更容易使用像 answered here这样的objcopy –add-section.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读