/**
* 文件名: anti_doxing.c
* 描述: 反开盒应急导航 (命令行版)
* 编译: gcc anti_doxing.c -o anti_doxing
* 运行: ./anti_doxing
*/
#define _CRT_SECURE_NO_WARNINGS // 解决 Visual Studio 对 fopen 等函数的警告
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifdef _WIN32
#include <windows.h>
#define CLEAR_SCREEN() system("cls")
#define SLEEP_SEC(x) Sleep((x)*1000)
#else
#include <unistd.h>
#define CLEAR_SCREEN() system("clear")
#define SLEEP_SEC(x) sleep(x)
#endif
#define MAX_INPUT 256
#define MAX_LOG 100
// 步骤状态
typedef struct {
int completed;
char timestamp[64];
} StepStatus;
// 全局日志
char logs[MAX_LOG][256];
int log_count = 0;
// 获取当前时间字符串
void get_current_time(char *buffer, size_t size) {
time_t now = time(NULL);
struct tm *tm_info = localtime(&now);
strftime(buffer, size, "%Y-%m-%d %H:%M:%S", tm_info);
}
// 添加日志
void add_log(const char *msg) {
if (log_count < MAX_LOG) {
char timestamp[64];
get_current_time(timestamp, sizeof(timestamp));
snprintf(logs[log_count], sizeof(logs[0]), "[%s] %s", timestamp, msg);
log_count++;
}
}
// 打印带颜色的提示 (简单的ANSI,Windows下可能需要额外处理,但大致可用)
void print_color(const char *color, const char *text) {
// 简单实现:直接打印,不处理颜色(确保兼容)
printf("%s", text);
}
// 等待用户按回车
void wait_enter() {
printf("\n➡️ 按回车继续...");
while (getchar() != '\n');
getchar(); // 二次确保
}
// 清空输入缓冲区
void clear_input() {
int c;
while ((c = getchar()) != '\n' && c != EOF);
}
// 显示步骤并等待确认
int run_step(int step_num, const char *title, const char *instructions, const char *confirm_hint) {
char input[MAX_INPUT];
printf("\n========================================\n");
printf("步骤 %d: %s\n", step_num, title);
printf("========================================\n");
printf("%s\n", instructions);
printf("\n%s\n", confirm_hint);
printf("👉 完成后输入 'done' 并回车: ");
fgets(input, sizeof(input), stdin);
// 去掉换行符
input[strcspn(input, "\n")] = 0;
if (strcmp(input, "done") == 0) {
add_log("完成步骤");
return 1;
} else {
printf("⚠️ 输入错误,请重新运行本程序。\n");
return 0;
}
}
// 保存日志到文件
void save_logs() {
char filename[128];
time_t now = time(NULL);
struct tm *tm_info = localtime(&now);
strftime(filename, sizeof(filename), "应急记录_%Y%m%d_%H%M%S.txt", tm_info);
FILE *fp = fopen(filename, "w");
if (!fp) {
printf("❌ 无法创建记录文件!\n");
return;
}
fprintf(fp, "反开盒应急导航 - 操作时间线\n");
fprintf(fp, "生成时间: %s", ctime(&now));
fprintf(fp, "================================\n");
for (int i = 0; i < log_count; i++) {
fprintf(fp, "%s\n", logs[i]);
}
fprintf(fp, "\n你已经完成了所有可操作步骤。\n");
fprintf(fp, "请妥善保存本文件,可作为报警/律师的辅助材料。\n");
fclose(fp);
printf("\n✅ 应急记录已保存为: %s\n", filename);
}
int main() {
printf("\n========== 反开盒应急导航 ==========\n");
printf("你现在可能很慌。没关系,这个程序会带你一步一步做。\n");
printf("请严格按照提示操作,每一步完成后输入 'done' 继续。\n");
printf("按回车开始...");
getchar();
CLEAR_SCREEN();
add_log("程序启动,用户开始应急流程");
// 步骤1:保存证据
if (!run_step(1, "保存证据",
"请对泄露你个人信息的页面进行截图(全屏或窗口)。\n"
"Windows: 按 PrtSc 或 Win+Shift+S\n"
"Mac: 按 Cmd+Shift+4\n\n"
"然后在桌面新建一个文件夹,命名为「开盒证据_年月日」\n"
"将截图移动到此文件夹内。",
"✅ 确认完成:已截图并放入专用文件夹")) {
return 1;
}
add_log("步骤1完成:证据已截图保存");
CLEAR_SCREEN();
// 步骤2:平台举报
if (!run_step(2, "平台举报",
"打开泄露你信息的平台(微博/抖音/微信等)。\n"
"找到举报入口 → 选择「泄露隐私」「网暴」→ 上传步骤1的截图。\n\n"
"常用举报链接(可手动复制到浏览器):\n"
"- 抖音: https://www.douyin.com/report\n"
"- 微博: https://service.account.weibo.com/report\n"
"- 微信: 长按消息 → 投诉\n\n"
"举报成功后请截图保存(放入证据文件夹)。",
"✅ 确认完成:已完成至少一个平台的举报")) {
return 1;
}
add_log("步骤2完成:已向平台举报");
CLEAR_SCREEN();
// 步骤3:报警 / 法律备案
if (!run_step(3, "报警 / 法律备案",
"报警话术(可直接复制念出):\n"
"「你好,我的姓名、电话、家庭住址等隐私被人在网上公开,已经造成骚扰和威胁。\n"
" 我已经截图保存证据,需要报警备案。我的位置在XX市XX区。」\n\n"
"拨打110或去派出所,要求拿到《受案回执》或接警记录。\n"
"如果警察不理解,强调:《个人信息保护法》+《刑法》第253条之一。",
"✅ 确认完成:已报警或已取得法律备案")) {
return 1;
}
add_log("步骤3完成:已报警/法律备案");
CLEAR_SCREEN();
// 步骤4:切断暴露源
if (!run_step(4, "切断暴露源 & 自我保护",
"请执行以下操作(至少3项):\n"
"1. 修改社交账号密码,开启登录验证\n"
"2. 关闭「通过手机号找到我」「允许陌生人私信」\n"
"3. 告知亲友,请他们不要相信索要信息的人\n"
"4. 开启手机骚扰拦截,考虑临时换绑手机号\n"
"5. 关闭 iMessage / 隔空投送等易被轰炸的渠道",
"✅ 确认完成:已执行至少3项保护措施")) {
return 1;
}
add_log("步骤4完成:已执行自我保护措施");
CLEAR_SCREEN();
// 步骤5:心理支持
if (!run_step(5, "心理支持",
"被开盒后的恐惧、愤怒是正常反应。\n\n"
"免费心理援助热线(24小时):\n"
"- 希望24热线: 400-161-9995\n"
"- 北京红枫妇女心理热线: 010-64033383\n"
"- 全国心理援助: 400-680-6101\n\n"
"你可以现在拨打其中一个号码,哪怕只说「我被网暴了,很难受」。\n"
"你不必一个人扛。",
"✅ 确认完成:我已拨打/保存热线,或决定先休息")) {
return 1;
}
add_log("步骤5完成:已关注心理支持");
CLEAR_SCREEN();
// 完成总结
add_log("全部应急步骤执行完毕");
printf("\n========================================\n");
printf("🎉 应急流程全部完成!\n");
printf("========================================\n");
printf("你已经做了所有能做的事:\n");
printf("- 保存了证据\n");
printf("- 向平台举报\n");
prin
tf("- 报警/法律备案\n");
printf("- 切断了暴露源\n");
printf("- 获得了心理支持\n\n");
printf("现在你可以关闭本程序。如果需要生成操作记录,请按提示保存。\n");
save_logs();
printf("\n按回车退出...");
getchar();
return 0;
}
报警电话接通
├── 接警员问:“你在哪个区?”
│ └── 需要提前准备好:派出所地址、辖区名称
├── 接警员说:“这是网络纠纷,不归我们管”
│ └── 需要话术B:“《个人信息保护法》第X条,这是刑事犯罪”
├── 接警员说:“你过来做笔录吧”
│ └── 需要话术C:“好的,请问需要带什么材料?我现在地址是...”
├── 接警员说:“我们给你转网警”
│ └── 需要话术D:“好的,谢谢,请问转接后我需要重复说明吗?”
└── 接警员直接挂断
└── 需要备选方案:换一个派出所/打12389投诉
优化思路,接入训练数据库
/**
* 文件名: anti_doxing_real.c
* 描述: 反开盒应急导航 · 真实生成报案材料
* 编译: gcc anti_doxing_real.c -o anti_doxing_real
* 运行: ./anti_doxing_real
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#ifdef _WIN32
#include <windows.h>
#include <conio.h>
#define CLEAR_SCREEN() system("cls")
#define SLEEP_SEC(x) Sleep((x)*1000)
#define GET_KEY() _getch()
#else
#include <unistd.h>
#include <termios.h>
#define CLEAR_SCREEN() system("clear")
#define SLEEP_SEC(x) sleep(x)
int get_key_linux() {
struct termios oldt, newt;
int ch;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
#define GET_KEY() get_key_linux()
#endif
// 全局用户信息(用于生成真实材料)
char user_name[128] = "";
char user_phone[128] = "";
char leaked_info[512] = "";
char harassment_desc[512] = "";
char platform_name[128] = "";
char suspect_info[512] = "";
// 简单日志
void add_log(const char *msg) {
printf("[日志] %s\n", msg);
}
// 等待回车
void wait_enter() {
printf("\n按回车继续...");
while (getchar() != '\n');
getchar();
}
// 安全读取字符串
void safe_input(char *buffer, int size, const char *prompt) {
printf("%s", prompt);
fgets(buffer, size, stdin);
buffer[strcspn(buffer, "\n")] = 0;
}
// 单键确认(Y/N)
int confirm(const char *prompt) {
printf("%s (Y/N): ", prompt);
int key = GET_KEY();
printf("%c\n", key);
return (key == 'y' || key == 'Y');
}
// 生成真实的报案材料文件
void generate_real_report() {
// 生成带时间戳的文件名(保存在当前目录,用户可手动移动到桌面)
char filename[256];
time_t now = time(NULL);
struct tm *tm_info = localtime(&now);
strftime(filename, sizeof(filename), "报案材料_%Y%m%d_%H%M%S.txt", tm_info);
FILE *fp = fopen(filename, "w");
if (!fp) {
printf("\n❌ 错误:无法创建文件!请检查当前目录是否有写入权限。\n");
return;
}
// 写入完整内容
fprintf(fp, "【报案情况说明】\n");
fprintf(fp, "生成时间: %s", ctime(&now));
fprintf(fp, "==============================\n\n");
fprintf(fp, "一、报案人信息\n");
fprintf(fp, " 姓名:%s\n", strlen(user_name) ? user_name : "(未填写,可用昵称或“申请人”)");
fprintf(fp, " 联系电话:%s\n", strlen(user_phone) ? user_phone : "(未填写)");
fprintf(fp, "\n二、被泄露的个人信息\n");
fprintf(fp, " %s\n", strlen(leaked_info) ? leaked_info : "(未填写,请根据实际情况补充)");
fprintf(fp, "\n三、骚扰/威胁情况\n");
fprintf(fp, " %s\n", strlen(harassment_desc) ? harassment_desc : "(未填写)");
fprintf(fp, "\n四、信息泄露平台\n");
fprintf(fp, " %s\n", strlen(platform_name) ? platform_name : "(未知平台)");
fprintf(fp, "\n五、已知的嫌疑人信息(如有)\n");
fprintf(fp, " %s\n", strlen(suspect_info) ? suspect_info : "(未知)");
fprintf(fp, "\n六、已有证据清单\n");
fprintf(fp, " ✓ 已保存网页/聊天记录截图(位于桌面「开盒证据_日期」文件夹)\n");
fprintf(fp, " ✓ 已向平台举报并截图\n");
fprintf(fp, "\n七、法律依据(供警方参考)\n");
fprintf(fp, " - 《个人信息保护法》第10条:禁止非法收集、使用、传输他人个人信息。\n");
fprintf(fp, " - 《刑法》第253条之一:侵犯公民个人信息罪,情节严重可处三年以下有期徒刑。\n");
fprintf(fp, "\n八、报案请求\n");
fprintf(fp, " 请求公安机关依法调查,制止侵权行为,并追究违法者的法律责任。\n");
fprintf(fp, "\n报案人(签名):________________\n");
fprintf(fp, "日期:________________\n");
fclose(fp);
// 显示成功信息
printf("\n✅ 报案材料已成功生成!\n");
printf(" 文件名称:%s\n", filename);
printf(" 保存位置:当前程序所在目录\n");
printf(" 你可以打开该文件,复制内容或直接打印,然后提交给警方。\n");
// 询问是否立即查看内容
if (confirm("\n是否在屏幕上显示文件内容?")) {
printf("\n================ 文件内容预览 ================\n");
FILE *fp_read = fopen(filename, "r");
if (fp_read) {
char ch;
while ((ch = fgetc(fp_read)) != EOF) putchar(ch);
fclose(fp_read);
} else {
printf("无法打开文件预览。\n");
}
printf("==============================================\n");
}
}
// 步骤1:收集信息(必须填一些内容,否则材料无意义)
void step_collect_info() {
CLEAR_SCREEN();
printf("\n========== 信息收集(用于生成报案材料) ==========\n");
printf("注:所有信息仅用于生成文件,不会上传网络。\n");
safe_input(user_name, sizeof(user_name), "你的姓名或昵称(建议留真名): ");
safe_input(user_phone, sizeof(user_phone), "联系电话: ");
safe_input(leaked_info, sizeof(leaked_info), "被泄露的信息(例:身份证号342...,家庭住址,照片等): ");
safe_input(harassment_desc, sizeof(harassment_desc), "遭受的骚扰描述(例:收到辱骂私信、电话轰炸): ");
safe_input(platform_name, sizeof(platform_name), "信息泄露的平台(例:微博、抖音、微信群): ");
safe_input(suspect_info, sizeof(suspect_info), "知道的嫌疑人信息(网名、链接、手机号等,没有则留空): ");
add_log("信息收集完成");
wait_enter();
}
// 步骤2:证据保存
void step_evidence() {
CLEAR_SCREEN();
printf("\n========== 第一步:保存证据 ==========\n");
printf("1. 对泄露页面截图(Win: PrtSc / Win+Shift+S ; Mac: Cmd+Shift+4)\n");
printf("2. 在桌面新建文件夹「开盒证据_日期」,把截图放进去\n");
if (confirm("✅ 完成截图并放入文件夹了吗?")) {
add_log("证据已保存");
} else {
add_log("证据保存跳过(强烈建议补做)");
}
wait_enter();
}
// 步骤3:平台举报
void step_platform_report() {
CLEAR_SCREEN();
printf("\n========== 第二步:平台举报 ==========\n");
printf("举报话术(可复制):\n");
printf("「该账号非法公开我的个人信息,已造成实际骚扰。请求立即删除内容并封禁账号。」\n");
if (confirm("✅ 完成举报了吗?")) {
add_log("平台举报已完成");
} else {
add_log("平台举报跳过");
}
wait_enter();
}
// 步骤4:报警引导
void step_police() {
CLEAR_SCREEN();
printf("\n========== 第三步:报警指引 ==========\n");
printf("【报警话术】\n");
printf("\"我的姓名、电话、住址被人在网上公开,已经收到大量骚扰信息。\n");
printf("这是非法获取和传播个人信息,违反《个人信息保护法》和《刑法》。\n");
printf("我已截图保存证据,请求公安机关处理。\"\n");
printf("\n如果警察推诿,可说:\"请出具不予立案通知书,这是法律赋予我的权利。\"\n");
if (confirm("✅ 已经拨打110或前往派出所了吗?")) {
add_log("已报警/备案");
} else {
add_log("报警步骤跳过(建议完成)");
}
wait_enter();
}
// 步骤5:自我保护
void step_self_protect() {
CLEAR_SCREEN();
printf("\n========== 第四步:自我保护 ==========\n");
printf("建议:\n");
printf("- 修改密码、开启登录验证\n");
printf("- 关闭「允许陌生人私信」\n");
printf("- 告知亲友勿信陌生人\n");
if (confirm("✅ 已执行至少2项保护措施?")) {
add_log("已自我保护");
} else {
add_log("自我保护未执行");
}
wait_enter();
}
// 步骤6:心理支持
void step_mental() {
CLEAR_SCREEN();
printf("\n========== 第五步:心理支持 ==========\n");
printf("全国心理援助热线:400-161-9995\n");
if (confirm("✅ 已保存或拨打热线?")) {
add_log("心理支持已关注");
}
wait_enter();
}
int main() {
printf("\n========== 反开盒应急导航 · 真实材料生成版 ==========\n");
printf("本程序会引导你完成所有步骤,并在最后生成【真实可用的报案材料】。\n");
printf("按回车开始...");
getchar();
step_collect_info(); // 收集信息
step_evidence();
step_platform_report();
step_police();
step_self_protect();
step_mental();
CLEAR_SCREEN();
printf("\n========== 生成报案材料 ==========\n");
printf("你已经完成所有引导步骤。现在可以生成一份正式报案材料。\n");
if (confirm("是否生成报案材料(.txt文件)?")) {
generate_real_report();
} else {
printf("你可以随时重新运行程序生成材料。\n");
}
printf("\n按回车退出程序...");
getchar();
return 0;
}