前两天朋友发过来一个exe格式的视频文件,说是从网上买来的,必须输入与机器码对应的播放密码才能观看,想问我能否crack。我虽然写过两三年驱动,也用过SoftICE,但是对crack却完全是门外汉。大学时学过的汇编知识考完试就还给老师了,直到上个月看过了王爽老师的《汇编语言》(好书,推荐!),才刚刚跟汇编混了个脸熟。按理说不应该揽下这个瓷器活,不过我发现软件的界面比较粗糙,推测作者编程水平一般(当然也有很多NB的软件界面都很糙,但我想他们的作者应该不会靠卖视频赚钱,:)),就头脑一热答应下来了。
  本来打算使用自己比较熟悉的SoftICE,但是安装起来比较麻烦,所以从看雪下载了OllyICE v1.10修改版(其实也就是汉化加强版的OllyDBG啦)。用OD打开原始文件,立刻弹出一个对话框“快速统计报告表明其代码段可能被压缩、加密或包含大量的嵌入数据,代码分析将是非常不可靠或完全错误的,是否继续?”。这个exe嵌入了视频数据是肯定的,难道还加了传说中的壳?抱着一丝希望点击“否”,然后按F9运行,又弹出一个对话框“Protection Errorerror1.china-drm.com”,关闭对话框后,程序就运行结束了。直接运行原始文件时不是这样的啊,难道它还有反调试功能?
  又到看雪下载了PEiD v0.94,打开文件一查,果然加了壳:ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov [Overlay]。这是啥壳咱也不懂,但既然加了咱就脱呗。看雪上的ASProtect脱壳专用工具试了个遍,没一个管用,真是奇怪啊。到网上Google了一下,发现很多新手都在问如何脱这个壳,有的说很难搞,还有的说很简单,用某位高人写的Aspr2.XX_IATfixer_v2.2s.Osc脚本就能脱掉。赶紧又下载了这个脚本,试用了一下,还是不行啊,脚本运行过程中出错,弹出一个对话框“Error on line 285, Text: and tmp3, 0FFFF”。
  在网上又找了一个名为“ASProtect 1.2x - 1.3x [Registered]的脱壳技巧”的教学视频,先看看高手是怎么搞的吧。在视频里,作者先使用了HideOD插件的Hide功能(作者说不用的话脱壳后的程序可能出错),然后调用了一个名为“asp.osc”的脚本,一下子就把壳脱掉了!可是到哪里去找这个脚本呢?视频作者给出的论坛地址打不开,八成是给封掉了。
  我在网上又Google了半天,有两个“重大”发现(对我这样的菜鸟而言):一是可以使用PEiD的VerA 0.15插件检查出壳的真正版本,即ASProtect 2.3 SKE build 06.26 Beta [Extract];二是终于找到了一个名为“Aspr2.XX_unpacker_v1.0E.osc”的脚本。按照视频的步骤,先Hide,再运行脚本,果然成功了!不过脚本提示有偷窃代码,需要在日志窗口中检查IAT。没问题,视频也介绍了如何对付这种情况。运行ImportREC,找到脱壳的进程,把OD日志窗口中的OEP相对地址、IAT相对地址和IAT大小分别复制进去,不要点击“自动查找IAT”,直接点击“获取输入表”,结果显示输入表函数全部有效,然后点击“修复转储文件”,这个壳就算脱掉啦!
  脱壳后的文件很小,运行时会提示“文件已经破坏,无法播放”。看来程序有自校验措施,再说就算没有自校验,我们把视频数据弄丢了不也白脱嘛。又看了几位高手的文章,说可以利用PEiD的Overlay插件(ExtOverlay Plugin by Bob)把原始程序中的Overlay数据提取出来,这些数据应该就是视频信息。试了一下,果然提取出一个几十MB的文件,虽然不象前辈们说的那样可以直接播放,但是把它利用HxD软件附加到脱壳文件末尾以后,脱壳后的程序终于能够运行了。
  到这里,万里长征走完了第一步,不过也是最困难最关键的一步!下面开始实质性的crack工作。
  用PEiD扫描脱壳后的新程序,显示“什么都没有找到”,选择“核心扫描”,发现是用Delphi写的软件。其实在此之前,我用Spy++观察该程序运行时,就发现该程序许多窗口的类名的开头字母都是T,也从侧面印证了该程序的编写语言是Delphi。
  既然是对付Delphi,当然要祭出“神兵”DeDe了。我使用的是看雪下载的DEDE 3.50.4 Fix加强版。不知什么原因,进行扩展分析时程序总是死掉。不过也无所谓,一般分析就足够了。从“窗体”选项卡可以找到主界面窗体ID;从“过程”选项卡可以找到该窗体中显示机器码的控件ID、输入用户密码的控件ID、“确定”按钮的控件ID以及相应的事件响应函数。双击函数名,就弹出该函数对应的汇编代码,尤其让人兴奋的是还有详细的代码注释!
剩下的步骤就没办法详细记录了,就是下断点,跟踪,分析。虽然作者将用户密码的比较过程拆分成三段代码,安排在不同的地方,但是由于比较过程本身比较简单,因此很快就得到了正确的用户密码。将密码输入脱壳后的程序,就能够正常播放视频了。