Skip to content

Instantly share code, notes, and snippets.

@zhiyue
Forked from Blankwonder/mac_system_check.sh
Created August 29, 2023 16:54
Show Gist options
  • Save zhiyue/4ac79cf504324845c5525c441133b0f5 to your computer and use it in GitHub Desktop.
Save zhiyue/4ac79cf504324845c5525c441133b0f5 to your computer and use it in GitHub Desktop.
{
echo "Loaded kernel extensions:";
kextstat -kl | awk '!/com\.apple/{printf "%s %s\n", $6, $7}';
echo $'\n'"Loaded user agents:";
launchctl list | sed 1d | awk '!/0x|com\.apple|org\.(x|openbsd)|\.[0-9]+$/{print $3}';
echo $'\n'"Inserted libraries:";
launchctl getenv DYLD_INSERT_LIBRARIES;
echo $'\n'"User cron tasks:";
crontab -l;
echo $'\n'"System launchd configuration:";
cat /e*/lau*;
echo $'\n'"User launchd configuration:";
cat .lau*;
echo $'\n'"Login items:";
osascript -e 'tell application "System Events" to get name of login items';
echo $'\n'"Extrinsic loadable bundles:";
cd;
find -L /S*/L*/E* {,/}L*/{Ad,Compon,Ex,In,Keyb,Mail/Bu,P*P,Qu,Scripti,Servi,Spo}* -type d -name Contents -prune | while read d;
do /usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$d/Info.plist" | egrep -qv "^com\.apple\.[^x]|Accusys|ArcMSR|ATTO|HDPro|HighPoint|driver\.stex|hp-fax|JMicron|print|SoftRAID" && echo ${d%/Contents};
done;
# echo $'\n'"Unsigned shared libraries:";
# find /u*/{,*/}lib -type f -exec sh -c 'file -b $1 | grep -qw shared && ! codesign -v $1' {} {} \;
-print;
echo;
ls -A {,/}L*/{Launch,Priv,Sta}*;
} 2> /dev/null
{
echo "Loaded system agents:";
sudo launchctl list | sed 1d | awk '!/0x|com\.(apple|openssh|vix\.cron)|org\.(amav|apac|cups|isc|ntp|postf|x)/{print $3}';
echo $'\n'"Login hook:";
sudo defaults read com.apple.loginwindow LoginHook;
echo $'\n'"Root cron tasks:";
sudo crontab -l;
echo $'\n'"Log check:";
syslog -k Sender kernel -k Message CReq 'GPU |hfs: Ru|I/O e|find tok|n Cause: -|NVDA\(|pagin|timed? ?o' | tail;
} 2> /dev/null
@zhiyue
Copy link
Author

zhiyue commented Aug 29, 2023

这些脚本主要用于 macOS 系统的诊断和信息收集。我会逐一详细解释每一行的作用。

第一部分:非root用户级别的信息收集

  1. echo "Loaded kernel extensions:";
    打印“Loaded kernel extensions:”,用于标识接下来的输出是关于已加载的内核扩展。

  2. kextstat -kl | awk '!/com\.apple/{printf "%s %s\n", $6, $7}';
    列出非 Apple 的内核扩展。kextstat -kl 显示已加载的内核扩展,然后用 awk 过滤掉以 com.apple 开头的扩展。

  3. echo $'\n'"Loaded user agents:";
    打印“Loaded user agents:”,用于标识接下来的输出是关于已加载的用户代理。

  4. launchctl list | sed 1d | awk '!/0x|com\.apple|org\.(x|openbsd)|\.[0-9]+$/{print $3}';
    列出非 Apple 和非系统的用户级别的代理(agents)和守护进程(daemons)。

  5. echo $'\n'"Inserted libraries:";
    打印“Inserted libraries:”,用于标识接下来的输出是关于插入的库。

  6. launchctl getenv DYLD_INSERT_LIBRARIES;
    检查是否有动态库被插入。这通常用于调试或者劫持系统调用。

  7. echo $'\n'"User cron tasks:";
    打印“User cron tasks:”,用于标识接下来的输出是关于用户级别的 cron 任务。

  8. crontab -l;
    列出当前用户的所有 cron 任务。

  9. echo $'\n'"System launchd configuration:";
    打印“System launchd configuration:”,用于标识接下来的输出是关于系统级别的 launchd 配置。

  10. cat /e*/lau*;
    显示系统级的 launchd 配置。

  11. echo $'\n'"User launchd configuration:";
    打印“User launchd configuration:”,用于标识接下来的输出是关于用户级别的 launchd 配置。

  12. cat .lau*;
    显示用户级的 launchd 配置。

  13. echo $'\n'"Login items:";
    打印“Login items:”,用于标识接下来的输出是关于登录项。

  14. osascript -e 'tell application "System Events" to get name of login items';
    使用 AppleScript 列出所有登录项。

  15. echo $'\n'"Extrinsic loadable bundles:";
    打印“Extrinsic loadable bundles:”,用于标识接下来的输出是关于外部可加载的软件包。

  16. 复杂的 find 命令
    查找并列出某些特定目录下的外部可加载软件包。

第二部分:root用户级别的信息收集

  1. echo "Loaded system agents:";
    打印“Loaded system agents:”,用于标识接下来的输出是关于已加载的系统代理。

  2. sudo launchctl list | sed 1d | awk '!/0x|com\.(apple|openssh|vix\.cron)|org\.(amav|apac|cups|isc|ntp|postf|x)/{print $3}';
    以 root 权限列出非 Apple 和非系统的系统级代理和守护进程。

  3. echo $'\n'"Login hook:";
    打印“Login hook:”,用于标识接下来的输出是关于登录钩子。

  4. sudo defaults read com.apple.loginwindow LoginHook;
    以 root 权限读取登录钩子,这些钩子在用户登录时执行。

  5. echo $'\n'"Root cron tasks:";
    打印“Root cron tasks:”,用于标识接下来的输出是关于 root 用户的 cron 任务。

  6. sudo crontab -l;
    以 root 权限列出所有的 cron 任务。

  7. echo $'\n'"Log check:";
    打印“Log check:”,用于标识接下来的输出是关于系统日志的检查。

  8. syslog -k Sender kernel -k Message CReq 'GPU |hfs: Ru|I/O e|find tok|n Cause: -|NVDA\(|pagin|timed? ?o' | tail;
    查询系统日志中的某些特定事件。

这些脚本大多用于安全诊断和系统审计,也可以用于问题排查。

请注意,执行这些脚本通常需要相应的权限,并可能暴露敏感信息。谨慎操作。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment