1
AoEiuV020JP 347 天前 via Android
管道,
|
2
ihciah 347 天前 1
首先实现功能的话没必要走文件,直接将内容 pipe 给 sh 或者作为 sh -c 的参数即可;其次你要加密这个就有点难了,至少你得把 sh 的逻辑自己实现一把,否则随便 alias sh 为一个 logger + 系统 sh 就能记录下来你的原始脚本(也是常见的渗透手段),你甚至不能在某个瞬间解压出明文脚本内容,否则直接 frida 挂上去就 dump 出来了。
|
3
proxytoworld 347 天前
释放文件不是直接释放吗
|
4
jiangaimin 347 天前
双击程序运行时,创建一个提前写好的脚本文件,运行之后再立即删除?如果脚本字符过多,可以考虑将字符以二进制形式写入到一个文件中?和程序放一起?用的时候读取。这样就算别人有文件,打开也是乱码~
|
5
vituralfuture 347 天前 via Android
首先确定一点,使用外部的 sh 肯定不行,因为不能保证/usr/bin/sh 没有被修改过,所以可以考虑找到 sh 的源码,然后在 sh 的基础上添加上要允许的脚本的字符串,调用 sh 源码中的函数直接解释 shell 脚本,另外还需要考虑一下混淆,免得别人反汇编就搞懂了,不过这样已经可以编译成可执行了,很容易混淆了,别人想看 shell 脚本难度就大多了
|
6
body007 347 天前
|
7
SmiteChow 347 天前
想得太复杂了,脚本自解压自动执行就行了,搜索 makeself
|
8
GeekGao 346 天前
将 shell 脚本转化为二进制数据。你可以使用 xxd 工具来完成这个任务。xxd 是一个可以将任何文件转化为 C 语言数据声明的工具,这对于将二进制数据嵌入到 C 程序中非常有用。你可以使用以下命令来生成二进制数据:
xxd -i myshell.sh myshell.h 接下来,你需要在程序中包含这个生成的头文件,并使用这些数据。你可以使用 fwrite 函数来将这些数据写入到 /tmp 目录下的一个文件中,示例代码: ``` #include <stdio.h> #include "myshell.h" int main() { FILE *file = fopen("/tmp/myshell.sh", "wb"); if (file == NULL) { return 1; } fwrite(myshell, sizeof(myshell), 1, file); fclose(file); system("sh /tmp/myshell.sh"); return 0; } ``` |
9
liberize 303 天前 via Android
参考我的项目:
https://github.com/liberize/ssc 目前用的是 c++14 constexpr 实现的编译时混淆。 还有一个思路是用 ssc 嵌入解释器的方式,把脚本加密后放到 data 段。 |