[原创]那些年我曾今玩过的魔兽外挂(一)
0x0 序言
本系列文章的发布顺序并非按照外挂功能复杂程度排序,这点请各位看官注意。
另外,亲爱的大手子们,你以为不封你们真的是因为没检测到你们吗?
那么,接下来要说的这个,应该是我目前玩过的在思路上最巧妙的,涉及到的点也是个检测的盲点,在长达10年(毫不夸张)的对抗过程中被双方都忽略点。
文件名:jasstools.zip
包含文件:jasstools.m3d,globals.txt,function.txt,main.txt,Game.dll
MD5:
jasstools.m3d: f55f15eb7a6c5b962df6a32c40d09372
game.dll:267861a0dfd416dbad13e7ee3ec7794a
0x1 分析
OK,依照惯例从DllMain()开始:

DllMain()非常清晰没什么好看的,当 ul_reason_for_call == DLL_PROCESS_ATTACH,即dll挂靠的时候执行 InitHack()函数
显然这个“InitHack()”函数才是我们要关注的重点。

就一份外挂来说,这个流程是写得非常符合“war3的规范的”,甚至比一些商业代码都要规范,当然还有更规范的外挂代码。其中有一句代码是我要吐槽的:
if ( strstr(&v_file_name, "War3.exe") || (v_ret_val = strstr(&v_file_name, "war3.exe")) != 0 )
这种代码在这份显得“非常正规”的代码中简直是神一样的存在,因为正常做法大概是:
std::transform(name.begin(), name.end(), name.begin(), ::tolower);
虽然这样要多写一点代码,但是看起来更符合这份代码的风格不是吗?
当然这句话我在很多易语言源码中见过比如:“game.dll”、““Game.dll” 、“GAME.DLL”比较三次的,实际上根本不用比较。
其流程图大致如下:

注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
