防御黑客系列-第一集-电脑登录记录提示和登录远程推送

news/2025/2/22 16:19:38

        大家好!我是虫鸣,已经有一段时间没有更新CSDN博客了,趁着今天有时间,更新一下!
稍微上点年纪的玩电脑的都知道,在360还没有推出免费的360安全卫士之前,电脑病毒是很多的,而且变化出了各种天花乱坠的技术,虽然那时有各种杀毒软件,但是因为国内破解、共享软件的众多,导致这些软件或多或少了被插入了各种捆绑病毒、木马,所以就算是正版杀毒软件,也防不住所有的病毒。但是自从360的流行,以及后来的手机行业的兴起,包括著名的iphone,推出了app store等官方的软件平台,以前这些的病毒泛滥横行的情况也一去不复返了,至少表面上,因为现在的云杀毒的保护,我们的系统看上去是安全的,那些病毒灰产也逐步走向幕后。现在的各大IT公司都很注重系统的安全更新升级,以前的那些黑客们,大多不再编写病毒,而是转向白帽子黑客的行列,因为现在发现一个重大漏洞的收益,显然是大大超过以前写病毒的所得,而大量的漏洞的提交,导致了现在的黑客反而很珍惜那些不被大众知晓的漏洞。说了这么多,大家是不是有个疑问,我们现在的电脑、手机系统真的如同表面上的安全吗?显然,答案是否定的。如大家看到的,这篇文章,是我写的新的系列,为什么要在当今系统安全,而且表面上没有病毒的时代,新开这样一个主题,可能和当前的AI时代有关,大家都知道我们现在所处的环境,是一个AI的公知环境,知识很容易得到,特别是IT知识,AI通过大数据,经过深度学习、建立的大模型,让我们普通人通过简单的对话形式就能获得以前很难找的知识,以前吃香的编程等技能都在被弱化,现在可以说,一个稍微懂一些电脑的小白,也会通过deepseek这样的AI,编写office公式,甚至脚本;一个相当漂亮的ppt,甚至只要一句话就能生成,那我们身处这个时代,还能学习什么东西不被淘汰?或者换句话说,我们除了掌握最基本的AI技能,作为一个普通的IT人员,还有什么技能能够学习,而不被社会淘汰。就像我最喜欢的《头文字d》里拓海说的,他在斯巴鲁(四驱车)上使用的技术,一样可以用在AE86上,所以开86的他永远也无法超越开斯巴鲁的文太(拓海爸爸),虽然这是一个老梗,但是道理是一样的,现在的AI技术,对于我们老一代的普通电脑工作者而言,就是一辆斯巴鲁,技术碾压了我们以前开的AE86。我们以前所学的所有,都会被AI学会,大家是否有一种学习新的IT技术很无力的感觉;大家有没有想过,我们相比AI——一个跨时代的技术,我们之中很多人会被淘汰,这不单单是对我们IT行业,同样是很多其他行业会碰到的,我想这也是当前经济下行的主要原因。那么我们现在应该学习什么?这个问题没人知道,没人能预知未来,但是结合我之前所说的,个人感觉,网络安全方面,相对我来说会比较重要,为什么这么说那?因为AI也是一种后互联网时代的衍生物,互联网没解决的问题,AI时代也同样解决不了,那就是网安技术,大家看看ChatGPT、DeepSeek天天被DDos攻击就知道了,但是DDOS只是表面上最简单的攻击手段,更深层的盗取数据的黑客行为才是最吓人的,而这样的技术,除了黑客在用,ChatGPT这样的也在用,因为它的大模型的数据,很多也是爬取而来的,说到这里大家也应该有点明白,我说的网络安全重要性了吧!对于我们所处的数据时代,还是数据最为重要、最为基础,我们的企业工作数据,比如:报表、报价、企划合同;我们的个人数据,比如:日常照片、视频、文档、身份资料,其实这样都是和网络安全有关系。由上述的个人想法后,我觉得是该走一个自己一直想做的赛道——网络安全,也有点回到原点的感觉,之后,我会在知乎、小红书等平台一起更新网络安全的题材,欢迎大家捧场!

        今天的第一期,就来说说我的一些"瞎鼓捣",希望能抛砖引玉,大佬就当看个笑话吧!

大家是不是有这样的经历,电脑有时出现一些莫名的问题,而自己并没有做任何操作,这在公司或个人电脑都会出现!怎么知道是否有人登录过自己的电脑?想知道这个问题,我们可以在window电脑上做如下设置:

