易语言写的硬件挷定程序爆破(破解一个简单外挂)
【文章标题】: 易语言写的硬件挷定程序爆破
【文章作者】: 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