首页
社区
课程
招聘
[旧帖] [原创][申请邀请码] 第一次自己独立分析外挂 HF 0.00雪花
发表于: 2011-2-17 21:07 1939

[旧帖] [原创][申请邀请码] 第一次自己独立分析外挂 HF 0.00雪花

2011-2-17 21:07
1939
第一次发帖,文笔也不太好哈见谅!
今天很激动!!!学了汇编以来总算是靠自己分析一个东西了!!!
   从王爽的汇编,到郁金香的教程学了汇编也有几个月了。不知道新手有没有这种感觉,学了汇编以后总想把什么程序都扔到OD里去看下的冲动,还喜欢自己写些小的外挂。比如我写过合金弹头,扫雷,连连看,西游奇缘。都是些简单的游戏。我以前也玩过WAR3(完全靠自己实打到HF11级的,VS10级),所以我就想能不能自己写个,不过没成功!

于是上网搜了个WAR3 MH 5.0的WAR3外挂, 加了壳的我也脱不了。 不过用了一个内存修改监视工具。找到了修改的关键内存(在Game.dll中),然后自己OD修改代码,保存GAME.DLL,在换悼war3目录下的game.dll,测试了下果然可以。

这几个是别人修改的Game.dll内存地址, 还有一些这里我只测试了3个小地图显示单,分辨幻像。应该还有不少
监视进程PID:[540] 写入地址:[6F3A20DD] 数据长度:[1]
写入数据:EB
****************************************
监视进程PID:[540] 写入地址:[6F28357C] 数据长度:[1]
写入数据:40
****************************************
监视进程PID:[540] 写入地址:[6F28357D] 数据长度:[1]
写入数据:C3

于是上HF测试···在1V1积分房间测试                               发现没用。。。囧

于是猜想:
是不是DLL的载入的基址不一样,所以导致修改了错误的地址。用OD察看了下发现载入的基址没变。但是代码没有修改成功。
于是再猜是不是屏蔽了WriteMemory这些函数 要么就是根本没有用WAR3自带的Game.dll。。OD->查看模块,发现Game.dll的路径不是war3的目录,而是在C:\Documents and Settings\Administrator\Local Settings\Temp目录下的。。。。。于是可以肯定不是WAR3的GAME.DLL。。

然后我试了下,删除C:\Documents and Settings\Administrator\Local Settings\Temp 目录的game.dll。点开始游戏Temp目录下马上就会多出一个Game.dll.

我还很天真的把修改后的Game.dll入到Temp目录下,结果被替换悼了................依然不行
我还搜索GAME.DLL 看一下有没有其它地方有这个HF的GAME.DLL,没有发现。猜想可能是以资源的方试进行释放的。

既然要复制,那么就要用到API是吧。 于是OD下断CopyFileA , CopyFileW 果断断了下来,不过没有复制GAME.DLL。而是一些MFC的DLL,通过比较发现od断下来之前, HF的GAME.DLL就已经复制到Temp目录下了。于是肯定相关代码就在CopyFile什么的前面, 用OD住前回溯。。。。。。

