精华内容
下载资源
问答
  • 易语言 从0 编写FPS游戏逆向软件(由于是入门课,易语言和CE的基础不在进行讲解,请自行学习!) 从0找地址,用易语言写出代码,通过 读取游戏数据 画在屏幕上 形成种种功能
  • 易语言 从0 编写FPS 辅助(由于是入门课,易语言和CE的基础不在进行讲解,请自行学习!)1.认识辅助的原理和实现方法!...通过 读取游戏数据 画在屏幕上 形成 透视效果渲染游戏Dx 人物透视!? 修改内存
  • 学习C/C++基础, 并从内存和汇编的角度深入理解C++, 为以后的逆向做好基础铺垫 学习Windows常用API函数、网络通信(socket...实战MFC、大漠插件、雷电模拟器控制、MySQL数据库操作基础、Lua、游戏逆向分析、内核驱动基础
  • 游戏逆向

    2021-09-10 17:11:38
    游戏数据的分析 Moba游戏的技能躲避和技能轨迹的原理与实现 FPS透视 的原理与实现(包括飞天遁地飞刀秒杀加速子弹穿墙等等原理与实现)   Call的检测分析与实战 内存效验的分析与实战 CRC的处理等等 每周更新4...
  • 游戏逆向、辅助编写
  • 购买此套教程后您将完全学会如何自行研发程序并且为游戏安全贡献一份力 逆向安全开发设计 这是必不可少的一部分!
  • 本课程将带领大家分析计算机程序,逆向程序,漏洞挖掘,发现计算机程序的安全隐患,从而提升大家对计算机程序安全的认识。
  • 娜璋AI安全之家于2020年8月18日开通,将专注于Python和安全技术,主要...第一篇文章先带领大家学习什么是逆向分析,然后详细讲解逆向分析的典型应用,接着通过OllyDbg工具逆向分析经典的游戏扫雷,再通过Cheat Engin

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

    系统安全系列主要包括恶意样本分析、病毒逆向分析、系统安全攻防实战和Windows漏洞利用等,通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步。第一篇文章先带领大家学习什么是逆向分析,然后详细讲解逆向分析的典型应用,接着通过OllyDbg工具逆向分析经典的游戏扫雷,再通过Cheat Engine工具复制内存地址获取,实现一个自动扫雷程序。

    该篇文章也是作者学习科锐钱林松老师在华中科技大学的分享视频,这里非常推荐大家去看看。话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,如果有写得不好的地方,可以联系我修改。基础性文章,希望对您有所帮助,作者的目的是与安全人共同进步,加油~

    作者的github资源:


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


    一.什么是逆向分析

    1.逆向工程

    科锐钱老师真的是大佬,拥有十余年的逆向工作经验,专注于先进技术的算法还原及逆向实训。作者从中学习到很多知识。本次课程分享的是逆向分析技术的引导,课程目标是带领大家了解下逆向分析是干什么的,在安全领域中是什么地位,并且穿插各种实战示例,尽量提高大家的兴趣。逆向分析是安全的基础行业,喜欢的人觉得很好玩,不喜欢的人觉得很苦逼。

    在讲逆向分析前,大家思考下:你有没有把别人的产品或Demo还原出源代码来过呢?而且就是作者的源代码,包括里面的BUG。

    • 反汇编:一次编译技术,阅读汇编代码反推出对应的高级代码,比如VC、GCC、Delphi等。
    • 反编译:通常在C#、Java、.NET框架等,因为它可以直接把元数据还原成高级代码,反编译其实更难,但是对使用的人更简单,比如Android的APK反编译成JAVA源代码。

    下面开始吧!第一个大家需要知道的是“什么是逆向工程?”


    什么是逆向工程?
    简单而言,一切从产品中提取原理及设计信息并应用于再造及改进的行为,都是逆向工程。在信息安全中,更多的是调查取证、恶意软件分析等,不管你用什么工具或手段,能达到其目的就算逆向分析。下图是《变形金刚》里面对它的描述,2007年的时候国内对信息安全重视程度也不高,对逆向分析也没有什么概念,真正重视是从老大提出“没有网络安全就没有国家安全”之后。而那时候的国外电影就已经用到了“reverse engineered”,说明国外导员对这个技术及应用场景都是了解的。

    在这里插入图片描述

    逆向工程最早是在二Z时的船舶工业,分析船的弱点,通过外形反推内部结构,其中粉红色是Amuno、黄色是引擎室、蓝色是龙骨、绿色是推进器等等。只有知道怎么造一个船后,才能进行逆向分析。

    在这里插入图片描述

    当然还有模具逆向、材料逆向、软件逆向,在我们的软件行业,就称为软件逆向。同样,在网络攻防中,你不可能先给出源码再进行攻击,通常在安全对抗中第一步要做的就是逆向分析,不管你用什么方式进行逆向分析,你都需要搞清楚:

    • 它是什么:样本是什么,良性的还是恶意的
    • 它干了什么:样本做了哪些事情
    • 我们怎么办:知道做了什么才能进行反制,如删除注册表启动项、清理感染的勒索病毒等

    在这里插入图片描述



    2.逆向分析的典型应用

    软件逆向有很多实现办法达到我们的目标,典型的应用包括软件工程、网络安全、司法取证、商业保护等。

    在这里插入图片描述


    逆向应用——病毒分析
    对于逆向分析,最大的行当就是病毒分析。对于一个安全企业来说,比如360,它的病毒分析团队属于它的主业,包括360、金山毒霸、腾讯医生等,它们主要业务就是根据一些恶意样本的行为,给出解决方案(专业查杀、完善引擎、应急响应),比如WannaCry爆发时,立刻分析其原因和传播漏洞,分析其影响程度及给出解决方案。所以,研究逆向病毒的人很多,当然坏的行当做游戏WG也很多,它们的对抗也是没有源码的,游戏安全人员会分析WG样本进行完善及修补。

    2000年早期制作病毒的人都比较单纯,写病毒是为了技术炫耀或开玩笑,典型的比如乒乓球病毒,每个周末都爆发,开启计算机后就有个乒乓球在电脑上弹,导致电脑不能用,而周一到周五恢复正常(可能是讨厌加班),此时的病毒没有获取用户隐私、删除数据等行为。

    在这里插入图片描述


    逆向利用——游戏保护
    从2005年开始,随着网游普及和网络虚拟财产(游戏装备)出现,大家也没有安全意识,出现了很多恶意程序和病毒,比如熊猫烧香,它是由李俊制作并肆虐网络的一款电脑病毒,是一款拥有自动传播、自动感染硬盘能力和强大的破坏能力的病毒,它不但能感染系统中exe、com、pif、src、html、asp等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为gho的系统备份文件。

    同时,游戏WG也开始增多,并形成了包括私服、生产、PJ、DH等功能的生产线,通过分析游戏的关键数据结构,找到关键数据并对数据做修改以达到提升的效果。比如吃鸡游戏,如果你通过逆向分析找到每个玩家的坐标位置了,你是不是可以写一个透视G,前提是你知道其数据以什么形式存放在哪里,这就属于PJ挂。你甚至还可以修改攻击力、防御值,游戏的碰撞检测(两者间距离小于某个值)也可以取消实现飞天、穿墙等。

    在这里插入图片描述

    当然,我们的信息安全是正能量的,逆向分析主要是剖析病毒,包括:

    • 逆向病毒,获取病毒传播方法,可以遏制病毒传播
    • 逆向病毒,获取病毒隐藏手段,可以根除病毒
    • 逆向分析病毒,获取功能目的,可以溯源定位攻击者

    逆向应用——漏洞挖掘
    逆向应用还包括漏洞挖掘和漏洞利用,其中黑客挖掘漏洞的常用方法为:

    • 通过分析开源软件的源代码,获取漏洞
    • 通过分析产品本身获取漏洞
    • 通过分析可以利用漏洞的软件样本
    • 通过比较软件前后补丁的差异

    大家是否有研究过shellcode、缓冲区溢出?漏洞利用溢出缓冲区,首先要把关键内存、关键代码定位出来,这就属于逆向分析。在漏洞利用过程中,只有你越熟悉周围环境则可利用的漏洞就越多,比如逆向服务端,调用shell创建新用户功能,这个时候是没有源代码的,所以需要利用漏洞分析。

    逆向分析是信息安全行业的基础技术、必须技术和重要技术,只有你功力越深厚,则做的事情就越多。

    在这里插入图片描述


    漏洞利用——比较补丁
    下图展示了比较补丁前后差异的工具。比如官方软件在网上有安全更新,关注安全行情和漏洞公告的行当或企业会对比官方的补丁,在拿到官方升级后的软件,他们会对两个流程做比较,其中左边流程多了一个节点,说明升级就是这个位置,再详细分析为什么多了这个个检测。注意,官方公告通常会非常简略(补丁号、造成后果、影响范围),比如某个MP3播放器在播放某个冷门格式的音频文件时,会触发一个远程溢出问题,接下来我们就需要去做逆向分析,下载升级前和升级后的版本做流程对比。

    在这里插入图片描述


    逆向应用——电子取证
    通过样本追踪地理位置的实例,后续会给出一个实战案例。

    在这里插入图片描述


    漏洞利用——无文档学习
    表示没有源码的情况下获取程序信息,称为竞品分析。假设某个公司对同行的产品很感兴趣,想知道为什么它们的算法比我们的好,然后需要去分析和算法还原,这也是逆向分析的主要应用。最好的竞品分析,是能够将算法完美还原,两个代码再次编译后,除了地址不一样其他都一样(IDA查看)。注意,看懂代码完善程序并换另一种程序语言复现,算学习;而如果直接COPY别人的二进制或二进制序列,这算抄袭。

    在这里插入图片描述



    二.扫雷游戏逆向分析

    1.游戏介绍

    下面通过扫雷游戏进行逆向分析讲解。

    在这里插入图片描述

    此时我们打开一个工具,360会提示危险操作,点击“允许本次操作”即可。

    在这里插入图片描述

    此时就能够判断某个点是不是雷,从而方便我们点击完成扫雷游戏,O(∩_∩)O

    在这里插入图片描述

    接着进行逆向分析。扫雷中肯定有雷区的定义,作为程序员,你会怎么定义有雷或没有雷,或者插个旗子的状态呢?我们会使用一个二维数组来存储。那么,什么时候肯定会访问这个二维数组呢?在绘制整个游戏区、点击方格的时候都会访问。

    在绘制游戏区时,Windows编程有个关键函数,叫做——BeginPaint。BeginPaint函数为指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到一个PAINTSTRUCT结构中,所以它将是个突破口。



    2.OllyDbg动态分析

    接着我们使用Ollydbg打开,在逆向分析中,动态分析(OD)和静态分析(IDA)非常多,动静结合也是常用的分析手段。

    推荐作者上一个系列的两篇入门文章:

    • 静态分析:程序并未运行,通过分析文件的结构(格式)获取其内部原理。
    • 动态分析:在程序的运行过程中,分析其内部原理。
    • 灰盒分析:既不静态也不调试,通过一堆监控软件(注册表监控、文件监控、进程监控、敏感API监控)在虚拟机中跑程序,再分析恶意软件的大体行为,并形成病毒分析报告。

    至于哪种方法更好?我们需要具体问题具体分析,如果是分析扫雷游戏,因为没有危害可以动态调试分析,但如果是WannaCry蠕虫,你就不能在真机上动态分析。同时,很多安全公司为了及时响应各种安全事件,会把样本自动上传到服务器中,它们每天会收到成千上万的恶意样本,但可能存在某些未知样本只上传部分的原因,比如某个未知样本是个动态链接库,此时没有运行条件,只能进行静态分析或者模拟接口分析。

    在这里插入图片描述

    软件静态分析包括分析文件格式、分析网络协议、分析软件日志、修改存档文件等,下图展示了通过修改文件游戏作弊的示例。

    在这里插入图片描述

    软件动态调试可以用于HH翻译,比如《仙剑奇侠传》。

    在这里插入图片描述


    OllyDbg是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,是当今最为流行的调试解密工具之一。它还支持插件扩展功能,是目前最强大的调试工具之一。OllyDbg打开如下图所示,包括反汇编窗口、寄存器窗口、信息窗口、数据窗口、堆栈窗口。

    • 反汇编窗口:显示被调试程序的反汇编代码,包括地址、HEX数据、反汇编、注释
    • 寄存器窗口:显示当前所选线程的CPU寄存器内容,点击标签可切换显示寄存器的方式
    • 信息窗口:显示反汇编窗口中选中的第一个命令的参数及跳转目标地址、字符等
    • 数据窗口:显示内存或文件的内容,右键菜单可切换显示方式
    • 堆栈窗口:显示当前线程的堆栈

    下图是打开EXE后显示的界面。

    OD常用的快捷键调试方式包括:

    F2
    设置断点,如下图所示的红色位置,程序运行到此处会暂停,再按一次F2键会删除断点。

    F9
    按下这个键运行程序,如果没有设置相应的点,被调试的程序直接开始运行。

    F8
    单步步过,每按一次这个按键,将执行反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。

    F7
    单步步入,功能通单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先停留在子程序的第一条指令上。如下图进入CALL子程序。

    F4
    运行到选定位置,即运行到光标所在位置处暂停。

    CTRL+F9
    执行到返回,按下此键会执行到一个返回指令时暂停,常用于从系统领空返回到我们调试的程序领空。

    ALT+F9
    执行到用户代码,从系统领空快速返回我们调试的程序领空。


    接着正式分析扫雷程序。

    第一步:启动OllyDbg软件,选择菜单“文件”,打开winmine.exe文件。
    这里我们猜测游戏中存在一个二维数组,当我们显示界面时会访问这个二维数组,并且调用BeginPaint函数来显示界面。所以接下来需要找到调用BeginPain的位置。

    在这里插入图片描述


    第二步:在反汇编窗口右键鼠标,选择“查找”->“当前模块中的名称”。

    在这里插入图片描述

    当我们在键盘上输入“BEGINPAINT”时,能够迅速找到对应的函数。

    在这里插入图片描述


    第三步:点击右键选择“在每个参考上设置断点”。

    在这里插入图片描述

    接着点击下图所示的“B”进行断点设置界面。
    在这里插入图片描述

    双击该断点会进入到反汇编窗口BeginPaint对应位置。

    在这里插入图片描述


    第四步:按下“F9”运行程序,可以看到在BeginPaint和EndPaint之前有一个CALL函数。

    在这里插入图片描述

    选中该行右键“跟随”之后,去到0x01002AC3位置,发现又存在很多个CALL函数。

    在这里插入图片描述

    一种方法是一个一个函数分析,这里使用另一种方法。当我们在使用扫雷时,发现它的界面并没有闪烁,所以怀疑使用了 双缓存技术,这是我们的突破口。双缓存是在缓存中一次性绘制,再把绘制的结果返回在界面上。比如,你要在屏幕上绘制一个圆、正方形、直线,需要调用GDI的显示函数,操作显卡画一个圆,再画一个正方形和直线,它需要访问硬件三次;此时依赖硬件的访问速度,而且如果绘制错误擦除再绘制,需要反复的访问硬件,为了减少硬件操作,我们在内存中把需要绘制的图像准备好,然后一切妥当之后提交给硬件显示。

    PS:当然,为什么是双缓存技术呢?目前的我也无法理解。只有当我们做了大量的逆向分析后,才会养成一定的经验来帮助我们判断。任何行业和技术都是这样的,包括作者自己,目前也是一步一个脚印的去学习,去总结,去进步。期待与您前行,加油~


    第五步:继续在反汇编窗口右键鼠标,选择“查找”->“当前模块中的名称”,找到双缓存技术的核心函数BitBlt。
    BitBlt是将内存中的数据提交到显示器上,该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。

    在这里插入图片描述

    点击右键选择“在每个参考上设置断点”,如下图所示,此时绘制了两个断点。

    在这里插入图片描述


    第六步:运行程序去到第二个断点BitBlt位置。

    在这里插入图片描述

    注意,此时显示了两层循环,刚好符合我们二维数组的遍历,按F8单步步过可以动态调试观察其效果。

    在这里插入图片描述


    第七步:在0x01002700位置按下F2取消断点,并在该函数的起始位置0x010026A7设置断点,接下来需要详细分析这个双缓存函数绘制过程。

    在这里插入图片描述

    代码中,ESI首先通过XOR进行清零,然后再加1;接着ESI会调用CMP进行比较,说明ESI是循环变量。接下来“MOV AL, BYTE PTR [EBX+ESI]”表示将EBX和ESI相加赋值给AL,然后AL判断一个值再做其他的,这有点像访问数据,后面的显示特性随着AL做改动,即AL影响后面显示的内容。

    MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。

    在这里插入图片描述


    第八步:下面看看寄存器,其中EBX是基址寄存器,ESI是它的偏移量,猜测这个EBX基址寄存器和关键数据有关。

    在这里插入图片描述

    选择EBX基址寄存器,然后选择“数据窗口中跟随”,显示如下图所示的数据。

    在这里插入图片描述

    数据窗口显示如下,我们发现“0F”出现较多,猜测多的这个可能是空的,少的那个是雷“8F”。

    在这里插入图片描述


    第九步:数据区详细分析。
    我们选择0x010026A7位置,然后按下F2取消断点,然后继续运行程序,此时弹出扫雷主界面。游戏中通常会存在边界(围墙),这里“10”应该是边界位置,而0x01005361则为起始位置。

    在这里插入图片描述

    如果第一个不是雷、第二个不是雷、第三个不是雷,第四个才是雷,我们“0F”是空格,“8F”是雷的猜测则正确。

    在这里插入图片描述

    我们取消0x01002700位置的断点,然后运行程序弹出扫雷界面,根据下面的二维矩阵进行扫雷。

    在这里插入图片描述

    如下图所示,前面3个果然时空格,而第四个则时雷。“8A”是雷,“0F”是空格实锤,而且点过的地方会变成数字,比如“40”、“41”、“42”等。

    在这里插入图片描述


    第十步:写个程序进行扫雷数据区详细分析。
    我们重新运行程序,选择“查找”->“当前模块中的名称”,找到双缓存技术的核心函数BitBlt,然后重新找一下,找到代码位置。如下图所示,EBX就是雷区的起始位置,我们要想办法把它读取出来,再往前“MOV EBX, 01005360”代码看到了EBX的赋值定义。

    在这里插入图片描述

    接着我们输入F7单步调试,执行完0x010026C4赋值语句后,我们在数据窗口中跟随EBX寄存器,显示如下图所示。前面8个均为“0F”表示空格,第9个为雷,再验证一次“01005360位置”,就开始准备写程序了。

    在这里插入图片描述

    验证成功,开始写程序吧!

    在这里插入图片描述


    第十一步:扫雷辅助程序。
    我们编写了这样一个程序,当它开启后,我们鼠标移动到方格,如果是雷它的标题会变成“扫雪(xue)”,然后我们不点击它就可以了。哈哈~

    在这里插入图片描述

    正常是“扫雷”。

    在这里插入图片描述

    雷区显示为“扫雪”。当然你也可以写得更隐蔽些,比如和苹果电话手表建立连接,如果是“雷”让手表震动一下,否则正常。

    在这里插入图片描述


    注意,基本原理知道后,就需要开发解决问题了。对于安全行业来说,不管是做病毒还是研究漏洞利用或游戏防护的,逆向分析都是基础,开发解决问题才是关键。比如,某个病毒样本的行为已经分析清楚了,这个病毒在哪里创建系统文件、修改哪个系统文件、注入到哪个进程、动了哪个注册表等等,逆向分析第一步完成,但更重要的是怎么解决问题,创建注册表就需要删除注册表,修改系统文件就要还原文件。

    我们在网上搜索某些病毒资料时,有些逆向工程师会给出手工修复方案,比如关闭哪个服务、删除哪个隐藏文件、手工清除注册表哪一项等。但是对于安全公司来说,比如360公司,你安全扫描完成之后,不可能弹框提示用户手工修复,而是需要提供自动化方案一键修复,最终结果是需要修改杀毒软件的引擎代码,或者提供专杀工具给用户,这个时候工具需要自动化完成相关操作。

    很多新手会看不起开发,觉得搞逆向、搞网安的是王道,不用学开发,这是不对的。 针对上面的实战,我们就发现逆向是站在开发基础上,反向推导作者是怎么做的,比如扫雷需要思考作者会用什么方式表示雷区,然后怎么用UI体现出来以及调用什么函数实现。所以,逆向分析之前都要教开发类的课程,《数据结构》《操作系统》《计算机组成原理》《编译原理》等课程掌握越深入越好。



    三.扫雷游戏检测工具

    通过第二部分,我们知道以下信息:

    • 扫雷的首地址为0x01005360
    • 显示“0F”表示空格,显示“8F”表示雷
    • 雷区的边界为0x10

    原理是找到雷在内存中的值,只要不是雷值我们把它点击开来。接下来作者再补充一个逆向辅助工具,通过CheatEngine实现雷区检测。

    Cheat Engine又称CE修改器,是一款内存修改编辑工具。你可以通过Cheat Engine软件来修改游戏中的内存数据、人物属性、金币数值等等,功能强大且操作简单,可以为你带来良好的更好的体验游戏。


    1.Cheat Engine确定起始位置

    第一步,打开Cheat Engine软件,点击“选择打开一个程序”按钮,如下图所示。

    在这里插入图片描述

    打开扫雷软件设置为初级。

    在这里插入图片描述


    第二步,选择扫描类型为“未知的初始数值”,选择“数值类型”为字节,然后点击“首次扫描”。

    在这里插入图片描述

    此时显示7,290,880个数据,如下图所示:

    在这里插入图片描述


    第三步,接着我们点击扫雷,然后在“扫描类型”中选择“变动的数值”,点击“再次扫描”,此时返回结果183,169个。最终通过反复的筛选找到首地址。

    在这里插入图片描述

    继续点击扫描,如下图所示。

    在这里插入图片描述


    第四步,如果出现地雷则选择“未变动的数值”,点击“再次扫描”,接着继续新一轮的扫雷游戏。

    在这里插入图片描述

    在这里插入图片描述

    始终以第一个方格的状态为目标进行重复的操作。

    • 开始扫描:设置“未知的初始数值”
    • 扫描第一个格子:设置“变动的值”
    • 继续扫描,结果是雷:设置“未变动的值”
    • 继续扫描,结果非雷:设置“未变动的值”
    • 重新开始:设置“变动的值”
    • 重新开始如果第一个格子和上一次一样,则设置“未变动的值”,否则“变动的值”

    下图展示了最后5个结果,接着继续反复筛选。

    在这里插入图片描述

    最终获取如下图所示的结果,其初始地址为——0x01005361,和前面OD软件分析的一样。

    在这里插入图片描述


    第五步,双击该行移动至底部,然后右键选择“浏览相关内存区域”选项。

    在这里插入图片描述

    显示内容如下图所示,它同样和我们前面OD分析的内容一致。其中“8F”表示雷,“40”表示空格,“41”到“49”表示数字,“10”表示边界,同时“0F”表示隔一行。

    在这里插入图片描述

    如下图所示,成功完成了扫雷游戏,O(∩_∩)O

    在这里插入图片描述

    在这里插入图片描述


    2.Cheat Engine确定边界

    第一步,我们查看扫雷初级的高度是“9”,然后重新打开建立“新的扫描”。

    在这里插入图片描述

    输入数字“9”再点击“首次扫描”,返回7174个结果。

    在这里插入图片描述


    第二步,选择中级难度,对应的高度是“16”,然后重新打开建立“再次扫描”,仅剩4个结果。

    在这里插入图片描述

    在这里插入图片描述


    第三步,选择高级难度,设置高度最高即“24”,然后重新打开建立“再次扫描”

    在这里插入图片描述

    最终剩2个结果,高度可能是:

    • 0x01005338
    • 0x010056A8

    在这里插入图片描述


    第四步,使用同样的方法找到宽度。
    宽度返回两个结果:

    • 0x01005334
    • 0x010056AC

    在这里插入图片描述



    3.C++编写鼠标坐标获取案例

    接下来我们开始编写代码,首先给大家看看鼠标坐标获取的一段代码,我们鼠标通常是(x, y)的形式。

    第一步,创建空项目,名称为“MouseMsg”。

    在这里插入图片描述


    第二步,为该工程添加一个“main.cpp”文件,并且添加启动项。

    在这里插入图片描述

    在这里插入图片描述


    第三步,配置graphics.h文件。
    graphics.h是一个针对Windows的C语言图形库,分为像素函数、直线和线型函数、多边形函数、填充函数等。在学习C++游戏编程时,通常会发现VS中没有”graphics.h”头文件,因此需要配置。

    (1) 先从作者github中下载好所需要的文件,如下所示:

    在这里插入图片描述

    下载完后打开下载好的 Inlcude 文件夹,里面有两个头文件:

    在这里插入图片描述

    (2) 将里面的两个文件进行复制,然后粘贴到VS安装目录的include文件夹中。

    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include

    在这里插入图片描述

    (3) 打开下载好的文件夹中的 lib2015子文件夹,将里面的东西全部选中复制,粘贴到VS2015安装目录的 lib 文件夹中。

    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\lib\x86
    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\lib\x64

    在这里插入图片描述
    在这里插入图片描述

    (4) 接下来就可以在VS中添加“graphics.h”头文件了,里面有很丰富的绘图函数可供我们使用。

    #include <graphics.h>              // 引用图形库头文件
    #include <conio.h>
    
    int main()
    {
    	initgraph(640, 480);            // 创建绘图窗口,大小为 640x480 像素
    	setlinecolor(RGB(255, 0, 0));   // 设置当前线条颜色
    	setfillcolor(RGB(0, 255, 0));   // 设置当前填充颜色
    	fillcircle(200, 200, 100);      // 画圆,圆心(200, 200),半径 100
    	_getch();                       // 按任意键继续
    	closegraph();                   // 关闭图形环境
    }
    

    在这里插入图片描述


    第四步,编写鼠标事件代码。

    #include <graphics.h>              // 引用图形库头文件
    #include <stdio.h>
    
    int main()
    {	
    	//定义鼠标
    	MOUSEMSG m;
    	//初始化窗口 500宽度 500高度
    	initgraph(500, 500);
    
    	while (1) {
    		//获取鼠标消息
    		m = GetMouseMsg();
    		char buff[256];
    
    		//鼠标左键按下
    		if (m.uMsg == WM_LBUTTONDOWN) {
    			//清空数组
    			memset(buff, 0, 256);
    			sprintf_s(buff, "X坐标:%d, Y坐标:%d", m.x, m.y);
    			MessageBox(NULL, buff, "坐标", MB_OK);
    		}
    	}
    	return 0;
    }
    

    运行前需要设置编码方式为“使用多字节字符集”,否则会报错。

    在这里插入图片描述

    运行结果如下图所示,可以看到鼠标点击会显示对应的坐标位置。

    在这里插入图片描述

    其中GetMouseMsg函数表示获取鼠标消息,通过Spy++可以看到很多Windows系统自带的鼠标操作、键盘操作、消息操作等,同时能获取鼠标是左键或右键按下以及对应坐标。

    在这里插入图片描述



    4.C++编写自动扫雷程序

    接下来是通过C++实现一键扫雷功能,主要是模拟鼠标在雷区的点击操作,并且按下所有非雷区域从而实现一键扫雷。利用的是Windows应用程序的消息机制,通过SendMessage函数向指定窗口发送消息,也就是在获取到扫雷的窗口句柄后,利用这个函数向该窗口发送鼠标按键消息,从而实现模拟鼠标的操作。

    该部分参考ioio_jy老师的文章:逆向工程第007篇:扫雷辅助的研究——0秒实现一键自动扫雷

    第一步,创建一个应用程序名叫“SaoleiHelp”,并添加主函数。

    在这里插入图片描述


    第二步,分析扫雷的区域及坐标定义。
    坐标是基于客户区的左上角,但是这个客户区是怎么定义的呢?
    如下图所示,究竟A点是客户区的左上角,还是说B点才是呢?如果A点为坐标原点,那么第一块雷区的坐标就应为(AC,CE),如果B点为坐标原点,那么第一块雷区的坐标就应为(BD,DE)。经过实际测试,MSDN中所谓的客户区,其实是以B点作为起点的位置,即原点坐标(0,0),而雷区中心即E点的坐标为(16,61),每个雷区小方块的大小为16×16,于是可以知道,这里需要循环计算出雷区每一个小方块的坐标,这个坐标与保存有雷区的二维数组下标紧密相关。

    在这里插入图片描述

    假设这个二维数组是mine[y1][x1],其中y1表示的是雷区有多少行,x1表示雷区的列数,那么每个雷区方块的坐标为:

    x = x1 * 16 + 16;
    y = y1 * 16 + 61;
    

    在获得了坐标以后,就可以通过如下语句来模拟鼠标的点击操作了:

    SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(x, y));
    SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(x, y));
    

    第三步,分析扫雷游戏的雷区长宽数据。
    结合之前宽度、高度的分析,发现高度位置为0x01005338,宽度位置为0x01005334。我们进一步推断,从0x01005330开始,这里的一行绿色数据包含有0x0A、0x09以及0x09这三个数值,很明显这三个数据正是当前雷区的地雷数量以及宽、高等信息

    • 雷数:0x01005330
    • 宽度:0x01005334
    • 高度:0x01005338

    在这里插入图片描述

    同时,我们上面的逆向分析已经知道雷区分布的信息。

    • “8F”表示地雷
    • “8E”表示旗子
    • “40”表示空格
    • “41”到“49”表示数字
    • “10”表示边界
    • “0F”表示隔一行

    还有一个重要信息是雷区的分布起始地址,即:

    • 0x01005361

    但如果计算含有边界的情况,雷区的分布情况则为:

    • 起始地址:0x01005340
    • 结束地址:0x0100567F

    在这里插入图片描述


    完整代码如下:

    #include <stdio.h>
    #include <windows.h>
    #include <graphics.h>
    
    int main() {
    	DWORD Pid = 0;
    	HANDLE hProcess = 0;
    
    	DWORD result1, result2;
    
    	// 获取扫雷游戏对应的窗口句柄
    	HWND hWnd = FindWindow(NULL, L"扫雷");
    	if (hWnd != 0) {
    		// 获取扫雷进程ID
    		GetWindowThreadProcessId(hWnd, &Pid);
    		// 打开扫雷游戏获取其句柄
    		hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
    		if (hProcess == 0) {
    			printf("Open winmine process failed.");
    			return 0;
    		}
    
    		// 存放雷区的起始地址
    		DWORD dwBoomAddr = 0x01005340;
    
    		// 雷区的最大值(包含边界)
    		DWORD dwSize = 832;
    		PBYTE pByte = NULL;
    		pByte = (PBYTE)malloc(dwSize);
    
    		// 读取整个雷区的数据
    		ReadProcessMemory(hProcess, (LPVOID)dwBoomAddr, pByte, dwSize, 0);
    		int i = 0;
    		int j = 0;
    		int n = dwSize;
    
    		// 读取雷区的长和宽
    		DWORD dwInfo = 0x01005330;
    		DWORD dwHeight = 0, dwWidth = 0;
    		ReadProcessMemory(hProcess, (LPVOID)(dwInfo + 4), &dwWidth, sizeof(DWORD), 0);    //宽度
    		ReadProcessMemory(hProcess, (LPVOID)(dwInfo + 8), &dwHeight, sizeof(DWORD), 0);   //高度
    
    		int h = dwHeight;
    		int count = 0;
    
    		// 雷区转换,去掉雷区多余的数据
    		PBYTE pTmpByte = NULL;
    		pTmpByte = (PBYTE)malloc(dwHeight * dwWidth);
    		while (i < dwSize) {
    			//边界判断
    			if (pByte[i] == 0x10 && pByte[i + 1] == 0x10) {
    				i = i + dwWidth + 2;
    				continue;
    			}
    			else if (pByte[i] == 0x10) {
    				for (j = 1; j <= dwWidth; j++) {
    					pTmpByte[count] = pByte[i + j];
    					count++;
    				}
    				i = i + dwWidth + 2;
    				continue;
    				h--;
    				if (h == 0) break;
    			}
    			i++;
    		}
    
    		// 获取雷区方块的坐标,然后模拟鼠标进行点击
    		int x1 = 0, y1 = 0;
    		int x = 0, y = 0;
    		for (i = 0; i < dwHeight * dwWidth; i++) {
    			if (pTmpByte[i] != 0x8F) { //雷
    				x1 = i % dwWidth;
    				y1 = i / dwWidth;
    				x = x1 * 16 + 16;
    				y = y1 * 16 + 61;
    				SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(x, y));   //鼠标按下
    				SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(x, y));     //鼠标抬起
    			}
    		}
    
    		free(pByte);
    		CloseHandle(hProcess);
    	}
    	else {
    		printf("Get hWnd failed.");
    	}
    	return 0;
    }
    

    运行结果如下图所示,一秒实现扫雷。

    在这里插入图片描述



    四.总结

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

    • 一.什么是逆向分析
      1.逆向工程
      2.逆向分析的典型应用
    • 二.扫雷游戏逆向分析
      1.游戏介绍
      2.OllyDbg动态分析
    • 三.扫雷游戏检测工具
      1.Cheat Engine确定起始位置
      2.Cheat Engine确定边界
      3.C++编写鼠标坐标获取案例
      4.C++编写自动扫雷程序

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

    在这里插入图片描述

    《珈国情》
    明月千里两相思,
    清风缕缕寄离愁。
    燕归珞珈花已谢,
    情满景逸映深秋。

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

    (By:娜璋AI之家 2020-12-10 星期四 晚上10点写于武汉)



    参考文献:
    真心推荐大家好好看看这些视频和文章,感恩这些大佬!

    展开全文
  • 第一篇文章先带领大家学习什么是逆向分析,然后详细讲解逆向分析的典型应用,接着通过OllyDbg工具逆向分析经典的游戏扫雷,再通过Cheat Engine工具复制内存地址获取,实现一个自动扫雷程序。基础性文章,西电UI您...

    从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


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


    一.什么是逆向分析

    1.逆向工程

    科锐钱老师真的是大佬,拥有十余年的逆向工作经验,专注于先进技术的算法还原及逆向实训。作者从中学习到很多知识。本次课程分享的是逆向分析技术的引导,课程目标是带领大家了解下逆向分析是干什么的,在安全领域中是什么地位,并且穿插各种实战示例,尽量提高大家的兴趣。逆向分析是安全的基础行业,喜欢的人觉得很好玩,不喜欢的人觉得很苦逼。

    在讲逆向分析前,大家思考下:你有没有把别人的产品或Demo还原出源代码来过呢?而且就是作者的源代码,包括里面的BUG。

    • 反汇编:一次编译技术,阅读汇编代码反推出对应的高级代码,比如VC、GCC、Delphi等。
    • 反编译:通常在C#、Java、.NET框架等,因为它可以直接把元数据还原成高级代码,反编译其实更难,但是对使用的人更简单,比如Android的APK反编译成JAVA源代码。

    下面开始吧!第一个大家需要知道的是“什么是逆向工程?”


    什么是逆向工程?
    简单而言,一切从产品中提取原理及设计信息并应用于再造及改进的行为,都是逆向工程。在信息安全中,更多的是调查取证、恶意软件分析等,不管你用什么工具或手段,能达到其目的就算逆向分析。下图是《变形金刚》里面对它的描述,2007年的时候国内对信息安全重视程度也不高,对逆向分析也没有什么概念,真正重视是从老大提出“没有网络安全就没有国家安全”之后。而那时候的国外电影就已经用到了“reverse engineered”,说明国外导员对这个技术及应用场景都是了解的。

    在这里插入图片描述

    逆向工程最早是在二Z时的船舶工业,分析船的弱点,通过外形反推内部结构,其中粉红色是Amuno、黄色是引擎室、蓝色是龙骨、绿色是推进器等等。只有知道怎么造一个船后,才能进行逆向分析。

    在这里插入图片描述

    当然还有模具逆向、材料逆向、软件逆向,在我们的软件行业,就称为软件逆向。同样,在网络攻防中,你不可能先给出源码再进行攻击,通常在安全对抗中第一步要做的就是逆向分析,不管你用什么方式进行逆向分析,你都需要搞清楚:

    • 它是什么:样本是什么,良性的还是恶意的
    • 它干了什么:样本做了哪些事情
    • 我们怎么办:知道做了什么才能进行反制,如删除注册表启动项、清理感染的勒索病毒等

    在这里插入图片描述



    2.逆向分析的典型应用

    软件逆向有很多实现办法达到我们的目标,典型的应用包括软件工程、网络安全、司法取证、商业保护等。

    在这里插入图片描述


    逆向应用——病毒分析
    对于逆向分析,最大的行当就是病毒分析。对于一个安全企业来说,比如360,它的病毒分析团队属于它的主业,包括360、金山毒霸、腾讯医生等,它们主要业务就是根据一些恶意样本的行为,给出解决方案(专业查杀、完善引擎、应急响应),比如WannaCry爆发时,立刻分析其原因和传播漏洞,分析其影响程度及给出解决方案。所以,研究逆向病毒的人很多,当然坏的行当做游戏WG也很多,它们的对抗也是没有源码的,游戏安全人员会分析WG样本进行完善及修补。

    2000年早期制作病毒的人都比较单纯,写病毒是为了技术炫耀或开玩笑,典型的比如乒乓球病毒,每个周末都爆发,开启计算机后就有个乒乓球在电脑上弹,导致电脑不能用,而周一到周五恢复正常(可能是讨厌加班),此时的病毒没有获取用户隐私、删除数据等行为。

    在这里插入图片描述


    逆向利用——游戏保护
    从2005年开始,随着网游普及和网络虚拟财产(游戏装备)出现,大家也没有安全意识,出现了很多恶意程序和病毒,比如熊猫烧香,它是由李俊制作并肆虐网络的一款电脑病毒,是一款拥有自动传播、自动感染硬盘能力和强大的破坏能力的病毒,它不但能感染系统中exe、com、pif、src、html、asp等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为gho的系统备份文件。

    同时,游戏WG也开始增多,并形成了包括私服、生产、PJ、DH等功能的生产线,通过分析游戏的关键数据结构,找到关键数据并对数据做修改以达到提升的效果。比如吃鸡游戏,如果你通过逆向分析找到每个玩家的坐标位置了,你是不是可以写一个透视G,前提是你知道其数据以什么形式存放在哪里,这就属于PJ挂。你甚至还可以修改攻击力、防御值,游戏的碰撞检测(两者间距离小于某个值)也可以取消实现飞天、穿墙等。

    在这里插入图片描述

    当然,我们的信息安全是正能量的,逆向分析主要是剖析病毒,包括:

    • 逆向病毒,获取病毒传播方法,可以遏制病毒传播
    • 逆向病毒,获取病毒隐藏手段,可以根除病毒
    • 逆向分析病毒,获取功能目的,可以溯源定位攻击者

    逆向应用——漏洞挖掘
    逆向应用还包括漏洞挖掘和漏洞利用,其中黑客挖掘漏洞的常用方法为:

    • 通过分析开源软件的源代码,获取漏洞
    • 通过分析产品本身获取漏洞
    • 通过分析可以利用漏洞的软件样本
    • 通过比较软件前后补丁的差异

    大家是否有研究过shellcode、缓冲区溢出?漏洞利用溢出缓冲区,首先要把关键内存、关键代码定位出来,这就属于逆向分析。在漏洞利用过程中,只有你越熟悉周围环境则可利用的漏洞就越多,比如逆向服务端,调用shell创建新用户功能,这个时候是没有源代码的,所以需要利用漏洞分析。

    逆向分析是信息安全行业的基础技术、必须技术和重要技术,只有你功力越深厚,则做的事情就越多。

    在这里插入图片描述


    漏洞利用——比较补丁
    下图展示了比较补丁前后差异的工具。比如官方软件在网上有安全更新,关注安全行情和漏洞公告的行当或企业会对比官方的补丁,在拿到官方升级后的软件,他们会对两个流程做比较,其中左边流程多了一个节点,说明升级就是这个位置,再详细分析为什么多了这个个检测。注意,官方公告通常会非常简略(补丁号、造成后果、影响范围),比如某个MP3播放器在播放某个冷门格式的音频文件时,会触发一个远程溢出问题,接下来我们就需要去做逆向分析,下载升级前和升级后的版本做流程对比。

    在这里插入图片描述


    逆向应用——电子取证
    通过样本追踪地理位置的实例,后续会给出一个实战案例。

    在这里插入图片描述


    漏洞利用——无文档学习
    表示没有源码的情况下获取程序信息,称为竞品分析。假设某个公司对同行的产品很感兴趣,想知道为什么它们的算法比我们的好,然后需要去分析和算法还原,这也是逆向分析的主要应用。最好的竞品分析,是能够将算法完美还原,两个代码再次编译后,除了地址不一样其他都一样(IDA查看)。注意,看懂代码完善程序并换另一种程序语言复现,算学习;而如果直接COPY别人的二进制或二进制序列,这算抄袭。

    在这里插入图片描述



    二.扫雷游戏逆向分析

    1.游戏介绍

    下面通过扫雷游戏进行逆向分析讲解。

    在这里插入图片描述

    此时我们打开一个工具,360会提示危险操作,点击“允许本次操作”即可。

    在这里插入图片描述

    此时就能够判断某个点是不是雷,从而方便我们点击完成扫雷游戏,O(∩_∩)O

    在这里插入图片描述

    接着进行逆向分析。扫雷中肯定有雷区的定义,作为程序员,你会怎么定义有雷或没有雷,或者插个旗子的状态呢?我们会使用一个二维数组来存储。那么,什么时候肯定会访问这个二维数组呢?在绘制整个游戏区、点击方格的时候都会访问。

    在绘制游戏区时,Windows编程有个关键函数,叫做——BeginPaint。BeginPaint函数为指定窗口进行绘图工作的准备,并用将和绘图有关的信息填充到一个PAINTSTRUCT结构中,所以它将是个突破口。



    2.OllyDbg动态分析

    接着我们使用Ollydbg打开,在逆向分析中,动态分析(OD)和静态分析(IDA)非常多,动静结合也是常用的分析手段。

    推荐作者上一个系列的两篇入门文章:

    • 静态分析:程序并未运行,通过分析文件的结构(格式)获取其内部原理。
    • 动态分析:在程序的运行过程中,分析其内部原理。
    • 灰盒分析:既不静态也不调试,通过一堆监控软件(注册表监控、文件监控、进程监控、敏感API监控)在虚拟机中跑程序,再分析恶意软件的大体行为,并形成病毒分析报告。

    至于哪种方法更好?我们需要具体问题具体分析,如果是分析扫雷游戏,因为没有危害可以动态调试分析,但如果是WannaCry蠕虫,你就不能在真机上动态分析。同时,很多安全公司为了及时响应各种安全事件,会把样本自动上传到服务器中,它们每天会收到成千上万的恶意样本,但可能存在某些未知样本只上传部分的原因,比如某个未知样本是个动态链接库,此时没有运行条件,只能进行静态分析或者模拟接口分析。

    在这里插入图片描述

    软件静态分析包括分析文件格式、分析网络协议、分析软件日志、修改存档文件等,下图展示了通过修改文件游戏作弊的示例。

    在这里插入图片描述

    软件动态调试可以用于HH翻译,比如《仙剑奇侠传》。

    在这里插入图片描述


    OllyDbg是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,是当今最为流行的调试解密工具之一。它还支持插件扩展功能,是目前最强大的调试工具之一。OllyDbg打开如下图所示,包括反汇编窗口、寄存器窗口、信息窗口、数据窗口、堆栈窗口。

    • 反汇编窗口:显示被调试程序的反汇编代码,包括地址、HEX数据、反汇编、注释
    • 寄存器窗口:显示当前所选线程的CPU寄存器内容,点击标签可切换显示寄存器的方式
    • 信息窗口:显示反汇编窗口中选中的第一个命令的参数及跳转目标地址、字符等
    • 数据窗口:显示内存或文件的内容,右键菜单可切换显示方式
    • 堆栈窗口:显示当前线程的堆栈

    下图是打开EXE后显示的界面。

    OD常用的快捷键调试方式包括:

    F2
    设置断点,如下图所示的红色位置,程序运行到此处会暂停,再按一次F2键会删除断点。

    F9
    按下这个键运行程序,如果没有设置相应的点,被调试的程序直接开始运行。

    F8
    单步步过,每按一次这个按键,将执行反汇编窗口中的一条指令,遇到CALL等子程序不进入其代码。

    F7
    单步步入,功能通单步步过(F8)类似,区别是遇到CALL等子程序时会进入其中,进入后首先停留在子程序的第一条指令上。如下图进入CALL子程序。

    F4
    运行到选定位置,即运行到光标所在位置处暂停。

    CTRL+F9
    执行到返回,按下此键会执行到一个返回指令时暂停,常用于从系统领空返回到我们调试的程序领空。

    ALT+F9
    执行到用户代码,从系统领空快速返回我们调试的程序领空。


    接着正式分析扫雷程序。

    第一步:启动OllyDbg软件,选择菜单“文件”,打开winmine.exe文件。
    这里我们猜测游戏中存在一个二维数组,当我们显示界面时会访问这个二维数组,并且调用BeginPaint函数来显示界面。所以接下来需要找到调用BeginPain的位置。

    在这里插入图片描述


    第二步:在反汇编窗口右键鼠标,选择“查找”->“当前模块中的名称”。

    在这里插入图片描述

    当我们在键盘上输入“BEGINPAINT”时,能够迅速找到对应的函数。

    在这里插入图片描述


    第三步:点击右键选择“在每个参考上设置断点”。

    在这里插入图片描述

    接着点击下图所示的“B”进行断点设置界面。
    在这里插入图片描述

    双击该断点会进入到反汇编窗口BeginPaint对应位置。

    在这里插入图片描述


    第四步:按下“F9”运行程序,可以看到在BeginPaint和EndPaint之前有一个CALL函数。

    在这里插入图片描述

    选中该行右键“跟随”之后,去到0x01002AC3位置,发现又存在很多个CALL函数。

    在这里插入图片描述

    一种方法是一个一个函数分析,这里使用另一种方法。当我们在使用扫雷时,发现它的界面并没有闪烁,所以怀疑使用了 双缓存技术,这是我们的突破口。双缓存是在缓存中一次性绘制,再把绘制的结果返回在界面上。比如,你要在屏幕上绘制一个圆、正方形、直线,需要调用GDI的显示函数,操作显卡画一个圆,再画一个正方形和直线,它需要访问硬件三次;此时依赖硬件的访问速度,而且如果绘制错误擦除再绘制,需要反复的访问硬件,为了减少硬件操作,我们在内存中把需要绘制的图像准备好,然后一切妥当之后提交给硬件显示。

    PS:当然,为什么是双缓存技术呢?目前的我也无法理解。只有当我们做了大量的逆向分析后,才会养成一定的经验来帮助我们判断。任何行业和技术都是这样的,包括作者自己,目前也是一步一个脚印的去学习,去总结,去进步。期待与您前行,加油~


    第五步:继续在反汇编窗口右键鼠标,选择“查找”->“当前模块中的名称”,找到双缓存技术的核心函数BitBlt。
    BitBlt是将内存中的数据提交到显示器上,该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。

    在这里插入图片描述

    点击右键选择“在每个参考上设置断点”,如下图所示,此时绘制了两个断点。

    在这里插入图片描述


    第六步:运行程序去到第二个断点BitBlt位置。

    在这里插入图片描述

    注意,此时显示了两层循环,刚好符合我们二维数组的遍历,按F8单步步过可以动态调试观察其效果。

    在这里插入图片描述


    第七步:在0x01002700位置按下F2取消断点,并在该函数的起始位置0x010026A7设置断点,接下来需要详细分析这个双缓存函数绘制过程。

    在这里插入图片描述

    代码中,ESI首先通过XOR进行清零,然后再加1;接着ESI会调用CMP进行比较,说明ESI是循环变量。接下来“MOV AL, BYTE PTR [EBX+ESI]”表示将EBX和ESI相加赋值给AL,然后AL判断一个值再做其他的,这有点像访问数据,后面的显示特性随着AL做改动,即AL影响后面显示的内容。

    MOV指令是数据传送指令,也是最基本的编程指令,用于将一个数据从源地址传送到目标地址(寄存器间的数据传送本质上也是一样的)。

    在这里插入图片描述


    第八步:下面看看寄存器,其中EBX是基址寄存器,ESI是它的偏移量,猜测这个EBX基址寄存器和关键数据有关。

    在这里插入图片描述

    选择EBX基址寄存器,然后选择“数据窗口中跟随”,显示如下图所示的数据。

    在这里插入图片描述

    数据窗口显示如下,我们发现“0F”出现较多,猜测多的这个可能是空的,少的那个是雷“8F”。

    在这里插入图片描述


    第九步:数据区详细分析。
    我们选择0x010026A7位置,然后按下F2取消断点,然后继续运行程序,此时弹出扫雷主界面。游戏中通常会存在边界(围墙),这里“10”应该是边界位置,而0x01005361则为起始位置。

    在这里插入图片描述

    如果第一个不是雷、第二个不是雷、第三个不是雷,第四个才是雷,我们“0F”是空格,“8F”是雷的猜测则正确。

    在这里插入图片描述

    我们取消0x01002700位置的断点,然后运行程序弹出扫雷界面,根据下面的二维矩阵进行扫雷。

    在这里插入图片描述

    如下图所示,前面3个果然时空格,而第四个则时雷。“8A”是雷,“0F”是空格实锤,而且点过的地方会变成数字,比如“40”、“41”、“42”等。

    在这里插入图片描述


    第十步:写个程序进行扫雷数据区详细分析。
    我们重新运行程序,选择“查找”->“当前模块中的名称”,找到双缓存技术的核心函数BitBlt,然后重新找一下,找到代码位置。如下图所示,EBX就是雷区的起始位置,我们要想办法把它读取出来,再往前“MOV EBX, 01005360”代码看到了EBX的赋值定义。

    在这里插入图片描述

    接着我们输入F7单步调试,执行完0x010026C4赋值语句后,我们在数据窗口中跟随EBX寄存器,显示如下图所示。前面8个均为“0F”表示空格,第9个为雷,再验证一次“01005360位置”,就开始准备写程序了。

    在这里插入图片描述

    验证成功,开始写程序吧!

    在这里插入图片描述


    第十一步:扫雷辅助程序。
    我们编写了这样一个程序,当它开启后,我们鼠标移动到方格,如果是雷它的标题会变成“扫雪(xue)”,然后我们不点击它就可以了。哈哈~

    在这里插入图片描述

    正常是“扫雷”。

    在这里插入图片描述

    雷区显示为“扫雪”。当然你也可以写得更隐蔽些,比如和苹果电话手表建立连接,如果是“雷”让手表震动一下,否则正常。

    在这里插入图片描述


    注意,基本原理知道后,就需要开发解决问题了。对于安全行业来说,不管是做病毒还是研究漏洞利用或游戏防护的,逆向分析都是基础,开发解决问题才是关键。比如,某个病毒样本的行为已经分析清楚了,这个病毒在哪里创建系统文件、修改哪个系统文件、注入到哪个进程、动了哪个注册表等等,逆向分析第一步完成,但更重要的是怎么解决问题,创建注册表就需要删除注册表,修改系统文件就要还原文件。

    我们在网上搜索某些病毒资料时,有些逆向工程师会给出手工修复方案,比如关闭哪个服务、删除哪个隐藏文件、手工清除注册表哪一项等。但是对于安全公司来说,比如360公司,你安全扫描完成之后,不可能弹框提示用户手工修复,而是需要提供自动化方案一键修复,最终结果是需要修改杀毒软件的引擎代码,或者提供专杀工具给用户,这个时候工具需要自动化完成相关操作。

    很多新手会看不起开发,觉得搞逆向、搞网安的是王道,不用学开发,这是不对的。 针对上面的实战,我们就发现逆向是站在开发基础上,反向推导作者是怎么做的,比如扫雷需要思考作者会用什么方式表示雷区,然后怎么用UI体现出来以及调用什么函数实现。所以,逆向分析之前都要教开发类的课程,《数据结构》《操作系统》《计算机组成原理》《编译原理》等课程掌握越深入越好。



    三.扫雷游戏检测工具

    通过第二部分,我们知道以下信息:

    • 扫雷的首地址为0x01005360
    • 显示“0F”表示空格,显示“8F”表示雷
    • 雷区的边界为0x10

    原理是找到雷在内存中的值,只要不是雷值我们把它点击开来。接下来作者再补充一个逆向辅助工具,通过CheatEngine实现雷区检测。

    Cheat Engine又称CE修改器,是一款内存修改编辑工具。你可以通过Cheat Engine软件来修改游戏中的内存数据、人物属性、金币数值等等,功能强大且操作简单,可以为你带来良好的更好的体验游戏。


    1.Cheat Engine确定起始位置

    第一步,打开Cheat Engine软件,点击“选择打开一个程序”按钮,如下图所示。

    在这里插入图片描述

    打开扫雷软件设置为初级。

    在这里插入图片描述


    第二步,选择扫描类型为“未知的初始数值”,选择“数值类型”为字节,然后点击“首次扫描”。

    在这里插入图片描述

    此时显示7,290,880个数据,如下图所示:

    在这里插入图片描述


    第三步,接着我们点击扫雷,然后在“扫描类型”中选择“变动的数值”,点击“再次扫描”,此时返回结果183,169个。最终通过反复的筛选找到首地址。

    在这里插入图片描述

    继续点击扫描,如下图所示。

    在这里插入图片描述


    第四步,如果出现地雷则选择“未变动的数值”,点击“再次扫描”,接着继续新一轮的扫雷游戏。

    在这里插入图片描述

    在这里插入图片描述

    始终以第一个方格的状态为目标进行重复的操作。

    • 开始扫描:设置“未知的初始数值”
    • 扫描第一个格子:设置“变动的值”
    • 继续扫描,结果是雷:设置“未变动的值”
    • 继续扫描,结果非雷:设置“未变动的值”
    • 重新开始:设置“变动的值”
    • 重新开始如果第一个格子和上一次一样,则设置“未变动的值”,否则“变动的值”

    下图展示了最后5个结果,接着继续反复筛选。

    在这里插入图片描述

    最终获取如下图所示的结果,其初始地址为——0x01005361,和前面OD软件分析的一样。

    在这里插入图片描述


    第五步,双击该行移动至底部,然后右键选择“浏览相关内存区域”选项。

    在这里插入图片描述

    显示内容如下图所示,它同样和我们前面OD分析的内容一致。其中“8F”表示雷,“40”表示空格,“41”到“49”表示数字,“10”表示边界,同时“0F”表示隔一行。

    在这里插入图片描述

    如下图所示,成功完成了扫雷游戏,O(∩_∩)O

    在这里插入图片描述

    在这里插入图片描述


    2.Cheat Engine确定边界

    第一步,我们查看扫雷初级的高度是“9”,然后重新打开建立“新的扫描”。

    在这里插入图片描述

    输入数字“9”再点击“首次扫描”,返回7174个结果。

    在这里插入图片描述


    第二步,选择中级难度,对应的高度是“16”,然后重新打开建立“再次扫描”,仅剩4个结果。

    在这里插入图片描述

    在这里插入图片描述


    第三步,选择高级难度,设置高度最高即“24”,然后重新打开建立“再次扫描”

    在这里插入图片描述

    最终剩2个结果,高度可能是:

    • 0x01005338
    • 0x010056A8

    在这里插入图片描述


    第四步,使用同样的方法找到宽度。
    宽度返回两个结果:

    • 0x01005334
    • 0x010056AC

    在这里插入图片描述



    3.C++编写鼠标坐标获取案例

    接下来我们开始编写代码,首先给大家看看鼠标坐标获取的一段代码,我们鼠标通常是(x, y)的形式。

    第一步,创建空项目,名称为“MouseMsg”。

    在这里插入图片描述


    第二步,为该工程添加一个“main.cpp”文件,并且添加启动项。

    在这里插入图片描述

    在这里插入图片描述


    第三步,配置graphics.h文件。
    graphics.h是一个针对Windows的C语言图形库,分为像素函数、直线和线型函数、多边形函数、填充函数等。在学习C++游戏编程时,通常会发现VS中没有”graphics.h”头文件,因此需要配置。

    (1) 先从作者github中下载好所需要的文件,如下所示:

    在这里插入图片描述

    下载完后打开下载好的 Inlcude 文件夹,里面有两个头文件:

    在这里插入图片描述

    (2) 将里面的两个文件进行复制,然后粘贴到VS安装目录的include文件夹中。

    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include

    在这里插入图片描述

    (3) 打开下载好的文件夹中的 lib2015子文件夹,将里面的东西全部选中复制,粘贴到VS2015安装目录的 lib 文件夹中。

    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\lib\x86
    • C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\lib\x64

    在这里插入图片描述
    在这里插入图片描述

    (4) 接下来就可以在VS中添加“graphics.h”头文件了,里面有很丰富的绘图函数可供我们使用。

    #include <graphics.h>              // 引用图形库头文件
    #include <conio.h>
    
    int main()
    {
    	initgraph(640, 480);            // 创建绘图窗口,大小为 640x480 像素
    	setlinecolor(RGB(255, 0, 0));   // 设置当前线条颜色
    	setfillcolor(RGB(0, 255, 0));   // 设置当前填充颜色
    	fillcircle(200, 200, 100);      // 画圆,圆心(200, 200),半径 100
    	_getch();                       // 按任意键继续
    	closegraph();                   // 关闭图形环境
    }
    

    在这里插入图片描述


    第四步,编写鼠标事件代码。

    #include <graphics.h>              // 引用图形库头文件
    #include <stdio.h>
    
    int main()
    {	
    	//定义鼠标
    	MOUSEMSG m;
    	//初始化窗口 500宽度 500高度
    	initgraph(500, 500);
    
    	while (1) {
    		//获取鼠标消息
    		m = GetMouseMsg();
    		char buff[256];
    
    		//鼠标左键按下
    		if (m.uMsg == WM_LBUTTONDOWN) {
    			//清空数组
    			memset(buff, 0, 256);
    			sprintf_s(buff, "X坐标:%d, Y坐标:%d", m.x, m.y);
    			MessageBox(NULL, buff, "坐标", MB_OK);
    		}
    	}
    	return 0;
    }
    

    运行前需要设置编码方式为“使用多直接字符集”,否则会报错。

    在这里插入图片描述

    运行结果如下图所示,可以看到鼠标点击会显示对应的坐标位置。

    在这里插入图片描述

    其中GetMouseMsg函数表示获取鼠标消息,通过Spy++可以看到很多Windows系统自带的鼠标操作、键盘操作、消息操作等,同时能获取鼠标是左键或右键按下以及对应坐标。

    在这里插入图片描述



    4.C++编写自动扫雷程序

    接下来是通过C++实现一键扫雷功能,主要是模拟鼠标在雷区的点击操作,并且按下所有非雷区域从而实现一键扫雷。利用的是Windows应用程序的消息机制,通过SendMessage函数向指定窗口发送消息,也就是在获取到扫雷的窗口句柄后,利用这个函数向该窗口发送鼠标按键消息,从而实现模拟鼠标的操作。

    该部分参考ioio_jy老师的文章:逆向工程第007篇:扫雷辅助的研究——0秒实现一键自动扫雷

    第一步,创建一个应用程序名叫“SaoleiHelp”,并添加主函数。

    在这里插入图片描述


    第二步,分析扫雷的区域及坐标定义。
    坐标是基于客户区的左上角,但是这个客户区是怎么定义的呢?
    如下图所示,究竟A点是客户区的左上角,还是说B点才是呢?如果A点为坐标原点,那么第一块雷区的坐标就应为(AC,CE),如果B点为坐标原点,那么第一块雷区的坐标就应为(BD,DE)。经过实际测试,MSDN中所谓的客户区,其实是以B点作为起点的位置,即原点坐标(0,0),而雷区中心即E点的坐标为(16,61),每个雷区小方块的大小为16×16,于是可以知道,这里需要循环计算出雷区每一个小方块的坐标,这个坐标与保存有雷区的二维数组下标紧密相关。

    在这里插入图片描述

    假设这个二维数组是mine[y1][x1],其中y1表示的是雷区有多少行,x1表示雷区的列数,那么每个雷区方块的坐标为:

    x = x1 * 16 + 16;
    y = y1 * 16 + 61;
    

    在获得了坐标以后,就可以通过如下语句来模拟鼠标的点击操作了:

    SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(x, y));
    SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(x, y));
    

    第三步,分析扫雷游戏的雷区长宽数据。
    结合之前宽度、高度的分析,发现高度位置为0x01005338,宽度位置为0x01005334。我们进一步推断,从0x01005330开始,这里的一行绿色数据包含有0x0A、0x09以及0x09这三个数值,很明显这三个数据正是当前雷区的地雷数量以及宽、高等信息

    • 雷数:0x01005330
    • 宽度:0x01005334
    • 高度:0x01005338

    在这里插入图片描述

    同时,我们上面的逆向分析已经知道雷区分布的信息。

    • “8F”表示地雷
    • “8E”表示旗子
    • “40”表示空格
    • “41”到“49”表示数字
    • “10”表示边界
    • “0F”表示隔一行

    还有一个重要信息是雷区的分布起始地址,即:

    • 0x01005361

    但如果计算含有边界的情况,雷区的分布情况则为:

    • 起始地址:0x01005340
    • 结束地址:0x0100567F

    在这里插入图片描述


    完整代码如下:

    #include <stdio.h>
    #include <windows.h>
    #include <graphics.h>
    
    int main() {
    	DWORD Pid = 0;
    	HANDLE hProcess = 0;
    
    	DWORD result1, result2;
    
    	// 获取扫雷游戏对应的窗口句柄
    	HWND hWnd = FindWindow(NULL, L"扫雷");
    	if (hWnd != 0) {
    		// 获取扫雷进程ID
    		GetWindowThreadProcessId(hWnd, &Pid);
    		// 打开扫雷游戏获取其句柄
    		hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
    		if (hProcess == 0) {
    			printf("Open winmine process failed.");
    			return 0;
    		}
    
    		// 存放雷区的起始地址
    		DWORD dwBoomAddr = 0x01005340;
    
    		// 雷区的最大值(包含边界)
    		DWORD dwSize = 832;
    		PBYTE pByte = NULL;
    		pByte = (PBYTE)malloc(dwSize);
    
    		// 读取整个雷区的数据
    		ReadProcessMemory(hProcess, (LPVOID)dwBoomAddr, pByte, dwSize, 0);
    		int i = 0;
    		int j = 0;
    		int n = dwSize;
    
    		// 读取雷区的长和宽
    		DWORD dwInfo = 0x01005330;
    		DWORD dwHeight = 0, dwWidth = 0;
    		ReadProcessMemory(hProcess, (LPVOID)(dwInfo + 4), &dwWidth, sizeof(DWORD), 0);    //宽度
    		ReadProcessMemory(hProcess, (LPVOID)(dwInfo + 8), &dwHeight, sizeof(DWORD), 0);   //高度
    
    		int h = dwHeight;
    		int count = 0;
    
    		// 雷区转换,去掉雷区多余的数据
    		PBYTE pTmpByte = NULL;
    		pTmpByte = (PBYTE)malloc(dwHeight * dwWidth);
    		while (i < dwSize) {
    			//边界判断
    			if (pByte[i] == 0x10 && pByte[i + 1] == 0x10) {
    				i = i + dwWidth + 2;
    				continue;
    			}
    			else if (pByte[i] == 0x10) {
    				for (j = 1; j <= dwWidth; j++) {
    					pTmpByte[count] = pByte[i + j];
    					count++;
    				}
    				i = i + dwWidth + 2;
    				continue;
    				h--;
    				if (h == 0) break;
    			}
    			i++;
    		}
    
    		// 获取雷区方块的坐标,然后模拟鼠标进行点击
    		int x1 = 0, y1 = 0;
    		int x = 0, y = 0;
    		for (i = 0; i < dwHeight * dwWidth; i++) {
    			if (pTmpByte[i] != 0x8F) { //雷
    				x1 = i % dwWidth;
    				y1 = i / dwWidth;
    				x = x1 * 16 + 16;
    				y = y1 * 16 + 61;
    				SendMessage(hWnd, WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(x, y));   //鼠标按下
    				SendMessage(hWnd, WM_LBUTTONUP, MK_LBUTTON, MAKELONG(x, y));     //鼠标抬起
    			}
    		}
    
    		free(pByte);
    		CloseHandle(hProcess);
    	}
    	else {
    		printf("Get hWnd failed.");
    	}
    	return 0;
    }
    

    运行结果如下图所示,一秒实现扫雷。

    在这里插入图片描述



    四.总结

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

    • 一.什么是逆向分析
      1.逆向工程
      2.逆向分析的典型应用
    • 二.扫雷游戏逆向分析
      1.游戏介绍
      2.OllyDbg动态分析
    • 三.扫雷游戏检测工具
      1.Cheat Engine确定起始位置
      2.Cheat Engine确定边界
      3.C++编写鼠标坐标获取案例
      4.C++编写自动扫雷程序

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

    在这里插入图片描述

    《珈国情》
    明月千里两相思,
    清风缕缕寄离愁。
    燕归珞珈花已谢,
    情满景逸映深秋。
    最感恩的永远是家人的支持,知道为啥而来,知道要做啥,知道努力才能回去。夜已深,虽然笨,但还得奋斗。

    (By:Eastmount 2020-07-26 星期一 晚上9点写于武汉 http://blog.csdn.net/eastmount/ )



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

    参考文献:
    真心推荐大家好好看看这些视频和文章,感恩这些大佬!
    [1] 科锐逆向的钱林松老师受华中科技大学邀请- “逆向分析计算引导”
    [2] c++学习笔记——VS2015中添加graphics.h头文件 - 行歌er
    [3] 逆向工程第007篇:扫雷辅助的研究——0秒实现一键自动扫雷
    [4] https://www.bilibili.com/video/BV18W411U7NH
    [5] [网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
    [6] [网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向

    展开全文
  • 这篇文章将继续普及逆向分析知识,告诉大家如何学好逆向分析,并结合作者经验给出逆向分析的路线推荐,最后给出吕布传游戏逆向案例。话不多说,让我们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩...

    从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


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

    前文回顾:
    [安全攻防进阶篇] 一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向



    一.如何学好软件逆向技能

    1.软件逆向前沿

    怎么学好软件逆向技能呢?
    钱老师说“软件逆向属于搬砖活”。哈哈!的确,任何技术、任何学科方向,都是在你刚开始参与实际工作时,会觉得很好玩,当你做多了之后,就会觉得它是搬砖活。你刚开始接触它,会觉得是技巧,如果你每天都靠这个吃饭,就不再是技巧了。

    在逆向分析中,很多人都会去网上学习脱壳之类的教程,会教你在哪个地方下断点,按几下F7、F8、F9后,就到了指定位置然后右键脱壳,这一系列操作是大师多年的经验积累。你可能学会了这个最简答的方案,却不理解具体的原理。第一个提出方案的人他需要走过这个壳各种各样的坑,才会形成这个所谓的技巧,它就是为了节约时间和人力成本,无数次重复工作且不影响质量的解决方案。

    这种最优解决方案提供给新人看的时候,他会觉得充满了技巧性或不理解,但大家在学习逆向分析的时候,还是少琢磨技巧,干就对了。市面上会有各种各样的工具,比如脱壳,你需要先去学会写壳,写好壳,才会觉得壳有多么的脆弱,我的程序里到处都有BUG,如果别人触发了程序的某个点,我的壳可能就会被摧毁。同时,还有人会研究反调试,甚至汇编出反调试技巧十几则,你为什么发现不了呢?为什么不能自己总结一个呢?只要你自己写一个调试器,就会出现很多方案。当你写完一个调试器之后,你会发现调试器也很脆弱,一不小心某个样本就会把你的调试器给弄奔溃,那么一旦你找到样本规律,对于你的调试器而言就是一种反调试。所以,如果你只是学习网上别人的脱壳、反调试技巧,这是没用的,你需要去深入实践和理解,然后总结属于自己的技巧。

    在这里插入图片描述

    对于对抗行业而言,它是没有一点侥幸而言,你能把对手按在地上摩擦,你就算赢了。同样,很多时候我们只看到安全分析人员光鲜的一面,只看到最后几秒钟那个补丁、攻击的厉害,却不知道分析人员已经被这个壳、调试折磨得不行,反复躺坑最终才能解决。所以,对抗考验的是人的任性和基本功。

    • 任性:信念支撑
    • 基本功:写代码、读代码

    基本功很重要,网上现在三天学会脱壳、两天学会反调试之类的教程很多,我们需要却是基本功。比如,我们在扫雷逆向分析时,关于OllyDbg的教程也非常多,它们详细讲解每个功能干什么,这些功能其实都可以简略学习,我们需要做的是把下图所示的反汇编窗口的代码搞明白就OK了。 这些自动化工具可能不是很熟悉,只是工作效率慢点;但换个角度,如果OD工具中的每个功能及快捷键你都会用,但是反汇编窗口的代码看不懂,那你不就废了吗?所以,大家的注意力应该放到反汇编窗口。

    在这里插入图片描述

    同样,对于IDA静态分析也是一个道理,它也有很多的功能,但我们的重点其实还是代码窗口。因为搞安全的人会遇到很多资料,归纳学习总结是必备的技能(通过训练是可以培养出来的),它能帮助你快速的找到重点。所以,技巧不是决定性因素,逆向分析人员真正拼的是基本功。

    在这里插入图片描述

    那么,如何学好编程语言或逆向分析呢?
    不要这样学习:

    • 只看书,不上机
    • 只运行,不调试
    • 只做课后练习,不做工程项目

    应该这样学习:

    • 多敲代码,重要实战
    • 程序不是写出来的,是调出来的
    • 根据自己的兴趣或者市场的需要多做一些有一定规模的项目

    逆向分析底层推荐的三门课程:

    • 数据结构
    • 操作系统
    • 编译原理:逆向的理论知识课程,想要逆向反汇编,还原成高级代码,就需要对编译器有一定了解,否则只能去看别人公布的技巧。

    比如《操作系统》课程,你能不能做一个小型的操作系统出来呢?《编译原理》你能不能找到开源的编译器看看词法分析、语法分析的源代码,写点注释呢?2000年之前钱老师是玩黑客工具的,但后来发现学不到本质,学的都是技巧,而技巧是有时效性的,所以想学好还得研究其本质,并且逆向分析底层的知识很少更新,而上层技术更新较快。

    在这里插入图片描述



    2.逆向技能学习路线

    在校可以做哪些项目准备呢?

    • 关注网络社区,参与技术讨论,推荐看雪论坛
    • 搜索安全公司招聘信息,了解技能要求(逆向技能表)
    • 针对性开发实际项目

    科锐逆向公司在看雪分享的逆向资料推荐大家去学习下。

    • 逆向并公开Ollydbg的原理
    • 逆向并公开xp版CreateProcess的原理及流程分析
    • 逆向并公开Win7 x64版CreateProcess的原理及流程分析
    • 逆向并公开xp版ReadProcessMemory原理及流程分析

    逆向工程技能树
    下面给出软件逆向工程的技能表,包括提前知识、基础技能、开发技能、逆向技能、学习书单和实践项目。

    在这里插入图片描述

    (1) 基础技能
    包括汇编语言、C语言、C++语言、数据结构,至少得学一个低级语言和高级语言,然后会一个面向对象语言,重点是数据结构。

    在这里插入图片描述

    (2) 开发技能
    逆向分析需要懂开发,开发至少需要了解一个操作系统平台的编程,可以选择Windows或Linux,如Windows SDK编程;然后至少了解一种框架(Java框架、微软MFC等)。同时,需要懂网络编程(Socket、TCP、HTTP等),有空可以了解下设计模式,学习设计模式前需要有项目经验,因为阅读大型项目代码时会遇到。然后,数据库是必须要学习的技能,非常重要。

    在数据库学习中,大家应该好好学习下数据关系理论(范式、集合等),而大家可能更关注后面的SQL语句。为什么呢?因为语句是可能变化的(如Neo4j和MySQL不同),而关系理论一直在那里。同时,我们的操作系统也可以理解为一个专用型数据库,它的职责是管理和分配硬件资源的。比如,我们的系统有50个以上进程在跑,一个32位进程的理论地址空间假设是2G,这就需要100G的内存,那怎么解决这个问题呢?通过数据关系可以解决。微软的操作系统都用到了数据关系,都会建表和主外键,从而避免空间的无故或重复占用。

    在这里插入图片描述

    (3) 逆向技能
    逆向技能比较偏实战,Windows逆向包括OllyDbg、PE文件格式、IDA使用、Windows内核驱动开发(核心操作系统),Android逆向包括BakSmail、DEX文件格式、Linux内核、NIX操作等。

    在这里插入图片描述

    (4) 学习书单
    主要推荐编程语言开发、数学基础、数学结构与算法、操作系统、编译原理、软件分析、、工具及参考手册等书籍。数学基础也非常重要,但我们逆向以应用为主,数学简单了解就好。

    在这里插入图片描述

    这里推荐《计算机程序设计艺术》,大师高德纳写的,其中TeX也是他发明的。高德纳在写书时发现现有的计算机排版软件效果太差,破坏了这套书的美感,所以辍笔10年专研排版美学打造了TeX系统,也设计了METAFONT字体设计系统,开发完TeX后才把这本书的四卷写完,这种精神非常值得大家学习!同时,《Windows内核情景分析》《现代编译原理》《软件调试》《加密与解密》等都不错。

    在这里插入图片描述

    (5) 实践项目
    这里给出一些推荐的开发项目和逆向项目供大家学习,感觉难度都不小!由于作者开发类的项目很多都做过,所以后面只会详细讲解一个远控软件的实现过程,更多是系统学习和分享逆向项目。远控软件对我们分析木马有帮助,CAD软件能帮助我们分析C++程序,调试器能辅助反调试,PE分析工具帮助对PE文件格式的理解,逆向项目更是直观地提升逆向分析能力。

    下面是推荐的一些项目,以及作者的完成情况,这些年确实学得很杂,o(╥﹏╥)o

    • 编写一个小游戏,如俄罗斯放、五子棋、贪吃蛇、坦克(2012年大二完成《坠梦》等多款游戏)
    • 编写一个远控软件,支持PC、Android(2014年大四毕设已完成)
    • 编写一个CAD,支持图形编辑、图像变换、存储 (2013年大三图形学课完成、2015年完成Android端)
    • 编写一个调试器
    • 编写一个小型操作系统(2013年大三小学期C++实现U盘操作系统)
    • 编写一个任务管理器,可以对进程、线程等程序活动进行监控(2014年大四毕设已完成)
    • 编写一个网络聊天室,支持多人聊天(2015年研一Python实现)
    • 编写一个PE分析工具
    • 做一个针对Windows扫雷的作弊程序(2020年博一完成)
    • 分析一个RPG游戏存档并写程序修改存档(2013年大三完成《仙剑1》存档器)
    • 通过注入方法,为Windows计算机添加一个菜单程序选项
    • 通过注入内联钩子,实现对指定程序API监控
    • 详细逆向分析一个典型的病毒和机理(2020完成年WannaCry蠕虫分析)
    • 不用编译器,只借助十六进制编译器,可以手写一个编译器
    • 从内存中durmp出某应用程序并修复导入表等消息
    • 尝试PJ看雪论坛Crakeme模块的各Crakeme习题(2019年正在进行中)
    • 结合安全机理找到安全漏洞并提交CVE漏洞报告

    在这里插入图片描述



    二.安全系列书籍及攻击推荐

    作为安全初学者,我结合自己和小伙伴们的经验,简单给大家推荐下网络安全、系统安全和人工智能三个方向的书籍,以及相关技术工具,希望大家喜欢!

    首先推荐如下书籍,这些都是我读过或正在学习的,都还不错。

    • 网络安全
      《白帽子讲web安全》《Web前端黑客技术揭秘》《XSS跨站脚本攻击剖析与防御》《Web攻防业务安全实战指南》《内网安全攻防渗透测试实战指南》《安全之路Web渗透技术及实战案例解析》《黑客攻防技术宝典浏览器实战篇》《网络攻防实战研究漏洞利用与提权》《CTF训练营》等。
    • 系统安全
      《加密与解密》《恶意代码分析实战》《Windows黑客编程技术详解》《逆向工程权威指南》《软件安全》《windows高级编程》《Windows PE 权威指南》《IDA pro 权威指南》《Android软件安全与逆向分析》《C++反汇编与逆向分析技术揭秘》《0day安全:软件漏洞分析技术》等。
    • 人工智能
      推荐 《机器学习》《深度学习》《统计学习方法》《Malware Data Science》 等。

    下图是作者的一些书籍,感觉还挺多的,建议大家一定结合实战进行阅读,坚持就是胜利。

    在这里插入图片描述


    常见安全网站及论坛:

    • 看雪https://bbs.pediy.com/
      看雪论坛是个软件安全技术交流场所,为安全技术爱好者提供一个技术交流平台和资源。
    • freebufhttps://www.freebuf.com/
      国内关注度最高的全球互联网安全媒体平台,爱好者们交流与分享安全技术的社区。
    • 吾爱PJhttps://www.52pojie.cn/
      吾爱PJ论坛是致力于软件安全与病毒分析的非营利性技术论坛。
    • i春秋https://www.ichunqiu.com/
      由国内网络安全机构永信至诚打造的信息安全在线教育平台,非常多的在线网络安全资源。
    • 安全客https://www.anquanke.com
      提供权威信息发布的漏洞信息,发布安全资讯,分享安全知识和精彩的安全活动直播。
    • 先知社区https://xz.aliyun.com/
      一个开放型技术平台,包括非常优秀的安全技术文章。
    • Bilibili网站https://www.bilibili.com/
      B站真的提供了非常多的各类学习资源,去B站学习安全课程真是不错的选择。
    • CSDN网站https://blog.csdn.net/Eastmount
      全国最大的编程社区,可惜安全文章比较少,但上面有正在进步的我,哈哈!更重要也有很多不错的安全分享,比如冰河、谢公子等,作者谋篇文章会详细总结CSDN的那些白帽子。
    • 微信公众号
      微信公众号也提供了非常便捷的安全学习环境,包括很多安全资源,推荐安全+、Gcow、谢公子、看雪、渗透云等公众号。
    • 安全牛https://www.aqniu.com/
    • 安全内参https://www.secrss.com/
    • 绿盟http://www.nsfocus.com.cn/
    • 阿里聚安全https://xlab.tencent.com/cn/

    网络安全常用工具推荐如下,其中加粗字体是作者学习或使用过的优秀工具。

    • Fiddler(网络漏洞扫描器)
    • Burpsuite(网络漏洞扫描器)
    • NMap(端口扫描器)
    • Nessus(漏洞扫描程序)
    • Wireshark(手动分析包工具)
    • SQLMAP(渗透测试工具)
    • Metasploit(漏洞监测工具)
    • Cobalt Strike(渗透测试框架)
    • Hydra(密码破J工具)
    • Acunetix(网络漏洞扫描软件)
    • pangolin(SQL注入测试工具)
    • Ettercap(中间人攻击工具)
    • Maltego(取证工具)
    • OWASP Zed(攻击代理工具)
    • Caidao(网站渗透工具)
    • 中国蚁剑(网站渗透工具)
    • 冰蝎Behinder(网站渗透工具)

    系统安全分析常用工具推荐如下:

    • OllyDbg(动态分析工具 倚天剑)
    • IDA Pro(静态分析工具 屠龙刀)
    • Windbg(微软内核级调试工具)
    • PEiD(查壳工具)
    • Cuckoo sandbox(开源沙箱系统)
    • PEView(PE文件查看工具)
    • 010Editor(二进制分析)
    • Process Monitor(Windows监视工具)
    • Process Explorer(文件进程查看器)
    • Cheat Engine(内存修改编辑工具)
    • Outpost Firewall(共享软件)
    • hex editor(十六进制编辑工具)
    • Ubertooth(蓝牙嗅探工具)
    • 汇编语言编译器

    下面分享2019年看雪安全峰会关于攻击检测和对抗的常见技术。

    在这里插入图片描述

    在这里插入图片描述



    三.吕布传游戏逆向分析

    下面以老游戏《新吕布传》为例,这是非常老的一款游戏。

    在这里插入图片描述

    在这里插入图片描述

    我们在玩这个游戏的时候会遇到一个问题,就是NPC说话太慢,在不断地过剧情,我们想逆向分析让它迅速完成对话,加快我们游戏的进程。

    在这里插入图片描述


    第一步,通过OllyDbg软件打开吕布传游戏“Ekd5.exe”。

    在这里插入图片描述

    第二,右键点击“查找”,选择“当前模块中的名称”查看该游戏打开了哪些函数。

    在这里插入图片描述

    返回界面如下图所示,包括该游戏需要调用的各种函数,并且猜测各种函数的应用场合。

    在这里插入图片描述

    第三步,发现两个异常函数。
    作者在游戏中设置两个钩子函数做什么呢?难道想检测我们的键盘吗?

    • UnhookWindowsHookEx:卸载钩子消息函数
    • SetWindowsHookExA:安装钩子消息函数

    PS:这些分析经验需要我们不断地实践来总结,这是一个大量反复训练的过程,目前作者也还在学习的过程,一起加油!

    在这里插入图片描述

    第四步,选中该函数右键点击“在每个参考上设置断点”。

    在这里插入图片描述

    可以看到已经设置了两个断点。

    在这里插入图片描述

    第五步,运行程序或双击断点可以进入反汇编窗口具体位置,可以看到它是一个键盘钩子,并且回调函数为0x0040D307。

    • Hookproc Ekd5.0040D307
    • HookType WH_KEYBOARD
    • CALL SetWindowsHookExA

    在这里插入图片描述

    第六步,双击回调函数那行,复制地址40D307,输入Ctrl+G跟随到指定位置。

    在这里插入图片描述

    在这里插入图片描述

    第七步,再跳转的地址0x0040D307位置按下F2,增加新的断点。

    在这里插入图片描述

    第八步,按下F9运行程序,并进入对话界面。

    在这里插入图片描述

    第九步,按下某个按键,我们来详细分析这段汇编代码。

    在这里插入图片描述

    作者按下的是数字“9”,其输出结果存储在EAX寄存器中,对应的十六进制为0x39,然后它会检测我按键的ASCII码是否等于0x20(空格)。

    • CMP EAX, 20

    在这里插入图片描述

    第十步,给该位置0x0040D32A下个断点,继续运行和分析代码。
    当输入空格相等后,它会比较一个全局变量的值是否为0,然后进入新的CALL。

    • CMP ptr [500E0C], 0
    • CALL Ekd5.00406A33

    在这里插入图片描述

    运行代码进入CALL函数,然后去到0x00406A33位置,如下图所示,发现它开启了一个线程。我们接着需要定位到线程的处理函数。

    • CreateThread
    • PUSH Ekd4.00406A7F

    在这里插入图片描述

    第十一步,按下Ctrl+G跟随到0x00406A7F位置,接着分析汇编代码。

    在这里插入图片描述

    给该位置下个断点,然后分析该函数内容。发现它首先比较状态,如果状态为0就设置个WM_LBUTTONDOWN消息,即点击鼠标。

    • Message = WM_LBUTTONDOWN
    • Message = WM_LBUTTONUP

    在这里插入图片描述

    然后间隔一个Sleep函数,时间为100毫秒,接着又设置一个UP消息,相当于左键按下后又弹起来了。

    在这里插入图片描述

    写到这里,我们发现空格的效果就是反复按下鼠标左键又弹起右键,原来该游戏已经自带了过场景的功能,就是按下“空格”,哈哈!但是该游戏的说明书并没有讲述这个按键的情况,相当于一个隐藏功能,这里大家也可以进一步修改制作游戏辅助器。这里主要是带领大家来学习下游戏逆向的过程,尤其是OD工具的基础用法。

    在这里插入图片描述

    总之,如果你喜欢逆向分析,会非常有意思,包括玩游戏也会从另一个角度思考;但如果你不喜欢逆向,千万别进这个行业,每天逆向代码看到想吐,可以换个喜欢的行业,因为逆向分析工作就是每天泡在代码堆里。



    四.总结

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

    • 一.如何学好软件逆向技能
      1.软件逆向前沿
      2.逆向技能学习路线
    • 二.安全系列书籍及攻击推荐
    • 三.吕布传游戏逆向分析

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

    在这里插入图片描述

    《珈国情》
    明月千里两相思,
    清风缕缕寄离愁。
    燕归珞珈花已谢,
    情满景逸映深秋。

    最感恩的永远是家人的支持,知道为啥而来,知道要做啥,知道努力才能回去。夜已深,虽然笨,但还得奋斗。

    (By:Eastmount 2020-07-29 星期一 晚上9点写于武汉 http://blog.csdn.net/eastmount/ )



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

    参考文献:
    真心推荐大家好好看看这些视频和文章,感恩这些大佬!前非常推荐钱老师的视频,感谢华科。
    [1] 科锐逆向的钱林松老师受华中科技大学邀请- “逆向分析计算引导”
    [2] [网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
    [3] [网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向
    [4] Eastmount网络安全自学篇系列-100篇


    展开全文
  • 前言 本系列文章旨在从零开始学习游戏辅助的工作流程和开发方法,了解游戏背后的攻防对抗手段,重点侧重数据和call的追踪查找。 侧重方向在于学习整个...点击链接加入群聊【鬼手游戏逆向交流】: 群号码:1055136945
  • 本课程可以带领你游戏逆向入门 可以学会 CE,OD,找游戏基址,功能CALL等实现变态功能 可以更深入的理解从高级语言到汇编语言的一个对应过程 可以学会 逆向软件  外挂与反外挂 破解防破解  游戏安全的基础...
  • 本公开课旨在: · 给未接触过二进制逆向安全的朋友进行“技术性科普” · 给想入门二进制逆向安全的朋友进行“知识以及技术方向”框架的梳理 · 对二进制逆向安全中的“游戏逆向分析”进行学习框架的梳理与技术演示
  • 易语言 从0 手把手录制编写FPS游戏辅助 通过逆向游戏分析得到所需数据 实现方框透视  全网独家飞人 骨骼透视  骨骼自瞄 人物加速 吸人 预判自瞄 高端UI菜单绘制 立体方框 敌人视线显示 物品绘制 内存陀螺...
  • UE4游戏逆向通杀课程

    2021-06-10 15:28:56
    讲解最新的游戏引擎逆向! 讲解UE4游戏逆向所需要的所有工具! 明白逆向游戏所有漏洞的类型  
  • [游戏分析] 游戏逆向

    2020-11-28 00:26:25
    射击类 FPS游戏:实现D3D劫持透视 (API Hook) FPS游戏:实现GDI方框透视 (三角函数)

    游戏外挂的种类

    模拟键盘、鼠标(一般使用 SendInput)
    这种常见的就是采用按键精灵,对于一些任务系统,或者采集系统,通过按键精灵来录入操作,模拟人手操作,加快收集过程,对于这种的就需要服务器进行分析了,不过影响不是很大,根据影响效果来看是否处理

    修改数据包,破解协议
    协议破解是一种常见的方式,主要是针对通信内容进行破解,对于采用hash加密的协议来说,会被彩虹表暴力破解。对于采用对称加密的算法来说,如果密钥被截获或者从文件破解,都会触发这种解密行为。若是采用非对称加密,对服务器的性能损耗太严重了,不值得,所以好的方式还自定义一种动态密钥,加大被破解的难度。

    数据包重发、篡改
    对于有些协议加密比较严谨的项目,协议数据破解会很难,作弊者破解不了,就重发或者篡改向服务器发的包,比如充值包,或者购买道具包,他们会采用WPE工具截取到发送的包之后,再次重发,如果服务器没有做好唯一认证或者逻辑严格检查,就会被这种重发包给攻击,造成大量道具的产出。 发放技能这种包也可以被重发,这样可以无限放技能。

    加速
    加快游戏的时间或者帧率,让人物快速移动、快进技能CD等,或者遇到一些操作比较难的关卡,减慢游戏节奏,减低操作难度,从而影响游戏的帧率,加速过关,减速躲避技能等。
    对于这种行为,一般是客户端和服务器做好心跳检测,检查客户端时间,防止篡改,另一方面做好客户端输入数据检查,做到验证数据以服务为准。

    修改本地内存(改数据、拦截 api)
    修改内存数据,这个在以战斗逻辑主要客户端计算的游戏中,经常会出现。这类外挂通过分析游戏所使用的内存,找到内存中的变量去分析猜测变量是代表的什么含义。然后再去修改这个值,令玩家控制的角色战斗力爆棚,比如技能CD直接修改为0,或者攻击值修改变大等。这个一方面客户端要对内存数据做好加密,另一方面服务器得做好验证,不能以客户端为准,具体形式后面再讲。


    思路参考 (长期更新)

    射击类

    FPS类游戏面临的两大外挂问题:透视和自瞄。这也是多数FPS游戏所遇到的问题,比如守望先锋和穿越火线等。

    透视分为方框透视和人物透视,具体的方框透视,我没有仔细研究过,大概也是通过坐标系来定位的,而坐标系的数据也是通过内存数据读取出来的,所以说若是内存数据没有保护好,这个也是会被搞的。而人物透视就是采用劫持系统渲染的逻辑来实现的,简单粗暴。

    自瞄是方框透视的附带功能,但是比方框透视更难以检测。因为自瞄从原理上来说仅仅是模拟了鼠标的移动,并没有实际对游戏进行干涉。所以这种方式想要验证,只能通过服务器来分析是否是输入设备的操作来处理了,相对比较困难。

    FPS游戏:实现D3D劫持透视 (API Hook)

    FPS游戏:实现GDI方框透视 (三角函数)

    SystemCheats外挂分析报告

    【CSGO】AliveNK外挂分析

    展开全文
  • 简单 Unity3D 安卓游戏逆向思路

    千次阅读 2019-09-05 09:49:10
    作者:dawu@知道创宇404实验室 时间:2019/02/25 英文版本:...0x00 前言 这是一篇游戏引发的简单技术文。 起因是个人很喜欢玩 google play 上的一些数字类型(角色攻击是线性增长,怪物指数变...
  • 娜璋AI安全之家于2020年8月18日开通,将专注于Python...前文作者先带领大家学习什么是逆向分析,这篇文章将继续普及逆向分析基础知识,告诉大家如何学好逆向分析,并结合作者经验给出逆向分析的路线推荐,最后给出吕布
  • 讲解最新的游戏引擎逆向!认识我们所需要用到的工具和使用方法! 了解到游戏逆向和安全 揭秘全部过程
  • 学习x64游戏逆向汇编封包游戏安全攻防外挂和反外挂反调试需要掌握的知识体系还是比较复杂的,逆向的知识体系确实是太多了 涉及到 汇编 C语言 c++ win32 hook call 封包 内存 lua 注入 等等,下面给大家帖2张图 ...
  • 游戏逆向的前期准备

    2020-03-03 12:11:36
    其中script.py可以用于ida,对IL2CPP表中的无名函数进行标记成形成类名$$函数名,逆向工程就有头绪了。另一个文件dump.cs是提取的方便阅读的符号表,可以使用任意文本编辑器打开,就像阅读源码的头文件一样。 在...
  • 这两天的内容都偏向于实战,今天的简单服务器搭建已成功啦!给一张成果图: 这里来说一下建立基础服务器的过程吧。 下面的内容我不用易语言称述,使用前面我们学习的C++,来进行学习。 ERPCServer类型和ERPCClient...
  • PC游戏逆向思维-漏洞挖掘 90后,游戏作弊工程师,从事开发4-5年,擅长语...
  • 游戏逆向学习前简介

    2020-03-12 14:06:01
    第一阶段: C语言、C++、C++高级、数据结构、python、密码学、协议分析、mysql 第二阶段: 汇编语言、SDK编程、界面库编程、windows原理、windows高级原理 第三阶段: 内核编程、病毒分析、逆向工程、漏洞挖掘、加壳...
  • 讲课主要形式是理论+实战。通过讲解,来加深您对于游戏检测的理解,并能够开拓您的思路,达到举一反三的作用。
  • 简单Unity3D类安卓游戏逆向思路

    千次阅读 2019-02-26 18:32:22
    作者:dawu@知道创宇404实验室 时间:2019/02/25 ...但是这种游戏仍旧存在一定缺陷,前期资源不多,玩的太慢、玩的时间长了,就感觉没意思,就不想玩了,所以在玩到游戏中期的时候,往往都会去网上搜索XX...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,359
精华内容 5,743
关键字:

游戏逆向