首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用DDexec在Linux上隐蔽运行二进制文件

关于DDexec DDexec是一种能够在Linux上使用无文件技术和隐秘技术运行二进制文件的方法,它可以使用dd工具来将Shell替换为其他进程。...众所周知,在Linux上运行一个程序,则这个程序必须以一个文件的形式存在,而且必须能够通过文件系统层次结构并以某种方式访问到它,这也是execve()的工作机制。...这种机制不仅使得我们可以轻松控制Linux系统中运行的内容,而且还可以轻松检测到安全威胁或攻击者植入的恶意程序,甚至还可以阻止攻击者尝试执行他们的任何工具,比如说不允许未经授权的用户将可执行文件放在任何地方...; 3、使用lseek()来对文件进行查询,在Shell的帮助下,我们可以使用dd工具轻松实现; 工具下载 广大研究人员可以使用下列命令将该项目源码克隆至本地: git clone https://...下面给出的是一个使用样例: base64 -w0 /bin/ls | bash ddexec.sh /bin/ls -lA 项目中还提供了一个ddsc.sh脚本,该脚本允许我们直接运行二进制代码,下面给出的是一段

3.3K20

多平台容器镜像构建就看这一篇

程序代码 一些编程语言的编译器能够为其它平台编译二进制文件,最为著名的包括 Golang 和 Rust。...交叉编译 在我们的 Golang 代码中没有使用 CGO 的时候,通过简单设置环境变量就能够交叉编译出其它平台和操作系统上能够执行的二进制文件。...本篇中,我们构建能够在 Linux 发行版中执行的容器镜像,所以编译目标系统环境变量GOOS统一设置为linux。执行代码段0-4中的命令构建出二进制文件备用。 // 代码段-04 #!...fix_binary 标志允许内核在容器或chroot内使用binfmt_misc注册的二进制格式处理程序,即使该处理程序二进制文件不是该容器或chroot内可见的文件系统的一部分。...因为程序执行时会在当前程序可见的文件系统中查找动态库,而在容器或chroot环境中注册的处理程序在其它的 cgroup namespace 中可能无法找到,所以需要静态编译连接的QEMU。

