第一次发帖,文笔也不太好哈见谅!
今天很激动!!!学了汇编以来总算是靠自己分析一个东西了!!!
从王爽的汇编,到郁金香的教程学了汇编也有几个月了。不知道新手有没有这种感觉,学了汇编以后总想把什么程序都扔到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作者讲授!