自制新版jAPI,兼容1.20e/1.21b/1.22(附带源代码)
其实就是加了对1.22的支持,并且大多数的地址不采用搜索而用硬编码(1.22改变代码结构,搜索代码已经不通用)另外1.20e只支持破解版,需要CD的版本因为是在启动后才自解密部分代码的,所以无法正常支持。
很早就做完了这个,最近看到jAPI的研究文章出了续集,所以干脆就把源代码也发出来给大家分享吧,提供更多可研究的内容,全局变量的访存个人觉得没有必要做,因为可以作为参数传入,所以就没有放进来。
新的jAPI加载方式:
把要加载的模块列表在japi.lst文件里,这样引导游戏和地图编辑器时就会加载所有写在里面的模块,模块名前加分号可以注释掉该行。
关于远程注入:
1. 仍然是CreateRemoteThread,只是为了防止杀毒软件报毒,使用LoadLibrary来获取地址使用。
2. 注入方法为改动LoadLibraryA("Game.dll")这里两条指令7个字节,跳转向注入dll的函数,在函数里先LoadLibraryA("Game.dll"); 然后对Game.dll的data段进行patch,保证在Game.dll的任何代码被执行前完成patch,但这个方法对付1.20e的非破解版就无法使用了,所以只支持1.20e破解版。
额外patch:
注意看spatch1, spatch2, spatch3三个地址,这个是patch联机地图4M大小限制的。
全部exe和dll都是用gcc编译,除了fileio.xjp(那个是以前写的fileio插件,用bcc编译的),这个文件是用来测试新旧japi之间的兼容性的。注意gcc链接时要链接psapi和shlwapi 哎~~虽然有心学jAPI,可是无奈GA的两篇jAPI文章都讲的特别晦涩~~基本什么名词都不懂~~
不知道LZ能不能把自己的Japi的文章发上?
要不然把自己学习的Japi文章转载上来?
我会万分感谢的~~ 楼上可以看fileio.cpp的源代码,如果还有问题的话,就直接跟帖提问吧 能不能先给我你的邮箱地址?
我的Email:[email protected]。 恩~~~虽然学C++,但是还是不懂很多~~
(下定决心回家把研发人员书库看一下~~)
如果想在你的japi里添加自己的japi函数(如FileReadBool和FileWriteBool)。就直接这样声明?
(在fileio.cpp里)
首先:typedef long jBool;
函数:
jBool jNATIVE FileReadBool(jInt hfile)
{
HANDLE hFile = (HANDLE)hfile;
DWORD dwRead;
jBool res;
if(ReadFile(hFile, &res, 4, &dwRead, NULL) < 0 || dwRead != 4)
return 0;
else
return res;
}
jBool jNATIVE FileWriteBool(jInt hfile, jBool v)
{
HANDLE hFile = (HANDLE)hfile;
DWORD dwRead;
if(WriteFile(hFile, &v, 4, &dwRead, NULL) < 0 || dwRead != 4)
return 0;
else
return 1;
}
最后在DllMain中添加:
jAddNative(FileReadBool,"FileReadBool","(I)B");
jAddNative(FileWriteBool,"FileWriteBool","(IB)I");
fileio.j:
native FileReadBool takes integer fileid returns boolean
native FileWriteBool takes integer fileid, boolean value returns integer
是不是这样就成功了?
急~~~求LZ火速解答~~ LS乱的一滩糊涂
这个东西会和bnloader冲突吗? bnloader?又是个不懂的名词…………
求LS告诉我这是个什么东西……
还有【这个东西会和bnloader冲突】的冲突是什么意思………… 引用第6楼血戮魔动冰于2009-02-26 16:32发表的:
bnloader?又是个不懂的名词…………
求LS告诉我这是个什么东西……
还有【这个东西会和bnloader冲突】的冲突是什么意思…………
拿来连学校战网的东东 引用第6楼血戮魔动冰于2009-02-26 16:32发表的:
还有【这个东西会和bnloader冲突】的冲突是什么意思…………
冲突就是有你没我有我没你 ………………
啊啊~~被吓到~~~~(>_<)~~~~
我是个白痴~~LS你真的不要欺负我~~
还有:神奇的LZ出现吧……我快等疯了~~ LS可以看这个http://www.islga.org/bbs/read.php?tid=1509
是不是,可不可以这种问题自己试下就可以了吧 引用第10楼actboy168于2009-02-26 17:23发表的:
LS可以看这个http://www.islga.org/bbs/read.php?tid=1509
是不是,可不可以这种问题自己试下就可以了吧
水平太次,看不懂呀,再说那个又不是LZ写的,也许不一样呢 那个...native函数的调用方式应该是cdecl 回楼上,我没有认真看堆栈的压入顺序,但老版本的jAPI的jNative的定义确实是__stdcall
我去看了sourceforge的w3grimoire仓库看了源代码,现在仍然是定义为__stdcall 出來支持一下 哦~
ca召唤出了艾玛侬 引用第5楼sowhat于2009-02-26 16:29发表的:
LS乱的一滩糊涂
这个东西会和bnloader冲突吗?
修改japi.dll,寻找Game.dll字符串,改成w3lh.dll
或者直接改japi.dll的源代码里LoadLibraryA("Game.dll")为LoadLibraryA("w3lh.dll")后编译
这样用war3loader.exe启动的效果就等同于用w3l.exe引导,可以上私服了。 引用第16楼Soar于2009-02-27 00:12发表的:
修改japi.dll,寻找Game.dll字符串,改成w3lh.dll
或者直接改japi.dll的源代码里LoadLibraryA("Game.dll")为LoadLibraryA("w3lh.dll")后编译
这样用war3loader.exe启动的效果就等同于用w3l.exe引导,可以上私服了。
好东西 来参观一下。
是lz做的吗? 我真的是白痴……japi.dll用什么工具才可以查看?
还有怎样看魔兽的内存/堆栈?