WIN+R快捷键打开运行窗口,输入gpedit.msc,打开组策略(注意:需要window专业版,比如:Win Vista到Win11 pro以上) ,进入后,点击计算机配置-管理模板-Windows组件-Window登录选项-点击右边的"在用户登录期间显示有关以前的登录的消息",但是中间的策略设置,点击已启动即可,最后点击应用,确认关闭,重启电脑或cmd命令行输入"gpupdate /force"强制更新策略,如下图:

如果你是window的家庭版(home版)之类的,你可以试试如下方法:

Win+R组合键打开regedit,注册表编辑器,定位到"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\",随意建立一个项,名称中的GUID可以任意,后面加上Machine,然后建立一个路径项目"Software\Microsoft\Windows\CurrentVersion\Policies\System",在这个项目中建立一个DWORD(32位)值,定义为十六进制1(开启上次登录提示),0为关闭提示,你也可以使用记事本,建立一个reg格式的注册表文件,把下面的代码复制到reg文件中双击导入注册表。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Group Policy Objects\{4EB7C7D3-665A-4FB4-A33F-5E5D12197CE5}Machine\Software\Microsoft\Windows\CurrentVersion\Policies\System]
"DisplayLastLogonInfo"=dword:00000001

最后的效果如下: 

以后只要你登录系统,不管是锁定后重登录,又或者冷启动、重启,只要你登录系统,都会出现上面的提示。当然你的显示可能和我不同,最上面可能有你的计算机名称,而我的做了隐去操作。

如果你实际操作过了会发现,上面提示的时间日期,是你本次登录的再上一次记录时间,请看GPT的解释:

 

虽然不太理解,window的这种离奇脑洞,但是网上也有各种的解决方法,链接如下:
在 Windows 系统上,有多种方法可以查看上一次登录的时间https://www.cnblogs.com/suv789/p/17518725.html

这个链接中有很多方法,我没有都尝试过,只是试了一下net user的查看方法,如下图:

使用方法也很简单,但是cmd命令行输入net user 你的用户名(请按实际添加) ,里面红框的上次登录就是,但是这种方法的缺点是,这是本次的登录时间,而不是上次的。这么看来window自带的好像又有点道理了。

虽然window的方法已经很好了,但是总缺了点什么,比如实时性提示,就是如果非本人登录时,马上提示本人的功能,window却没有,看来只能用python做一个了。

基本思路是,编写一个python脚本(pyw格式,这样的格式是后台执行,没有弹窗的,防止他人发现),然后自己注册一个随意的email邮箱,请与工作或个人邮箱分开,防止被黑入,因为同一个手机号可以注册好几个邮箱,我这里使用了163的免费邮箱,然后通过邮箱发送一封包括了电脑信息和实时登录时间的邮件给自己的个人邮箱(非刚刚注册的邮箱),然后通过window的任务计划管理器,添加一个任务,把python脚本添加进入即可,具体代码我们只要让AI生成一个即可,如下:

import smtplib
import socket
import getpass
import platform
from datetime import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import keyring



# === 163 邮箱 SMTP 配置 ===
SMTP_SERVER = "smtp.163.com"  # 163 邮箱的 SMTP 服务器
SMTP_PORT = 465  # 163 邮箱使用 SSL 加密端口
SENDER_EMAIL = "xxxx@163.com"  # 你的163邮箱
SENDER_PASSWORD = keyring.get_password("email_service", "xxxx@163.com")# 163邮箱的授权码(不是登录密码)
RECEIVER_EMAIL = "youremail@163.com"  # 接收通知的邮箱(可以是自己或其他管理员)

# === 获取登录信息 ===
def get_system_info():
    username = getpass.getuser()  # 获取当前登录用户名
    hostname = socket.gethostname()  # 获取计算机名称
    ip_address = socket.gethostbyname(hostname)  # 获取本机 IP
    os_info = platform.system() + " " + platform.version()  # 获取操作系统信息
    login_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 获取当前时间
    return f"用户: {username}\n计算机名: {hostname}\nIP 地址: {ip_address}\n操作系统: {os_info}\n登录时间: {login_time}"

