开启左侧

逆向分析,计算机世界中的九阴真经

[复制链接]
admin 发表于 2016-1-3 14:17:05 | 显示全部楼层 |阅读模式
435 0
你玩游戏么?单机游戏,你是否使用过游戏补丁、修改器?
逆向工程,又称逆向技术,是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。
而软件逆向工程,随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发展,基于某个软件,以反汇编阅读源码的方式去推断其数据结构、体系结构和程序设计信息成为软件逆向工程技术关注的主要对象。软件逆向技术的目的是用来研究和学习先进的技术,特别是当手里没有合适的文档资料,而你又很需要实现某个软件的功能的时候。也正因为这样,很多软件为了垄断技术,在软件安装之前,要求用户同意不去逆向研究。
而,这是重点:逆向工程的实施过程是多领域、多学科的协同过程。
我们拿它来讲解
首先,我声明一点,本文一切仅为技术探讨,并不包含任何攻击性、负面性侵犯。我酷爱俄罗斯方块,而其中火拼俄罗斯更为火爆。记得当年不日不夜的练习俄罗斯方块,试图在 3V3 竞技中一展宏图。却没有料到高手甚多,秒我乃拈花摘叶,随手即来。
此刻,如何是好?
假如,我有一个,传说中的神兵,是不是可以逆转这样狼狈的局面呢?嗯,有趣,甚是有趣。那么,我们就开始造兵器——打造一款,传说中火拼俄罗斯方块辅助如何?
首先,要打造一个辅助,你必须介入程序,怎么介入?
远程注入 DLL!
DLL 的远程注入技术是目前 Win32 病毒广泛使用的一种技术。使用这种技术的病毒体通常位于一个 DLL 中,在系统启动的时候,一个 EXE 程序会将这个 DLL 加载至某些系统进程(如 Explorer.exe)中运行。
这样一来,普通的进程管理器就很难发现这种病毒了,而且即使发现了也很难清除,因为只要病毒寄生的进程不终止运行,那么这个 DLL 就不会在内存中卸载。
用户也就无法在资源管理器中删除这个 DLL 文件,真可谓一箭双雕哉。记得 2003年QQ 尾巴病毒肆虐的时候,就已经有些尾巴病毒的变种在使用这种技术了。你需要了解以下几个 API 函数:
  • OpenProcess - 用于打开要寄生的目标进程。
  • VirtualAllocEx/VirtualFreeEx - 用于在目标进程中分配 / 释放内存空间
  • WriteProcessMemory - 用于在目标进程中写入要加载的 DLL 名称。
  • CreateRemoteThread - 远程加载 DLL 的核心内容,用于控制目标进程调用 API 函数。
  • LoadLibrary - 目标进程通过调用此函数来加载病毒 DLL。
在此我只给出了简要的函数说明,关于函数的详细功能和介绍请参阅 MSDN。还有,至于代码,本文不贴代码,只讲技术,有兴趣可以自行谷歌。
如此以来,就可以将自己写的 DLL,注入到火拼俄罗斯方块这个程序里,并且让他运行起来。
DLL 里实现什么?
DLL 里需要实现的就是一套基于人工智能的玩火拼俄罗斯的机器人。我们假设已经有一款超高智能的 LIB 已经被我们引入。那么,DLL 还需要就是实现模拟控制的一些方法。还需要什么?还需要当前方块的样子,下一个方块的样子,当前自己摆放的样子,甚至还可能需要知道对手摆放的样子,自己获得了哪些道具。
这些数据,怎么来?
图像识别,将当前窗口截图,然后开始根据 X Y 的坐标进行分析,通过图像识别的方法,获得当前方块样子,自己摆放的样子,对手的样子。
这样做好么?
这是比较直观的方案,但是每次都要扫描,进行图像比较,然后获得数据,你会直观的觉得,那会快么?效率高么?假定有了这些数据,你还要做什么?当然就是操作了,移动方块,变形方块,下落方块和使用道具了。这又如何做呢?简单,模拟鼠标键盘按键,然后操作就好了。

                               
登录/注册后可看大图
听起来,这一套,似乎是不错的方案,不是么?NO,这样做出来,顶多算一个兵器,要称之为神兵,估计还是有一点点距离的!那么,神兵的话,我们该如何打造?
分析内存,从内从中找到当前方块,自己摆放的样子,对手的样子。分析程序,获得开发者实现操作函数,并且调用这些函数。于是?听起来很深奥的样子,能办到么?
逆向工具
在这里,我只为大家普及工具,就不一一演示,我只做简单的介绍和说明。
静态分析工具 IDA,交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为 IDA Pro,或简称为 IDA,是总部位于比利时列日市(Liège)的 Hex-Rayd 公司的一款产品。开发 IDA 的是一位编程天才,名叫 Ilfak Guilfanov。十年前诞生时,IDA 还是一个基于控制台的 MS-DOS 应用程序,这一点很重要,因为它有助于我们理解 IDA 用户界面的本质。除其他内容外,IDA 的非 Windows 和非 GUI 版本仍然继续采用源于最初 DOS 版本的控制台形式的界面。

                               
登录/注册后可看大图
动态调试工具有 OD(OllyDBG)和 windbg。 调试应用层程序两个调试器都可以,OD 因为主要面向逆向,窗口布局更为合理直观且插件众多,所以一般情况下都首选 OD,windbg 没那么方便,大部分操作通过命令来进行,但它也有它的优势,各种命令(内置命令、元命令和扩展命令)提供了强大的控制和分析能力,所以 windbg 有时也会用到。如果要调试内核程序或模块那 OD 就无能为力了,windbg 可以说是唯一的选择,以前还有个 softice,但 softice 已经停止更新和支持,现在已经没什么了用了。

                               
登录/注册后可看大图
侦壳工具 PEid,但实际结果还是工具加上自己的分析。脱壳,尽量手动。二进制编辑工具 UltraEdit、Hex Workshop 以及 WinHex,比较工具 Beyond Compare。网络包抓包分析工具 Wireshark 和 Iris。文件和注册表监视工具 Process Monitor。最后,虚拟机,VM 不二。
开始逆向
有了工具,我们就可以开始对火拼俄罗斯进行逆向分析了,逆向是一个复杂而繁琐的过程。会经历无数的尝试,代码分析,逻辑分析。如果是分析游戏,如果您是游戏开发者,或许思路更为广泛,可以明白一些开发者的正常思维。
那么,这个游戏,我们入手点在那?
用 OD 附加俄罗斯方块,找到一个关键点,这个关键点就是,游戏初始化。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们

Dean模板工作室成立于08年,迄今已有五年web互联网开发实战经验.公司的服务宗旨是:"用良心做好服务,用实力做好质量!"

联系我们

  • 地址: 威海市高区旅游开发大厦1206室
  • 电话: +44 (0) 560-655-995
  • Email: contact@snapshot.com

分享到

客户端

新浪微博

手机微信

© 2001-2013 hi,company!.  Powered byDiscuz! X3  技术支持:迪恩网络
快速回复 返回顶部 返回列表