首页
社区
课程
招聘
[原创]易语言写的硬件挷定程序爆破
发表于: 2011-3-13 15:19 9836

[原创]易语言写的硬件挷定程序爆破

2011-3-13 15:19
9836
【文章标题】: 易语言写的硬件挷定程序爆破
【文章作者】: v仔
【作者邮箱】: vxf155@sina.com
【软件名称】: 魔力宝贝外挂
【软件大小】: 1.49MB
【加壳方式】: 无
【保护方式】: 机器挷定
【编写语言】: 易语言
【使用工具】: OD
【操作平台】: Windows2003
【软件介绍】: 一个游戏的简单外挂,作者写得比较简单。
【作者声明】: 只是感兴趣,没有其他目的。本人菜鸟一个,请各位多多指教!
--------------------------------------------------------------------------------
【详细过程】
  算起来在看雪也是一菜鸟。这是本人的第一篇破文,爆破的大家就不要见笑。
  先向朋友了解一下外挂的行为:
  1、程序就得一个文件,未注册机器不能运行,启动时窗口一闪而过。
  2、运行前要向作者发送机器码,然后作者把能在该机运行的程序发过来。
  3、程序是易语言写的。
  根据这些情况,估计程序是把机器码硬编码到程序里的。
  虽然知道是用易语言写的,但还是要用PEID看看是否有壳。显示Microsoft Visual C++ 6.0,无壳。(第一次非常走运
  再看看区段,没有发现.ecode,是用新版易语言写的(这个上网查了才知道,OUT了!)。
  在网上搜索了一会,知道大概的处理方法。
  硬件挷定的就找字符串\\.\PhysicalDrive0。
  OD载入,CPU窗口任意位置右键 -> 超级字符串参考 -> 查找ASCII -> \\.\PhysicalDrive0
  双击后定位到
  
  0046F6AA  |.  53            PUSH    EBX                              ; /hTemplateFile => NULL
  0046F6AB  |.  53            PUSH    EBX                              ; |Attributes => 0
  0046F6AC  |.  6A 03         PUSH    3                                ; |Mode = OPEN_EXISTING
  0046F6AE  |.  53            PUSH    EBX                              ; |pSecurity => NULL
  0046F6AF  |.  6A 03         PUSH    3                                ; |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
  0046F6B1  |.  68 000000C0   PUSH    C0000000                         ; |Access = GENERIC_READ|GENERIC_WRITE
  0046F6B6  |.  68 28C45500   PUSH    复件_热?0055C428                 ; |\\.\PhysicalDrive0
  0046F6BB  |.  FF15 E0B25100 CALL    NEAR DWORD PTR DS:[<&KERNEL32.Cr>; \CreateFileA
  
  返回、返回、返回,返回到调用这个函数的地方,发现和网上找到的方法差不多。
  但没能找到看雪论坛上有一个贴子说的哪个通用切入点。
  不管了,返回得了。到了动态库的领空,那么就Ctrl+F9一直执行。回到当前程序后发现EAX已经得到了机器码。
  那就返回调用的地方。
  一般取完机器码后都要对比的,那么下面的函数就有可能是对比的了。一个一个看看。
  
  004182BF  |.  50            |PUSH    EAX
  004182C0  |.  E8 A5D10000   |CALL    复件_热?0042546A                   ;  这个函数取得机器码
  004182C5  |.  8945 E8       |MOV     [LOCAL.6],EAX                      ;  保存返回值
  004182C8  |.  8B5D EC       |MOV     EBX,[LOCAL.5]
  004182CB  |.  85DB          |TEST    EBX,EBX
  004182CD  |.  74 09         |JE      SHORT 复件_热?004182D8
  004182CF  |.  53            |PUSH    EBX
  004182D0  |.  E8 BC780200   |CALL    复件_热?0043FB91                   ;  可疑函数
  004182D5  |.  83C4 04       |ADD     ESP,4
  004182D8  |>  8B5D F0       |MOV     EBX,[LOCAL.4]
  004182DB  |.  E8 759AFEFF   |CALL    复件_热?00401D55                   ;  可疑函数
  004182E0  |.  53            |PUSH    EBX
  004182E1  |.  51            |PUSH    ECX
  004182E2  |.  8B45 F8       |MOV     EAX,[LOCAL.2]
  004182E5  |.  48            |DEC     EAX
  004182E6  |.  79 0D         |JNS     SHORT 复件_热?004182F5
  004182E8  |.  68 04000000   |PUSH    4
  004182ED  |.  E8 AB780200   |CALL    复件_热?0043FB9D
  004182F2  |.  83C4 04       |ADD     ESP,4
  004182F5  |>  59            |POP     ECX
  004182F6  |.  5B            |POP     EBX
  004182F7  |.  3BC1          |CMP     EAX,ECX
  004182F9  |.  7C 0D         |JL      SHORT 复件_热?00418308
  004182FB  |.  68 01000000   |PUSH    1
  00418300  |.  E8 98780200   |CALL    复件_热?0043FB9D
  
  此处略去几行
  最后找到这个,后来才知道如果自己仔细耐心点就不用一个个地找的。
  
  00418319  |.  E8 ED8CFEFF   |CALL    复件_热?0040100B                   ;  比较函数
  0041831E  |.  83C4 08       |ADD     ESP,8
  00418321  |.  83F8 00       |CMP     EAX,0                              ;  这里的测试返回值,有可能就是上面的函数
  00418324  |.  B8 00000000   |MOV     EAX,0
  00418329  |.  0F94C0        |SETE    AL
  0041832C  |.  8945 E0       |MOV     [LOCAL.8],EAX
  0041832F  |.  8B5D E8       |MOV     EBX,[LOCAL.6]
  00418332  |.  85DB          |TEST    EBX,EBX
  00418334  |.  74 09         |JE      SHORT 复件_热?0041833F
  
  原于水平太低,就不找算法了。朋友只要快,那就直接爆破掉
  第一次是把,CMP EAX,0 改为 CMP EAX,1 的。但后来一想,这样的话他原来注册有的机不就不能用了。
  这样好了,把返回值改为0再测试不就得了。MOV EAX,0 CMP EAX,0
  这样无论是否注册都能通过测试了。
  然后验证下是否可以运行。CPU窗口任意位置右键 -> 复制到可执行文件 -> 所有改动 -> 全部复制 -> 在新出现的窗口任意位置右键 -> 保存文件
  运行下。OK可以了。
  
--------------------------------------------------------------------------------
【经验总结】
  这个程序写得比较简单。作者只给知道的人写,所以才能被我破了。干这活要细心加耐心,还要心水清!
  破的方法也可以从已经有的机器码入手,在查找超级字符串中找到机器码数组,定位后向下找也能找到取机器码和比较函数
  。有空还要研究下这个外挂的实现方法。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2011年03月13日 15:13:32

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费
支持
分享
最新回复 (3)
雪    币: 3778
活跃值: (4364)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
还可以试下直接PATCH掉机器码
2011-3-13 16:15
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
额 易语言硬件绑定··好少见 大多都是网络验证吧
2011-3-13 16:24
0
雪    币: 219
活跃值: (488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
天天来看看,还是有收获的
2011-3-14 20:37
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册