# === 发送邮件 ===
def send_email():
    login_info = get_system_info()
    msg = MIMEMultipart()
    msg["From"] = SENDER_EMAIL
    msg["To"] = RECEIVER_EMAIL
    msg["Subject"] = "Windows 登录提醒"

    body = f"警告:Windows 账户被登录!\n\n{login_info}"
    msg.attach(MIMEText(body, "plain"))

    try:
        server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)  # 使用 SSL 连接 SMTP 服务器
        server.login(SENDER_EMAIL, SENDER_PASSWORD)  # 登录 SMTP 服务器
        server.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, msg.as_string())  # 发送邮件
        server.quit()
        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败: {e}")

if __name__ == "__main__":
    send_email()

需要注意的是,我的代码中为了安全使用了,keyring库来隐藏明码的邮箱密码,需要使用pip安装下这个库:

pip install keyring

 请把代码中的这三句的邮箱改成你自己的xxxx@163.com是你注册的新邮箱,youremail@163.com是你的个人邮箱,也可以是你注册的新邮箱。

SENDER_EMAIL = "xxxx@163.com"  # 你的163邮箱
SENDER_PASSWORD = keyring.get_password("email_service", "xxxx@163.com")# 163邮箱的授权码(不是登录密码)
RECEIVER_EMAIL = "youremail@163.com"  # 接收通知的邮箱(可以是自己或其他管理员)

然后新建一个python脚本,输入如下代码并运行一次即可永久存储你的邮箱密码:

import keyring

keyring.set_password("email_service", "XXXX@163.com", "XXXX")#XXXX@163.com是你的新邮箱,XXXX是你的授权码,需开通163的smtp服务才有

 最后把最上面的发送邮件脚本保存到一个隐藏位置,并添加到任务计划程序中,如下的方法:

要快速打开 任务计划程序,您可以使用以下方法:

1.使用运行对话框:

按下 Win + R 键,打开运行对话框。
输入 taskschd.msc,然后按回车键,即可打开任务计划程序。
通过计算机管理:

2.右键点击“此电脑”或“计算机”图标,选择“管理”。
在左侧的“系统工具”下,点击“任务计划程序”。

 

 

 

 

如上操作后就建立了一个登录自动发送邮件的任务计划。

但是,还有几点补充完善:

1.首先要确保这个任务计划不要被人发现,可以起一个不显眼的任务名称,或者类似系统计划的名称。

2.这个脚本请右击设置成只读和隐藏属性,最好设置读写执行权限,防止黑客修改。

3.有些黑客会开机时网络禁用,可以通过如下的python代码,重启网络:

def resetNet():
    # 适配器名称(根据你的实际情况修改)
    adapter_name = "以太网"
    # 禁用网络适配器
    subprocess.run(f'netsh interface set interface "{adapter_name}" disabled', shell=True)
    # 等待 3 秒
    time.sleep(3)
    # 启用网络适配器
    subprocess.run(f'netsh interface set interface "{adapter_name}" enabled', shell=True)
    print("网络适配器已重启!")
    time.sleep(5)

注意上面代码中的第一句 adapter_name = "以太网"中的"以太网"请改成你自己的本地连接名称,同时上面添加任务计划第一张图片已说明,执行这个重置功能需要管理员最高权限,不然会执行失败。上面的代码使用window批处理也能实现,我也一起贴出来给大家。

netsh interface set interface "以太网" disabled
choice /t 3 /d y /n >nul
netsh interface set interface "以太网" enabled

最后放上完整代码给大家参阅,希望大家不要把脚本用在不良目的上,谢谢!

import smtplib
import socket
import getpass
import platform
from datetime import datetime
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import keyring

def resetNet():
    # 适配器名称(根据你的实际情况修改)
    adapter_name = "以太网"
    # 禁用网络适配器
    subprocess.run(f'netsh interface set interface "{adapter_name}" disabled', shell=True)
    # 等待 3 秒
    time.sleep(3)
    # 启用网络适配器
    subprocess.run(f'netsh interface set interface "{adapter_name}" enabled', shell=True)
    print("网络适配器已重启!")
    time.sleep(5)

def mailInit():
    # === 163 邮箱 SMTP 配置 ===
    SMTP_SERVER = "smtp.163.com"  # 163 邮箱的 SMTP 服务器
    SMTP_PORT = 465  # 163 邮箱使用 SSL 加密端口
    SENDER_EMAIL = "xxxx@163.com"  # 你的163邮箱
    SENDER_PASSWORD = keyring.get_password("email_service", "xxxx@163.com")# 163邮箱的授权码(不是登录密码)
    RECEIVER_EMAIL = "youremail@163.com"  # 接收通知的邮箱(可以是自己或其他管理员)