代码是在HF 的模块GameShell.dll中
/*1002B416*/  MOV ECX,DWORD PTR DS:[EAX-8]
/*1002B419*/  TEST ECX,ECX
/*1002B41B*/  JLE GameShel.1002B645
/*1002B421*/  PUSH EAX
/*1002B422*/  CALL DWORD PTR DS:[<&SHLWAPI.PathFileExistsA>]  //检查路径文件是否存在 呵呵就是这了
/*1002B428*/  TEST EAX,EAX                        // 对比结果
/*1002B42A*/  JE GameShel.1002B645                        // 这是一个大的跳转,跳过了那些复制dll到Temp目录的代码
/*1002B430*/  PUSH GameShel.10079E04
/*1002B435*/  LEA ECX,DWORD PTR SS:[ESP+18]
/*1002B439*/  CALL <JMP.&MFC42.#CString::CString_537>
/*1002B43E*/  LEA EAX,DWORD PTR SS:[ESP+14]
/*1002B442*/  LEA ECX,DWORD PTR SS:[ESP+10]
/*1002B446*/  PUSH EAX
/*1002B447*/  LEA EDX,DWORD PTR SS:[ESP+1C]
/*1002B44B*/  PUSH ECX
/*1002B44C*/  PUSH EDX
/*1002B44D*/  MOV BYTE PTR SS:[ESP+4E4],8
/*1002B455*/  CALL GameShel.1002AE80
/*1002B45A*/  ADD ESP,0C
/*1002B45D*/  LEA ECX,DWORD PTR SS:[ESP+14]
/*1002B461*/  MOV BYTE PTR SS:[ESP+4D8],7
/*1002B469*/  CALL <JMP.&MFC42.#CString::~CString_800>
/*1002B46E*/  LEA ESI,DWORD PTR DS:[EBX+858]
/*1002B474*/  PUSH 5C
/*1002B476*/  MOV ECX,ESI
/*1002B478*/  CALL <JMP.&MFC42.#CString::ReverseFind_5683>
/*1002B47D*/  LEA ECX,DWORD PTR SS:[ESP+24]
/*1002B481*/  MOV EBP,EAX
/*1002B483*/  CALL <JMP.&MFC42.#CString::CString_540>
/*1002B488*/  MOV BL,9
/*1002B48A*/  CMP EBP,-1
/*1002B48D*/  MOV BYTE PTR SS:[ESP+4D8],BL
/*1002B494*/  JE GameShel.1002B61C
/*1002B49A*/  INC EBP
/*1002B49B*/  LEA EAX,DWORD PTR SS:[ESP+14]
/*1002B49F*/  PUSH EBP
/*1002B4A0*/  PUSH EAX
/*1002B4A1*/  MOV ECX,ESI
/*1002B4A3*/  CALL <JMP.&MFC42.#CString::Left_4129>
/*1002B4A8*/  PUSH EAX
/*1002B4A9*/  LEA ECX,DWORD PTR SS:[ESP+28]
/*1002B4AD*/  MOV BYTE PTR SS:[ESP+4DC],0A
/*1002B4B5*/  CALL <JMP.&MFC42.#CString::operator=_858>
/*1002B4BA*/  LEA ECX,DWORD PTR SS:[ESP+14]
/*1002B4BE*/  MOV BYTE PTR SS:[ESP+4D8],BL
/*1002B4C5*/  CALL <JMP.&MFC42.#CString::~CString_800>
/*1002B4CA*/  LEA ECX,DWORD PTR SS:[ESP+24]
/*1002B4CE*/  PUSH GameShel.10077634
/*1002B4D3*/  LEA EDX,DWORD PTR SS:[ESP+24]
/*1002B4D7*/  PUSH ECX
/*1002B4D8*/  PUSH EDX
/*1002B4D9*/  CALL <JMP.&MFC42.#operator+_924>
/*1002B4DE*/  MOV ESI,DWORD PTR DS:[EAX]
/*1002B4E0*/  LEA EAX,DWORD PTR SS:[ESP+10]
/*1002B4E4*/  PUSH GameShel.10077634
/*1002B4E9*/  LEA ECX,DWORD PTR SS:[ESP+18]
/*1002B4ED*/  PUSH EAX
/*1002B4EE*/  PUSH ECX
/*1002B4EF*/  MOV BYTE PTR SS:[ESP+4E4],0B
/*1002B4F7*/  CALL <JMP.&MFC42.#operator+_924>
/*1002B4FC*/  MOV EAX,DWORD PTR DS:[EAX]
/*1002B4FE*/  PUSH 1
/*1002B500*/  PUSH ESI
/*1002B501*/  MOV ESI,DWORD PTR DS:[<&KERNEL32.CopyFileA>]

嘎嘎知道怎么做了吧! 现在就简单了。修改跳转/*1002B42A*/处的  JE GameShel.1002B645 。这里很方便。JE是2个字节,JMP是一个字节, 所有剩下的一个字节填冲NOP就行了。

具体那里复制的GAME.DLL 我就没有继续找了。大家可以找一下

1V1积分房测试。。。。。。。。。成功。。。。。。。
Temp目录下不会在有HF的GAME.DLL, 而是用的是我们修改后的DLL,然后 右键->复制到可执行文件->所有修改->全部复制->保存文件 保存修改后的HF的GameShell.dll替换悼浩方原有的DLL。

注销机器再进行一下测试没有问题。至此成功通过修改WAR3的Game.dll, 和HF的GameShell.dll 实现了在1.24 1V1积分房间开全图了。。。而且不用使用外挂。

不过相关的dll,载入的路径就在WAR3目录下了。只要一检测就会发现···饿

个人感觉,反汇编的话一定要有有错的编程技术,不然的话看到API你都不知道是做什么用的。

我就是API不太熟悉,所以动不动就百度很费时间的。

对了我用的是HF的优化版,正式版不知道怎么个情况。

完。。。。。。。。。。。。。。。。。。

传上监视,对其它进程的内存修改的软件。 好像是驱动的.

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
过一会儿War3就挂掉了。。。说你开了作弊工具
2011-2-17 22:00
0
雪    币: 206
活跃值: (86)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
测试过HF不会被检测出来哟!
不知道是不是我用的优化版的原因!
2011-2-18 09:11
0
雪    币: 81
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
API方面的东西还是用MSDN比较好,少用百度,不够专业也不够详细,浩方嘛,也就是那个叫GGWAR3.dll的东西中有些古怪
2011-5-23 07:42
0
游客
登录 | 注册 方可回帖
返回
//