2K50
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    M10F支持扩展卡吗_ibb与obb

    可以通过对所有数据结构的准确定义 我的理解:BTF实现了对BPF源程序代码的解释,从而方便调试、避免对内核头文件和Clang的依赖; 未来一个带着BTF信息的Linux内核vmlinux二进制文件...)是一个额外的负担 BTF和CO-RE的目标就是: BPF 工具现在可以是一个轻量的ELF二进制文件, 其中包含了预编译的BPF字节码,它可以在任何具有 BTF 的内核上运行,而不是要求客户安装各种重量级...Clang编译出来的目标文件(eBPF字节码),需要由在本机运行的一个程序进行加载(这些示例的文件名称中通常具有「_user.c」) kern.c和user.c分别对应内核态和用户态的eBPF使用...(我的文件在vim /boot/config-4.15.0-48-generic , 注意除非重新编译,否则此文件不能更改) 建议按照安装BCC官方教程 最简单的方式:包管理器安装 # 第一种方式:包安装...**如果你需要在C代码中定义一些不会在探针上执行的辅助函数,则需要将它们定义为静态内联,以便编译器内联。**有时您还需要为其添加 _always_inline 函数属性。

    1.1K20

    减小镜像体积-docker最佳实践

    如果我们使用Ubuntu镜像,安装C编译器,然后编译程序,最终构建出镜像大小只有300MB,和第一次相比,减小了不少, 但这对于一个实际只有 12KB 的二进制文件来说,仍然大的难以接受。...在90年代,通常使用静态链接的方式static linking, 这意味着程序使用的库将包含在最终的二进制文件中,在使用软盘分发程序和没有标准库的情况下,这种方式十分方便, 但是在linux分时系统流行后...使用动态链接编译的程序,最终二进制文件不包含具体的库,而只包含对依赖库的引用,例如一个程序需要libtrigonometry.so中的cos和sin和tan函数。...使用静态链接 我们可以使用静态链接,这取决于我们具体使用的构建工具,如果使用gcc,可以通过-static实现静态链接: 1 gcc -o hello hello.c -static 最终构建的二进制文件大小...760KB而不16KB,主要是嵌入的库文件导致镜像变大,但是运行镜像时,将不再会报错。

    1.4K10

    【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    Linux 与 UNIX 内核 对比 UNIX 内核运行状况 : UNIX 内核是一个 不可分割的静态可执行库, 其运行的时候 必须在一个 单独的地址空间中运行 这个可执行块; Linux UNIX 内存管理比较...; -- Linux 内存管理 : Linux 可以运行在没有 MMU 的系统上; 单内核 : 从整体上将内核作为一个单独的过程来实现, 运行在一个单独的地址空间中; -- 内核间服务通信 : 所有的内核服务都运行在同一空间...- CONFIG_ATL1 = y : 递归进入本目录的字目录 atl1, 并根据该子目录下的 Makefile 文件的内容决定该子目录如何进行编译; -- 其它状况 : 不编译; 4....并行编译 : make 可以进行多作业并行编译, 在多核的机器上这样进行编译效率很高; -- 并行编译弊端 : 如果 Makefile 出现依赖错误, 并行编译会报错, 使用 单作业 make 可以编译通过...安装内核 (1) 安装内核 编译和安装系统 : 本人用的 Ubuntu 系统, 安装内核比较麻烦, 这里只列出 Redhat 系统安装内核的流程, 即 在 ubuntu 上编译, 在 Redhat 上安装

    2.5K51

    Go 编程语言的真正优势是什么?

    作为一种用于构建和维护各种跨平台企业应用程序的类 C 语言,Go 与 Java 有很多共同之处,作为一种能够快速开发可能在任何地方运行的代码的方法,您可以在 Go 和 Python 之间进行比较,尽管差异远大于相似之处...与 Python 等脚本语言不同,Go 代码编译为快速运行的本机二进制文件,与 C 或 C++ 不同的是,Go 的编译速度非常快——足以让使用 Go 感觉更像是使用脚本语言而不是编译语言。...Go 很快 Go 二进制文件的运行速度比 C 对应的要慢,但对于大多数应用程序来说,速度上的差异可以忽略不计。...(用于 SSH 等),Teleport 可以通过从源代码编译或下载预构建的二进制文件快速轻松地部署在服务器上。...Go 的另一个潜在缺点是生成的二进制文件的大小,Go 二进制文件默认是静态编译的,这意味着运行时所需的一切都包含在二进制映像中。这种方法简化了构建和部署过程,但代价是简单的“你好,世界!”

    1.3K40

    连1.0版本都没有,Uber为什么会采用这样一项新技术?

    现在,我们看下非封闭式 C++ 工具链的局限性: 不能交叉编译。所以,如果需要 CGo 的话(我们的许多服务都需要),我们就无法在 Mac 上编译生成 Linux 上的可执行文件。...否则,如果构建主机上 glibc 的版本比生产主机上的新,那么生成的二进制文件将链接到较新的 glibc 版本,就会与生产主机上的旧版本不兼容。...我们无法使用新的编译器,即使它提供了更好的优化功能,因为我们在构建机群上运行的是旧版本的操作系统(只向后迁移编译器,而不迁移 glibc,本身就有风险)。...Go 的新版本的官方二进制文件在构建时使用的 GCC 版本,比我们的一些构建机器上的新。在这些机器上,我们不得不通过从源代码编译 Go 来解决这个问题。...我希望我的二进制文件是静态的,但 Bazel 并没有让这个过程变得简单。

    1.5K20

    持续发烧,聊聊Dart语言的静态编译,能挑战Go不?

    今天,我们再来谈谈 Dart 的另外一大优势,那就是静态编译。估计 php 和 python 直接认输, java 和 go 冷眼旁观? 提前预告,内容略干,请自带矿泉水。...bin/main.dart 将得到 main.exe 文件,该文件可以在 win 平台直接运行, 但是它不能在 linux 下执行 那能不能编译成通用的,各平台都通用的文件呢?...当然,你也可以执行下面的命令,将其编译成 aot 文件 dart compile aot-snapshot bin/main.dart 它有一个不好的地方,win平台编译的aot文件,不能在linux下使用...同理, linux 下编译的不能在win下使用。 当然,它最好的地方是性能最好,所以也是最推荐使用的。 还有哪些需要补充的吗 有的。...实际上用处非常大,包括 java 领域里 SpringBoot 框架, PHP 领域里的 Laravel 框架,在实际运行的时候,都需要使用到 反射 功能,来获取运行的类的属性信息,方法信息,以完成一些自动化处理

    2.9K30

    MTK T750平台:CCCI驱动调试

    ,右侧为4.15.0,可以很明显的看到4.15.0中新增了几个成员用于更好的系统性能,而在4.9.0中是没有的,两者间存在差异,由于是新增功能,未能在4.9.0中找到替代,所以修改CCCI驱动源码,将该结构体相关新增功能进行版本的区分...,右侧为4.15.0,可以很明显的看到4.15.0中新增了几个成员用于更好的系统性能,而在4.9.0中是没有的,两者间存在差异,由于是新增功能,未能在4.9.0中找到替代,所以修改CCCI驱动源码,将该结构体相关新增功能进行版本的区分...版本相关文件: 上图是struct kref结构体截图,左侧为4.9.0,右侧为4.15.0,可以看到4.15.0中使用的refcount_t结构体作为自己的成员,再进一步使用atomic_t...2.10 Unknown symbol in module 通过对内核版本的对比和适配,完成了驱动在客户环境上的编译,现进行加载验证: root@:/home/sdk/Linux_PCIe_Driver_v1.0.26...总结 驱动在新环境的适配,除了架构的差异,更多的是内核上的差异,所以我们需要去按照编译报错信息对比内核相关文件,按照差异去找是否有替换方案,如果没有,为新增内容,最好的方式便是用内核版本进行控制,便于管理和维护

    2.5K30

    使用Zig在arm64上引导Uber的基础设施

    主机(host)是指编译二进制文件的机器。 目标平台(target)是指运行二进制文件的机器。 在进行原生编译时,主机和目标是相同的平台(即操作系统、处理器架构和共享库是相同的)。...例如,一块智能手表可以运行已编译的代码,但不能运行编译器,因此我们可以使用交叉编译器为手表编译程序。 sysroot 是目标平台文件系统的归档。例如,特定于目标平台的头文件、共享库、静态库。...它们被静态地链接到 Zig 二进制文件中,对于 macOS,Zig 实现了自己的链接器。 /usr/aarch64-linux-gnu/…中的头文件。...目前不可能在我们的 Go 代码库中声明一个不能编译到 arm64 的新的 Debian 包。 在能够将程序编译为 arm64 之后,我们开始采用所有可以存储、下载和执行原生二进制文件的系统。...虽然可以在 arm64 硬件上运行我们的核心基础设施,但我们还没有准备好运行面向客户的应用程序。我们的下一步是在 arm64 上试验面向客户的应用程序,这样就可以测试它的性能并决定未来的方向。

    37130

    go-环境配置

    (go安装目录,为当前电脑安装目录) 2、编译运行指令 go build test.go:将相应源码编译为可执行二进制文件(不同系统编译之后文件不同,如Windows下编译为exe,可以修改配置项,在...Windows下编译成Linux执行文件,具体百度) go build -o mhello.exe hello.go:可以指定编译后可执行二进制文件名称 go run test.go:直接运行代码 gofmt...-w test.go:格式化源码文件,并将格式化后代码重新写入 二者区别: go build 将相关依赖库一起打包,可以在任意机器运行,go run 需要go环境支持 3、标识符规范,go不同之处 变量名...modules替换旧的集合GOPATH(工作目录,不在需要将项目放置于工作目录下,只需要初始化项目生成go.mod文件即可),来指定使用那些源文件。...模块名称 初始化模块(go mod init hello) 使用go.mod:通过go env查看配置 GO111MODULE=off:go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过

    35310

    Linux内核开发_1_编译LInux内核

    这里我们使用静态编译,因为我们等下要使用的文件系统是临时制作的,里面除了包含init以外不会有任何库,所以不可以动态加载,必须使用静态: gcc -static -O0 init.c -o init 这里使用...,这是我目前认为的原因,我只是在ubtunu上安装了旧版本的gcc,但是并没有选择降级glib等库,这可能是原因之一,但是如果我使用了旧版本的glib库还有openssl等,那么一些ubtunu上较新的软件可能使用了新版本...,都会被用在正在开发中最新的Linux内核,而除了原始版的Linux内核不是在Linux上编译出来的以外,其余的Linux内核版本都是在Linux内核上开发而来的,而使用的开发工具(gcc)就是那个时代最新的版本...其次是不同的发行版它自带的一些依赖LIB都是比较新的,因为它也要为自己的Linux内核提供一个运行环境,而问题的关键是,当我们编译Linux内核时,不确定编译器会不会把当前操作系统上的一些依赖LIB编译到...如正在编译Linux2.6,他使用的glib是3,那么我们当前的发行版使用的是6 一旦编译起来,gcc会从系统环境里把6的一些依赖lib链接到2.6里去了,从而导致某些函数可能在未来的运行结果或者参数要求发生了一点变化

    19.6K20

    Golang - 从源码到二进制:探索在国产CPU架构上交叉编译Minio的方法

    在C++中,交叉编译通常用于在开发机器上编译目标平台的程序,例如在使用x86架构的开发机器上编译ARM架构的程序。...这些工具链需要能够将源代码编译成目标平台可执行的二进制文件。 配置环境: 在进行交叉编译之前,需要配置开发环境,以确保编译器和链接器能够正确识别目标平台的架构和操作系统。...链接生成可执行文件: 编译完成后,使用交叉链接器将编译生成的目标文件链接成可执行文件。链接器需要确保将目标平台特定的库链接到可执行文件中,以确保程序在目标平台上能够正确运行。...目标 我们要通过minio的源码 在x86上编译出来 能够在mips64 和 loongarch64架构下运行的minio的二进制包 。...顺便提一下: 如果仅仅是在特定的架构下编译特定的二进制包,直接使用 make命令即可 (make命令调用Makefile 文件中,也是调用了go build 编译工具链 ) 编译loongarch架构下的

    67500

    完全可复制、经过验证的 Go 工具链

    构建的常见相关输入包括: •要构建的源代码的特定版本;•将包括在构建中的依赖项的特定版本;•运行构建的操作系统,这可能会影响生成的二进制文件中的路径名;•构建系统上运行的CPU架构,这可能会影响编译器使用的优化或某些数据结构的布局...为了使 Go 在 Alpine Linux 上运行,Go 引导过程如下: 引导程序 cmd/dist 检查了本地系统的动态链接器,并将该值写入一个新的源文件,与其余链接器源代码一起编译,实际上将默认值硬编码到链接器本身...对于 Go 1.20,我们采取了一步措施来解决可重复性问题,即在运行时更改链接器,以便在运行时咨询主机配置,而不是在工具链构建时硬编码默认值: 这解决了在 Alpine Linux 上链接器二进制文件的可移植性问题...去除这些相关的输入使得可以在不损失功能的情况下从不同系统进行交叉编译 Go 工具链成为可能。...验证Ubuntu的Go工具链 Go工具链的易重现构建应该意味着在go.dev上发布的工具链中的二进制文件与其他打包系统中包含的二进制文件相匹配,即使这些打包程序是从源代码构建的。

    37410

    不要轻易使用 Alpine 镜像来构建 Docker 镜像,有坑!

    Go 语言镜像精简 Go 语言程序编译时会将所有必须的依赖编译到二进制文件中,但也不能完全肯定它使用的是静态链接,因为 Go 的某些包是依赖系统标准库的,例如使用到 DNS 解析的包。.../whatsmyip"] 由于编译生成的是静态二进制文件,因此可以直接跑在 scratch 镜像中 ?...whatsmyip.go 这样指定之后,如果导入的其他包都没有用到系统库,那么编译得到的就是静态二进制文件。...如果非要考虑多阶段构建,就更复杂了,你得搞清楚如何将所有的依赖编译成二进制文件,想想就头大。因此一般不推荐在解释型语言中使用多阶段构建。...在 Linux 上需要构建一个特殊版本的 Rust 编译器,构建的依赖库就是 musl libc,你没有看错,就是 Alpine 中的那个 musl libc。

    26.6K56

    Golang 中的微服务-第二部分-Docker和go-micro

    (译注: Docker 容器的创建一般都使用 Dockerfile,容器会根据这个文件创建相对应的运行环境) 在该文件中添加以下内容: 如果你在 Linux 上运行,你可能会遇到使用 Alpine 的问题...所以,如果你在 Linux 机器上关注这篇文章,只需用 替换 即可,你应该能够正常运行。 稍后我们将会介绍一个更好的方法来构建我们的二进制文件。...这时我们的应用程序目录是默认的目录。然后,我们将编译后的二进制文件添加到我们的 Docker 容器中,并运行它。 现在我们来更新 文件来构建我们的 Docker 镜像。...GOOS 和 GOARCH 允许您为另一个操作系统交叉编译您的二进制文件,由于我在 Macbook上开发,所以无法编译出二进制文件,让它在 Docker 容器中运行它,而该容器使用的是 Linux。...与之前类似,我们要为 Linux 构建我们的二进制文件。 当我们运行我们的 docker 镜像时,我们想传递一个环境变量来指示 go-micro 使用 mdns。

    1.5K50

    Linux共享库、静态库、动态库详解

    1、静态函数库,是在程序执行前就加入到目标程序中去了 ; 2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)...这些函数库如何使用 在基于GNU glibc的系统里,包括所有的linux系统,启动一个ELF格式的二进制可执行文件会自动启动和运行一个program loader。...如何使用库 在基于GNU glibc的系统(包括所有Linux系统)上,启动ELF二进制可执行文件会自动导致程序加载器被加载并运行。...不兼容的库 当新版本的库与旧版本的二进制不兼容时,soname需要更改。...以下是您不能在C ++中执行的(可能是不完整的)列表,并保留二进制兼容性,如 Troll Tech的技术常见问题报告: 添加虚拟函数的重新实现(除非它对于旧的二进制文件调用原始实现是安全的),因为编译器在编译时评估

    8.9K11

    android设备上如何运行C语言原生程序

    前言 咱们知道android设备可以直接运行apk应用,或者使用dalvikvm指令运行dex文件中的程序, 但是这两者本质上使用的语言都是java或者smali, 如果需要执行C语言程序,需要借助NDK...交叉编译 C语言是一门跨平台的语言,语言跨平台,但是程序不跨平台, 也就是说在windows平台下编译的程序只能在windows平台上执行,linux亦是如此, 为什么会出现这种情况呢?...cpu所指行,那么在windows平台上进行本机编译的C语言代码,会根据当前平台的cpu架构和操作系统生成只能在当前平台运行的程序 如果我想在windows平台编译出能在linux系统或者在ARM 设备中运行的程序...回到主题 我需要用C语言编写一个能在安卓设备上运行的程序, 首先安卓设备大多采用的是ARM架构cpu, 系统采用的是linux系统, 如果我们想在安卓设备中进行本机编译的话,实现起来比较困难, 那么咱们可以借助交叉编译工具...test.c -o test -static 因为Android 的 Linux 内核没有标准IO库函数,因此我们采用静态编译的方式进行编译 末尾-static必须要有 第三步 将编译后的可执行文件传至安卓设备

    5.4K20

    献给 Debian 和 Ubuntu 用户的一组实用程序

    通过使用这些工具,用户可以找到哪些程序占用更多磁盘空间,更新系统后需要重新启动哪些服务,在一个软件包中搜索与模式匹配的文件,根据搜索字符串列出已安装的包等等。...Debian-goodies – 给 Debian 和 Ubuntu 用户的实用程序 debian-goodies 包可以在 Debian 和其衍生的 Ubuntu 以及其它 Ubuntu 变体(如 Linux...这就是 checkrestart 派上用场的地方。该实用程序将查找哪些进程仍在使用旧版本的库,然后,你可以重新启动服务。...$ dpigs 260644 linux-firmware 167195 linux-modules-extra-4.15.0-20-generic 75186 linux-headers-4.15.0...如果要显示更多包,例如 20 个,运行以下命令: $ dpigs -n 20 7. debman debman 实用程序允许你轻松查看二进制文件 .deb 中的手册页而不提取它。

    74620
    领券