# === 获取登录信息 ===
def get_system_info():
    username = getpass.getuser()  # 获取当前登录用户名
    hostname = socket.gethostname()  # 获取计算机名称
    ip_address = socket.gethostbyname(hostname)  # 获取本机 IP
    os_info = platform.system() + " " + platform.version()  # 获取操作系统信息
    login_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")  # 获取当前时间
    return f"用户: {username}\n计算机名: {hostname}\nIP 地址: {ip_address}\n操作系统: {os_info}\n登录时间: {login_time}"

# === 发送邮件 ===
def send_email():
    login_info = get_system_info()
    msg = MIMEMultipart()
    msg["From"] = SENDER_EMAIL
    msg["To"] = RECEIVER_EMAIL
    msg["Subject"] = "Windows 登录提醒"

    body = f"警告:Windows 账户被登录!\n\n{login_info}"
    msg.attach(MIMEText(body, "plain"))

    try:
        server = smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT)  # 使用 SSL 连接 SMTP 服务器
        server.login(SENDER_EMAIL, SENDER_PASSWORD)  # 登录 SMTP 服务器
        server.sendmail(SENDER_EMAIL, RECEIVER_EMAIL, msg.as_string())  # 发送邮件
        server.quit()
        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败: {e}")

if __name__ == "__main__":
    resetNet()
    mailInit()
    send_email()

好了,该说的都说完了,谢谢大家观看,记得关注我以后的更多内容! 

 


http://www.niftyadmin.cn/n/5862513.html

相关文章

python的if判断和循环语句(while循环和for循环)

1.if判断 1.1if判断的基本格式 if 判断条件: 满足条件做的事 score input("请输入成绩:") if score 100:print("你真棒") if score 60:print("还要加油") 使用input输入默认类型为字符串类型 1.2运算符 1.2…

【简历优化】性能调优 — 编程性能调优篇

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔本文讲解【简历优化】性能调优 — 编程性能调优篇,期待与你一同探索、学习、进步,一起卷起来叭! 目录 一、编程性能调优字符串String 发展优…

DuodooBMS源码解读之 cncw_ledger模块

Odoo 18 扩展模块用户使用手册 一、模块概述 本扩展模块是基于 Odoo 18 开发的,主要涉及账务相关的功能扩展,包括付款、收款、日记账报表处理、账户明细导出、对账单操作等功能。以下将详细介绍各个模块的使用方法。 二、模块功能及操作步骤 &#x…

Java集合框架大师课:从青铜到王者的数据结构指南(一)

🚀 Java集合框架大师课:从青铜到王者的数据结构指南(一) 🌟 系列定位:全网最懂小白的JCF实战教程 | 建议搭配IDE边学边练 🎯 学习路线图 第一章:初识JCF江湖 1.1 什么是JCF&#xf…

深入解析TLS协议:保障网络通信安全的关键技术

深入解析TLS协议:保障网络通信安全的关键技术 在当今信息化社会,网络安全已成为全球关注的焦点。随着技术的进步,尤其是互联网的普及,网络攻击呈现多样化、复杂化的趋势。为了保护网络系统的安全,研究人员和安全专家将…

Java 使用websocket

添加依赖 <!-- WebSocket 支持 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>添加配置类 Configuration public class WebSocketConfig {B…

C语言学习【1】C语言关于寄存器的封装

目录 1.封装寄存的C语言的语法volatile&#xff1a;unsigned int:*pGpiobOdrvolatile unsigned int * 2.进一步C语言的封装 在嵌入式中&#xff0c;底层一定是操作寄存器&#xff0c;我有一个理念&#xff0c;凡事一定要想清楚&#xff0c;把任何知识点融入自己的理解之中&…

MinkowskiEngine安装(CUDA11.8+torch2.0.1+RTX4070TI)

1、背景 1&#xff09;因为项目要用这个库&#xff1a;MinkowskiEngine&#xff0c;Minkowski Engine — MinkowskiEngine 0.5.3 documentation 然后就用了之前安装好 MinkowskiEngine 的torch1.8.1,cuda11.1的环境。 2&#xff09;自己的代码出现cuda不支持torch用gpu进行矩…