[安全攻防进阶篇] 二.如何学好逆向分析、逆向路线推荐及吕布传游戏逆向案例 (2)

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

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

前文做者带领你们学习了科锐钱林松老师在华中科技大学的分享视频,讲解了什么是逆向分析、逆向分析的典型应用,接着经过OllyDbg工具逆向分析经典的游戏扫雷,再经过Cheat Engine工具复制内存地址获取,实现一个自动扫雷程序。这篇文章将继续普及逆向分析知识,告诉你们如何学好逆向分析,并结合做者经验给出逆向分析的路线推荐,最后给出吕布传游戏逆向案例。话很少说,让咱们开始新的征程吧!您的点赞、评论、收藏将是对我最大的支持,感恩安全路上一路前行,若是有写得很差或侵权的地方,能够联系我删除。基础性文章,但愿对您有所帮助,做者的目的是与安全人共同进步,也强烈推荐你们去看看钱老师的视频,加油~git

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


github


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

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



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

1.软件逆向前沿

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

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

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

在这里插入图片描述


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

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

基本功很重要,网上如今三天学会脱壳、两天学会反调试之类的教程不少,咱们须要倒是基本功。好比,咱们在扫雷逆向分析时,关于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/
    看雪论坛是个软件安全技术交流场所,为安全技术爱好者提供一个技术交流平台和资源。
  • freebuf(https://www.freebuf.com/
    国内关注度最高的全球互联网安全媒体平台,爱好者们交流与分享安全技术的社区。
  • 吾爱PJ(https://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/ )



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

相关文章
相关标签/搜索