[安全攻防进阶篇] 三.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏

2023-10-27

从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

接下来我将开启新的安全系列,叫“安全攻防进阶篇”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

前文作者带领大家学习了科锐钱林松老师在华中科技大学的分享视频,告诉了大家如何学好逆向分析,并结合作者经验给出逆向分析的路线推荐,最后给出吕布传游戏逆向案例。这篇文章将详细讲解OllyDbg和Cheat Engine工具逆向分析用法,完成植物大战僵尸的游戏辅助器,包括修改阳光值和自动拾取阳光两个功能。话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好或侵权的地方,可以联系我删除。基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,也强烈推荐大家去看看钱老师的视频,加油~

在这里插入图片描述

作者的github资源:
软件安全:https://github.com/eastmountyxz/Software-Security-Course
其他工具:https://github.com/eastmountyxz/NetworkSecuritySelf-study
Windows-Hacker:https://github.com/eastmountyxz/Windows-Hacker-Exp


声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。(参考文献见后)

前文回顾:
[安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向
[安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例



一.VS内存地址查看

在讲解OllyDbg和Cheat Engine工具逆向分析游戏之前,我想先给大家普及下内存地址的基础概念,以及通过创建项目来讲解下内存、地址、值它们的关系。

在这里插入图片描述

第一步,打开VS2019创建空项目“RE_ZWDZJS01”,然后添加main.cpp源文件。

在这里插入图片描述

如下图所示,选中项目右键“添加”->“新建项”,然后创建main.cpp文件。

在这里插入图片描述


第二步,添加代码如下所示,我们尝试在内存中查看变量的位置。
其中%#表示输出提示方式,如果是8进制在前面加0,如果是十进制不加任何字符,如果是十六进制会加上0x。

#include "stdio.h"

int main()
{
	int x = 1000;

	//内存中查看值得位置
	printf("%#X\n", &x);

	//暂停
	getchar();
	return 0;
}

我们尝试添加个断点,然后运行程序。

在这里插入图片描述


第三步,按下F5调试,输出结果为0x12FFCDC。

  • 0x12FFCDC

在这里插入图片描述


第四步,接着我们需要在内存中查看这个值,选择“调试”->“窗口”->“内存”,然后随便选择一个“内存”。

在这里插入图片描述

输入地址“0x12FFCDC”即可。

在这里插入图片描述

接着我们打开程序员型计算机,可以看到1000对应的十六进制就是3E8,刚好和上面的 E8 03 00 00 一致。

  • E8 03 00 00

在这里插入图片描述

注意这里仅显示了一个字节,我们如果右键选中转换为4字节,则可以显示完整的数值,如下图所示。

  • 0x000003e8

在这里插入图片描述


写到这里,VS简单查看内存的方法就介绍完毕了,其原理类比为:

  • 内存 --> 旅馆
  • 地址 --> 门牌号
  • 值 --> 旅客A

那么,我们怎么将“旅客A”换成“旅客B”呢?这就需要通过门牌号在旅馆中找到“旅客A”再替换,但之前需要进行权限提升,才能进行后续的操作。同样,在游戏中,如果我们想在内存中修改值,也是通过地址访问这个值再进行修改,修改前也需要提升权限。具体操作主要包括四个步骤:

  • 第一步,找到游戏窗口
  • 第二步,通过窗口找到进程ID
  • 第三步,通过进程ID打开进程
  • 第四步,通过打开的进程完成内容修改

讲解完这个基础知识,接着我们开始植物大战僵尸的逆向吧!



二.Cheat Engine逆向修改阳光值

修改阳光值其实就是修改游戏的分数、能量、血量、攻击力之类的,其原理是通过地址修改内存中的值,这里主要使用的是Cheat Engine工具。

在这里插入图片描述


第一步,通过Cheat Engine工具打开运行着的植物大战僵尸游戏。

在这里插入图片描述


第二步,输入数字“100”,点击“首次扫描”。

在这里插入图片描述

返回结果为762个。

在这里插入图片描述


第三步,接着反复玩游戏,并输入对应的数字进行“再次扫描”,比如输入数字“150”,点击“再次扫描”。

在这里插入图片描述

最终我们得到了一个结果,其地址为:

  • 0x207FB5A0

在这里插入图片描述


第四步,打开任务管理器,然后选中植物大战僵尸游戏,右键选择“转到详细信息”按钮。

在这里插入图片描述

显示结果如下图所示,这里获取了植物大战僵尸的进程ID。

  • PID:3256

在这里插入图片描述

原理搞懂之后,接下来就需要编写代码完成阳光值的修改。


第五步,在编写C语言代码修改阳关的参数前,先讲解Spy++的查找窗口功能和FindWindow函数。
我们在VS中可以看到查找窗口函数FindWindow包括两个参数,即窗口的类型和窗口的标题。

FindWindow(
  lpClassName,        {窗口的类名}
  lpWindowName: PChar {窗口的标题}
);

在这里插入图片描述

这里我们可以通过Spy++来进行辅助讲解。

在这里插入图片描述

在弹出的界面中选择这个查找窗口(从左数第五个)按钮。

在这里插入图片描述

然后移动选择游戏窗口,查看对应的信息,它包括窗口句柄,如下图所示。所以接下来我们可以通过标题和类进行查找。

  • 标题:植物大战僵尸中文版
  • 类:MainWindow

在这里插入图片描述


第六步,编写核心C语言代码,实现相关游戏修改功能。

通过GetWindowThreadProcessld函数找到进程ID。

DWORD GetWindowThreadProcessld(
	HWND hwnd,                   //窗口句柄
	LPDWORD lpdwProcessld        //接收进程标识的32位值的地址
);

通过OpenProcess函数打开一个已存在的进程对象,并返回进程的句柄。

HANDLE OpenProcess(
	DWORD dwDesiredAccess,   //渴望得到的访问权限(标志)
	BOOL bInheritHandle,     //是否继承句柄
	DWORD dwProcessId        //进程标示符
);

通过WriteProcessMemory函数写入某一进程的内存区域。注意,直接写入会出Access Violation错误,故需此函数入口区必须可以访问,否则操作将失败。

BOOL WriteProcessMemory(
	HANDLE hProcess,                 //由OpenProcess返回的进程句柄
	LPVOID lpBaseAddress,            //要写的内存首地址
	LPVOID lpBuffer,                 //指向要写的数据的指针
	DWORD nSize,                     //要写入的字节数
	LPDWORD lpNumberOfBytesWritten
);

完整代码如下:

#include "stdio.h"
#include "windows.h"

int main()
{
	//输入值作为修改阳光参数
	int x;
	scanf("%d", &x);

	//进程ID
	DWORD pid;

	//1.找到游戏窗口 窗口类型、窗口标题
	HWND hwnd = FindWindow(NULL,L"植物大战僵尸中文版");

	//2.通过窗口找到进程ID
	GetWindowThreadProcessId(hwnd,&pid);

	//3.通过进程ip打开进程
	HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

	//4.通过打开进程修改游戏内容
	WriteProcessMemory(hProcess, (LPVOID)0x207FB5A0, 
		               (LPVOID)&x,sizeof(x),&pid);

	return 0;
}

第七步,当我们进行数值修改时,我们的植物大战僵尸阳光也就行对应的修改。
先设置为“0”,如下图所示修改成功,哈哈!是不是完成了一个简单的游戏辅助器呢?

在这里插入图片描述

接着我们修改成10086,如果360提示警告(识别远程线程注入),我们点击“允许本次修改”即可,最终成功将阳光值修改为“10086”。我们终于可以愉快的玩耍了,妈妈再也不用担心我的阳光!

在这里插入图片描述

在这里插入图片描述

同样第二关我们也可以进行修改,但此时的窗口地址会有变化,它变为了0x2099AE60,修改核心函数:

  • WriteProcessMemory(hProcess, (LPVOID)0x2099AE60, (LPVOID)&x,sizeof(x),&pid);

在这里插入图片描述

注意,如果游戏存在地址保护的情况,我们可以尝试注入进行修改。本系列文章仅分析经典的本地游戏,至于网络游戏一律禁止大家去修改或破坏,原理普及安全防护为主。


第八步,编程中遇到的错误一定要学会独立百度、谷歌解决,这是至关重要的一种能力提升。
注意,如果提示错误“error C4996: ‘scanf’: This function or variable may be unsafe. ”,则因为VS认为scanf函数是不安全的,进行安全开发生命周期SDL检查设置即可。

在这里插入图片描述

在这里插入图片描述



三.OllyDbg逆向自动拾取阳光

自动捡取的关键是点击鼠标,如果你点击到了阳光上它才会增加。所以我们希望在阳光下落的时候触发点击阳光事件,然后阳光地址会增加,初步预测涉及两个CALL函数。

  • 阳光出现call
  • 判断是否点击到阳光然后增加阳光的call

第一步,当我们使用Cheat Engine定位到阳光的地址后,可以选中该地址右键设置“找出是什么修改了这个地址”。

在这里插入图片描述

首先,植物大战僵尸此时定位的地址为:0x2099AE60;然后选中改地址右键,设置“找出是什么修改了这个地址”。

  • 0x2099AE60

在这里插入图片描述


第二步,等待下一个阳光捡起后,可以在下图所示窗口中获取新产生的值,即0x00430A11。接着点击0x00430A11地址,将扩展信息记录下来,方便接下来的自动拾取功能。

  • 0x00430A11

在这里插入图片描述

同时,点击“显示反汇编程序”会形成下图所示的效果图。

在这里插入图片描述


第三步,利用OllyDbg软件打开“PlantsVsZombies.exe”游戏。

在这里插入图片描述


第四步,前面我们已经定位到了阳光的窗口地址0x00430A11,接着按下Ctrl+G或者右键“转到”->“表达式”,然后跳转到指定位置。

在这里插入图片描述

跳转0x00430A11如下图所示:

在这里插入图片描述


第五步,按下F2给它增加个断点以及注释,游戏运行到点击阳光增加数值时就会断到这里。
我们可以查看ECX数值,它应该是19,对应十进制的25,所以猜测这里是增加阳关值。

在这里插入图片描述

运行程序直到捡起阳光,它会自动停到断点位置,并且ECX修改为0x19,对应的阳光值增加25分。观察汇编代码,发现它是一个增加语句,即验证了它是阳光的增加语句。

  • 0x00430A11 ADD DWORD PTR DS:[EAX+5560],ECX

在这里插入图片描述


第六步,点击“调试”->“执行到返回”按钮(快捷键Ctrl+F9)。

在这里插入图片描述

接着跳转到0x00430AB4位置,如下图所示,注意返回到0x004314FD位置。

  • 返回地址:0x004314FD

在这里插入图片描述


第七步,在RETN返回处按下F7,执行单步步入,会看到CALL函数执行完毕。我们不难推测这个函数就是增加阳光的函数。

  • 0x004313F8 CALL PlantsVs.004309D0

接着我们给它增加一个断点,然后再次运行程序,点击拾取阳光后会自动定位到该位置。

在这里插入图片描述


第八步,选中该条语句进行nop操作。
NOP指令相当于空指令,不执行任何动作,对应16进制字节码为90。当我们的软件有广告弹窗时,我们可以通过nop设置过滤掉弹窗。

在这里插入图片描述

接着选中0x004313F8该行,右键“汇编”,然后在弹出的窗口中设置为nop即可。

在这里插入图片描述

如下图所示,设置之后0x004313F8位置变成了NOP空指令。我们可以把这个语句NOP设置后,发现点击阳光数值是不增加的,从而确定了增加函数。

在这里插入图片描述


第九步,然后右键撤销修改,接着分析汇编代码JNZ操作。

在这里插入图片描述

这时可以看到,在CALL函数之前有一个JNZ操作,也就是说它可能需要判断值才会进入增加阳光的函数,我们在这个JNZ下断点,再进入游戏点击阳光。

  • JNZ:jump if not zero,结果不为零(或不相等)则转移。

在这里插入图片描述

多次运行程序放行之后会发现,当我们点击阳光之后,阳光会往上走,只有当阳光完全到达指定位置(左上角)之后,才会执行call增加阳光值,由此得知这个JNZ主要是判断阳关是否到位。

在这里插入图片描述

注意,这里需要多次在0x004313F4处下断点再取消运行游戏,反复操作之后会发现实现JNZ操作后阳光会向左上角移动,否则会停止状态。作者也是一点点摸着过河,加油!

在这里插入图片描述


第十步,继续执行程序定位点击函数。
在增加阳光的CALL函数(0x0043159B)前有个跳转,当JNZ执行成功之后才会增加这个CALL。我们在JNZ处下断点调试它的执行流程。

在这里插入图片描述

当我们在JNZ处下断点后,运行游戏会突然跳转到断点处停止,如下图所示,并且游戏屏幕没有任何操作,接着按下F7运行发现阳光即将出现。

在这里插入图片描述

阳光出现如下图所示。

在这里插入图片描述

由于JNZ断点会让游戏很卡,接着我们将该处断点取消,而在0x0043159B位置CALL增加断点,执行程序后会发现当我们点击阳光的时候会被断下,所以判断它是阳光采集函数。这是个很典型的if-else语句, 如果没有被点击就会一直执行动画CALL,如果被点击那么就会执行增加阳光的CALL。

在这里插入图片描述


第十一步,最重要的步骤出现,我们将jnz修改为jmp,从而实现自动捡取阳光。

在这里插入图片描述

当我们修改完成之后,会发现阳光一出现就自动增加,根本不需要手动去点击,最终完成了该辅助功能。同样,我们可以尝试编写C语言实现相关自动化修改,这里不再进行讲解。

  • JNZ:jump if not zero,结果不为零(或不相等)则转移。
  • JMP:汇编无条件跳转指令。

注意,CMP BYTE PTR DS:[EBX+50],0 是判断是否收集阳光的标志,然后才执行JNZ或JMP操作。当我们点击一个植物时,程序断了下来,可以看到赋值0,JNZ是不会跳转的;当我们点击阳光的时候才会赋值1,调用函数采集阳光。

在这里插入图片描述

在这里插入图片描述



三.总结

写到这里,这篇文章就介绍完毕,希望对您有所帮助,最后进行简单的总结下。

  • VS内存地址查看
  • Cheat Engine逆向修改阳光值
  • OllyDbg逆向自动拾取阳光

学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。


很多朋友问我如何学逆向分析?
下面给出推荐的学习路线和安全书籍。软件逆行其实就是搬砖活,你需要的是任性和基本功。可能大佬们会有很多技巧,但我希望你能扎扎实实去躺过那些坑,会看懂代码,会写代码,然后IDA和OD工具(倚天屠龙)用好,每天泡在代码中,肯定能行的。你应该这样学习:
1.多敲代码,重视实战;
2.程序不是写出来的,是调出来的;
3.根据自己兴趣和市场需求做一定规模的项目。

下图开发和逆向项目非常推荐你去完成,开发远控软件有助于你分析木马,CAD软件能提升你C++分析能力,做一个调制器或许反调试就不再那么难,自制一个小操作系统、小编译器、任务管理器,或许逆向原理就懂了。

在这里插入图片描述

最后给出了这一年我在网络安全、系统安全和机器学习看过的书,如果你想把AI更好的融入安全领域,看看这些书籍还是挺不错,我也厚着脸皮把自己写的两本Python数据分析书放了进来,哈哈~

网络安全:
在这里插入图片描述

系统安全:

在这里插入图片描述

AI+安全:

在这里插入图片描述


编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。



2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

参考资料:
[1] C语言逆向工程之游戏辅助开发 - C语言Plus
[2] 游戏辅助制作核心–植物大战僵尸逆向之召唤僵尸call(九)
[3] 游戏辅助制作核心–植物大战僵尸逆向之植物攻击加速(六)
[4] 植物大战僵尸自动拾取阳光 - TD.Jia
[5] 游戏逆向篇 - 星星向蓉
[6] [CE游戏逆向] Plants vs. zombies - Simpler_若离

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[安全攻防进阶篇] 三.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏 的相关文章

  • 九、软考2014年上半年软件设计师易错题整理

    文章目录 错题1 错题2 错题3 错题4 错题5 错题6 错题7 错题8 错题9 错题10 错题11 错题12 错题13 错题14 错题15 错题16 错题17 错题18 错题19 错题20 专业英语 错题1 在CPU中 常用来为ALU执行
  • POC模拟攻击利器 —— Nuclei入门(一)

    引入Nuclei的缘由 使用dependency check 发现的问题 需要研发人员修复 研发人员要求复现问题 这个的确有难度不仅仅要了解cve 相关bug的具体含义 还要模拟攻击 对于测试人员显然要求过高 凭借自己多年的各种测试工具调研
  • windows消息机制详解

    前言 windows是一个消息驱动的系统 windows的消息提供了应用程序之间 应用程序与windows 系统之间进行通信的手段 要想深入理解windows 消息机制的知识是必不可少的 基础 进程接收来自于鼠标 键盘等其他消息都是通过消息
  • Visual Stdio调试IDAPython脚本

    1 安装VS插件PTVS 这一步与第2步中安装版本应该一致 否则最后调试时会连不上 https github com Microsoft PTVS 2 安装python模块PTVSD pip install ptvsd 3 写如下代码ptv
  • 紫光电子档案管理系统存在SQL注入漏洞(漏洞复现)

    文章目录 紫光电子档案管理系统存在SQL注入漏洞 漏洞复现 0x01 前言 0x02 漏洞描述 0x03 影响范围 0x04 漏洞环境 0x05 漏洞复现 1 访问漏洞环境 2 构造POC 3 复现 紫光电子档案管理系统存在SQL注入漏洞
  • 【OS】【期末选择题】【2023春】【仅供参考】

    文章目录 题型 一 选择 第一章 10 第二章 19 第三章 23 第四章 32 第五章 15 第六章 15 二 填空题 三 简答题 1 信号量 2 调度算法 3 页面置换 4 虚拟地址到物理地址的映射 Reference 题型 题型 题量
  • go语言RSA加密算法(一):生成密钥对

    生成密钥对 分别存储到公钥文件 files public pem 私钥文件中 files private pem package main import crypto rand crypto rsa crypto x509 encoding
  • 网络安全笔记7——防火墙技术

    网络安全笔记7 防火墙技术 参考课程 中国大学MOOC 网络安全 北京航空航天大学 文章目录 网络安全笔记7 防火墙技术 防火墙概述 防火墙的类型及结构 防火墙的发展史 防火墙的分类 OSI模型与防火墙的关系 静态包过滤防火墙 操作 工作原
  • 用ACL实现防火墙功能

    目录 一 实验目的 二 实验环境 三 实验内容 实验步骤 测试数据等 1 打开Cisco Packet Tracer 6 0 按以下拓扑图接好线路 PC与Server的IP地址 掩码 网关配置 路由器连接配置 2 配置好设备的IP地址和静态
  • 浅析ms17_010(永恒之蓝)漏洞利用过程及防护措施

    一 永恒之蓝 Wannacry 漏洞简介 1 一种 蠕虫式 的勒索病毒软件 利用windows的SMB漏洞传播 可以获取System最高权限 2 主要对windows服务器 主机有较大影响 黑客利用病毒对电脑重要文件进行加密 索要高比特币
  • 第5章 用户身份与文件权限

    目录 序言 5 1 用户身份与能力 5 1 1 useradd命令 5 1 2 groupadd命令 5 1 3 usermod命令 5 1 4 passwd命令 5 1 5 userdel命令 5 2 文件权限与归属 5 3 文件的特殊权
  • 操作系统教程第六版——3.3页式存储管理笔记

    一 引入页式存储管理的目的 1 减少碎片 纯分页系统 2 只在内存存放那些反复执行或即将执行的程序段与数据部分 而把那些不经常执行的程序段和数据存放于外存待执行时调入 以提高内存利用率而提出来的 页式虚拟存储 请求分页系统 二 基本思想 1
  • JWT渗透与攻防(二)

    目录 前言 JWT漏洞演示之CTFhub 一 JWT漏洞演示之CTFhub 二 前言 我们在之前的文章中已经讲解过了JWT漏洞相关的原理和利用 今天我们就通过这篇文章再来了解一下JWT的漏洞 JWT漏洞演示之CTFhub 一 我们进入CTF
  • 唯一标识一台计算机解决方法:

    首先 网上介绍最多的方法就是cpu baseboard等硬件设备的序列号 但是 这两种获取方法都有问题 wmic cpu get processorid获取的cpu序列号 其实只是某个系列的代号 并不是唯一的 比如 12代i9都用的是一个C
  • windows基线检测

    按照Windows基线检查模板检查设置windows安全机制 windows基线检查选项及风险等级 编号 检查选项 风险等级 适用类型 1 系统已安装最新的service pack 2 系统已经安装了最新的安全补丁 本地安全策略检查选项及风
  • [当人工智能遇上安全] 8.基于API序列和机器学习的恶意家族分类实例详解

    您或许知道 作者后续分享网络安全的文章会越来越少 但如果您想学习人工智能和安全结合的应用 您就有福利了 作者将重新打造一个 当人工智能遇上安全 系列博客 详细介绍人工智能与安全相关的论文 实践 并分享各种案例 涉及恶意代码检测 恶意请求识别
  • 网络安全(黑客)自学秘籍

    想自学网络安全 黑客技术 首先你得了解什么是网络安全 什么是黑客 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 无论网络 Web 移动 桌面 云等哪个
  • 为什么这么多人自学黑客,但没过多久就放弃了(掌握正确的网络安全学习路线很重要)

    网络安全是一个 不断发展和演变 的领域 以下是一个 网络安全学习路线规划 旨在帮助初学者快速入门和提高自己的技能 基础知识 网络安全的 基础知识 包括 网络结构 操作系统 编程语言 等方面的知识 学习这些基础知识对理解网络安全的原理和技术至
  • 网络安全从入门到精通(超详细)学习路线

    首先看一下学网络安全有什么好处 1 可以学习计算机方面的知识 在正式学习网络安全之前是一定要学习计算机基础知识的 只要把网络安全认真的学透了 那么计算机基础知识是没有任何问题的 操作系统 网络架构 网站容器 数据库 前端后端等等 可以说不想
  • 一个网工(网络工程师)七年的职业血泪史....

    前言 一个工作了七年的老网工 上家公司待了五年 现在这家公司也快三年了 分享一些我自己学习网络安全路上的一些经历 也算是帮大家少走些弯路 一 如何学习网络安全 1 不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全 一般

随机推荐

  • ERP为什么在生产制造环节应用效果不理想?

    ERP在生产制造环节应用效果不理想的根本原因是ERP负责的是宏观管控 而生产制造环节应该使用MES来进行精细化管理 下面就详细讨论下 生产制造环节发生在工厂 工厂可以没有ERP 但如果要用系统 必定是MES系统 ERP是为企业服务的 MES
  • 学习汇编语言MASM笔记1

    关于源程序书写格式 太基础的略去 只记录一些我还不熟悉的内容 参考https wenku baidu com view 7ca70e0ef342336c1eb91a37f111f18582d00c5d html 其他网页的参考以挂上相关连接
  • Flutter 踩坑TabBar之TabController.addListener

    一 问题 之前提到TabBar的第二种实现方式 TabController是有坑的 问题 这个监听在点击切换tab的时候会回调两次 左右滑动切换tab正常调用一次 二 原因 点击切换tab的时候执行了一个动画效果 滑动切换的时候是没有的 在
  • 用JAVA写的一个自动化简单示例!

    public class lianxi public static void main String args throws InterruptedException System getProperty webDriver firefox
  • 2022-03-24 RK3566 MIPI屏 调试记录,panel-init-sequence 命令格式介绍

    一 Single channel mipi屏的硬件连接如下 二 根据屏厂给的初始化代码配置dts了 屏厂给的初始化代码分几种形式 这个文章里面RK PX30 android8 1的mipi屏调试 要不要买菜 的博客 CSDN博客 有比较详细
  • Ubuntu20.04(linux)离线安装nacos

    一 解压 1 首先local目录得有nacos server 2 0 4 tar gz包 切换目录cd usr local执行以下命令 tar zxvf nacos server 2 0 4 tar gz 二 创建nacos service
  • postgresql安装及常见错误处理

    postgresql安装及常见错误处理 一 安装说明 最近 由于业务需要 我抛弃了一直使用的mysql数据库 开始转向postgresql数据库 至于为什么选择postgresql 肯定是postgresql比mysql更强大 对于post
  • DECORATOR 装饰模式

    DECORATOR 装饰模式 对象结构性模式 1 意图 动态地给一个对象增加一些额外的职责 就增加功能来说 Decorator模式相比生成子类更为灵活 2 别名 包装器Wrapper 3 动机 有时我们希望给某对象而不是整个类添加一些功能
  • UnityVR--机械臂场景9-简单流水线应用1

    目录 一 整体介绍 二 准备工作 三 建立流水线 1 流水线包含的功能 2 流水线的代码结构 3 场景实现 4 测试运行 一 整体介绍 流水线是在空间和时间上合理安排和组织工艺线路的一种形式 它涉及到一种或多种生产设备 传感器 物料传输设备
  • 字符串 最长公共前缀

    LC 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 输入 strs flower flow flight 输出 fl swift 实现 class ViewController UIViewC
  • Google Chrome浏览器的Cookies文件找不到问题

    一 问题 有个每天执行的Python代码 会自动获取Google Chrome浏览器的Cookie来访问网站数据 具体相关实现思路 获取chrome80谷歌浏览器存储的指定网站Cookie数据方法详解 报错信息如下 Exception Co
  • Spring中的IOC容器必须要了解的一些概念

    文章目录 Spring中的IOC容器必须要了解的一些概念 a SpringIOC容器意义 b 怎样往Spring的IOC容器里面存储对象 c 怎样从SpringIOC容器中取对象 d 如果对象的属性是对象类型 那么要怎么给对象的属性赋值呢
  • macOS通过钥匙串访问找回WiFi密码

    如果您忘记了Mac电脑上的WiFi密码 可以通过钥匙串访问来找回它 具体步骤如下 1 打开Mac电脑的 启动台 然后在其他文件中找到 钥匙串访问 2 运行 钥匙串访问 应用程序 点击左侧的 系统 然后在右侧找到要查看的WiFi网络名称 如果
  • 蓝桥杯 试题 算法训练 拿金币 C++ 详解

    题目 有一个N x N的方格 每一个格子都有一些金币 只要站在格子里就能拿到里面的金币 你站在最左上角的格子里 每次可以从一个格子走到它右边或下边的格子里 请问如何走才能拿到最多的金币 前言 请先阅读以下两篇文章 https blog cs
  • SPI机制

    1 概念 spi全称为 Service Provider Interface 是JDK内置的一种服务提供发现机制 SPI是一种动态替换发现的机制 一种解耦非常优秀的思想 它是jdk提供给 服务提供厂商 或者 插件开发者 使用的接口 是一种扩
  • scrapy模拟点击

    lua click function main splash args assert splash go args url assert splash wait 0 5 local form splash select buttonId f
  • CDH配置显示计算机错误,CDH常见问题及解决方法(待续)

    启动CDH提示Deploy Client configuration fail 原因 依赖包perl未安装 yum install y perl 自用脚本中的yum操作所需依赖包 仅做参考 yum Cy install wget bind
  • 二维字符数组利用gets()函数输入

    举例 char a 10 81 for int i 0 i lt 10 i gets a i a是二维字符数组的数组名 相当于一维数组的指针 所以a i 就相当于指向第i个数组的指针 类型就相当于char 相当于字符串 转载于 https
  • Scrapy 如何正确发送 POST请求 获取到响应数据的三种写法

    问题描述 碰到了使用 data pageNo 1 pageSize 100 tableName equal projectType G1 publishTimeStart areaCode title publishTimeEnd mode
  • [安全攻防进阶篇] 三.OllyDbg和Cheat Engine工具逆向分析植物大战僵尸游戏

    从2019年7月开始 我来到了一个陌生的专业 网络空间安全 初入安全领域 是非常痛苦和难受的 要学的东西太多 涉及面太广 但好在自己通过分享100篇 网络安全自学 系列文章 艰难前行着 感恩这一年相识 相知 相趣的安全大佬和朋友们 如果写得