平时逛到一些有意思、或者确实能省事的网站,随手记在这里。按用途分类,方便以后翻找;发现更好的同类站再补充或替换。

开发 / 运维

编译、调试、查文档、在线跑代码、看日志之类。

  • Compiler Explorer (Godbolt) — 在线看 C/C++ 等代码对应的汇编输出。适合对照编译器优化、理解内联和指令生成。注意:和本机编译选项、标准库版本可能不一致。
  • Rust Playground — 浏览器里写、编译、运行 Rust 片段,可切换 edition 和优化级别,还能看 MIR/LLVM IR/汇编。适合快速验证语法、给别人发可复现示例。注意:不能用本地 crate 依赖,复杂项目还是要 cargo
  • regex101 — 正则在线调试,带匹配高亮和解释。写复杂正则时先用它验证。注意:引擎要选对你目标语言(PCRE / ECMAScript 等)。
  • crontab.guru — cron 表达式可读化解释。写定时任务忘语法时查一下。注意:只覆盖标准 5 字段 cron,别和 systemd timer 混用。
阅读全文 »

声明

  1. 本文内容仅用于安全研究与技术学习,旨在分析隐藏进程相关实现及检测思路。
  2. 文中涉及的技术与代码具有潜在滥用风险,请勿用于未授权场景或任何非法用途。
  3. 相关实验与验证应在隔离的测试环境中进行,避免对真实系统造成影响。
  4. 作者不对因使用本文内容而产生的任何直接或间接后果负责。

什么是应用层隐藏进程

应用层隐藏进程本质不是让进程真的从内核消失,而是:

让“观察者看不到”或“看到被篡改后的结果”

换句话说:

  • 内核里的进程仍然存在
  • 只是用户态工具(pstop等)被“喂了假数据”

因此,应用层隐藏的核心是:

拦截信息获取路径 + 篡改结果

阅读全文 »

本文记录 YouCompleteMe(YCM)的安装与 C/C++ 补全配置,并留存 .vimrccompile_commands.json 等要点。行文按「先装起来 → 再配工程 → 再调 clangd → 最后理解 LSP」的顺序展开。安装方式基于 vim-plug + install.py --clangd-completer;Neovim 用户可将插件目录改为 ~/.local/share/nvim/plugged。YCM 详见 ycm-core/YouCompleteMe,C/C++ 语言服务详见 clangd

阅读全文 »

constconstexpr 都是很常见的关键字,但实际使用时经常会把“只读语义”和“编译期常量”混在一起。把这几个概念放在同一篇里梳理清楚。

C 里的 const

C 里的 const 本质上是一个类型限定符,表示不能通过这个表达式去修改对象。

先看最基本的变量场景:

1
const int n = 10;

这里的重点不是“对象绝对不可变”,而是编译器不允许你再通过 n 这个表达式给它赋值。

1
2
const int n = 10;
// n = 20; // 编译报错
阅读全文 »

Linux 在 /etc/shadow 第二列保存散列后的密码。同一个明文密码,每次生成的散列值往往不同——这不是 Python 或命令用错了,而是因为引入了 salt(盐)

用 Python 的 crypt 模块可以快速生成 SHA-512 散列:

1
python3 -c 'import crypt; print(crypt.crypt("test", crypt.mksalt(crypt.METHOD_SHA512)))'

每次执行结果都不同,但都可以直接写入 /etc/shadow 作为该用户的密码。用 passwd 修改同一账户密码时,生成的散列值同样每次都不一样。

阅读全文 »

在开发中时不时会在代码中调用系统命令,Linux 中调用系统命令的方法比较多。是否需要获取命令的输出也需要考虑。

exec函数系列

exec 函数系列是指以 exec 为开头用来执行Shell命令的几个函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <unistd.h>

extern char **environ;

int execl(const char *pathname, const char *arg, ...
/* (char *) NULL */);
int execlp(const char *file, const char *arg, ...
/* (char *) NULL */);
int execle(const char *pathname, const char *arg, ...
/*, (char *) NULL, char *const envp[] */);
int execv(const char *pathname, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execvpe(const char *file, char *const argv[],
char *const envp[]);
阅读全文 »

此文不介绍sudoers文件的配置方法,只是简单介绍sudo工作流程。

工作流程

工作流程如下图,第一次用markdown写流程图,不太精细。

flowchart TD
    st([用户执行sudo])
    is_have_cookie{检查 /var/run/sudo/ts 文件夹下是否有认证文件}
    cookie_is_expire{检查认证文件是否有效}
    is_in_sudoers{是否在 /etc/sudoers 文件中}
    input_passwd[输入密码]
    op[执行并返回结果]
    e([退出])

    st --> is_have_cookie

    is_have_cookie -- yes --> cookie_is_expire
    is_have_cookie -- no --> input_passwd

    cookie_is_expire -- yes --> is_in_sudoers
    cookie_is_expire -- no --> input_passwd

    input_passwd --> is_in_sudoers

    is_in_sudoers -- yes --> op
    is_in_sudoers -- no --> e

    op --> e
阅读全文 »

Linux 用户信息详解

Linux用户信息很丰富,存储在了多个文件中,其中包括 /etc/passwd/etc/shadow/var/log/wtmp 等文件中,因为在项目中用到了,所以有些了解。下面对这几个文件进行一个详细的介绍。

账户基本信息

文件各字段含有

/etc/passwd 存储了账户的基本信息,默认任何用户都可以读取,也是早期存储账户密码的文件,后因任何用户都可读取,造成安全问题,故后期不再用于存储。
/etc/passwd 文件采用:分割,共分为了7个字段,下面是文件中的一行。

1
root:x:0:0:root:/root:/usr/bin/bash
阅读全文 »

简介

top 是 Linux 下最常用的进程监控工具,相当于任务管理器,能够实时显示系统中各个进程的资源占用状况。MAN 手册中的解释如下图。top 是一个动态显示过程,可以通过按键不断刷新当前状态,也可以配合命令行参数做批处理或脚本输出。

Linux MAN手册对top命令的描述

阅读全文 »