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

逆向工程

你玩游戏么?单机游戏,你是否使用过游戏补丁、修改器?

逆向工程,又称逆向技术,是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。

而软件逆向工程,随着计算机技术在各个领域的广泛应用,特别是软件开发技术的迅猛发展,基于某个软件,以反汇编阅读源码的方式去推断其数据结构、体系结构和程序设计信息成为软件逆向工程技术关注的主要对象。软件逆向技术的目的是用来研究和学习先进的技术,特别是当手里没有合适的文档资料,而你又很需要实现某个软件的功能的时候。也正因为这样,很多软件为了垄断技术,在软件安装之前,要求用户同意不去逆向研究。

而,这是重点:逆向工程的实施过程是多领域、多学科的协同过程。

我们拿它来讲解

首先,我声明一点,本文一切仅为技术探讨,并不包含任何攻击性、负面性侵犯。我酷爱俄罗斯方块,而其中火拼俄罗斯更为火爆。记得当年不日不夜的练习俄罗斯方块,试图在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附加俄罗斯方块,找到一个关键点,这个关键点就是,游戏初始化。

从正常的开发角度来想,在初始化的时候,一般都会清空数据。无论是从网络还是本地,都会分配方块的样式。然后从这里入手,我就很快的找到了几个内存地址。从这些地址中,可以得到当前方块的样式,并且可以预知下一个方块的样式,并且得到了当前摆放的游戏池中的样式。然后,紧接着,就找寻控制移动的地方。很快,就从按键得到一些信息,找到了。

其中,所有下落后的方块,我们可以在OD中看到他的内存样式,其中表示红色的,就是被改变的数据。什么数据被改变呢?就是确定下落后的方块,数字代表了方块的颜色,也可以说是方块的样式。内存中的分布如图可见。

然后,通过注入DLL到进程,做出了一个插件。图片中演示了插件工作的样式。

其中,已经预知了下几个方块的样式,并且得到了游戏棋盘的数据,AUTO就是自动开始游戏。测试了效果还不错。

结束了吗?

其实逆向的还有很多很多高深的奥秘。我也只是一个初级者。现在大多数的程序,都加入了一些反调。并且为自己的程序加入了一些壳。简单说说,世界比较知名的高强度壳就是VMProtect,Themida ,SE(Safengine)等等。其中,TW(Themida Winlicense)当时搞得我头大,他的反调很是有趣。而,对于游戏来说,很多游戏都加入了驱动级的保护,比如腾讯的TP(TenProtect),韩国公司的HS(HackShield),还有NEXON的NGS(Nexon Game Security) ,完美的PP等等等。

现在安全越来越被大家重视,而公司安全逆向组一般都会做一些病毒样本分析,也会做一些公司产品的防护。而这是一个博大精深的世界,里面非常的有趣,也富有挑战。所以,一文的简单介绍,希望能把你吸引进入,这个神奇的界域。

本文作者:Garfield(点融黑帮),现任职于点融技术部Social团队,游戏引擎 tyo Engine 及 tyo Engine Revolution作者,对尖端渲染技术拥有浓厚兴趣,曾就职于多家游戏大厂参与游戏引擎研发相关工作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,056评论 25 707
  • I have been single for a long time,but I am little hesita...
    Roc_Fan阅读 639评论 0 1
  • 在逛超市旁边没人时,你能对出现在你面前从鱼族箱里刚蹦出来不久的在地上奄奄一息的大鱼熟视无睹吗?我不能。所以双手慢慢...
    洛桑尔静阅读 100评论 0 2