请选择 进入手机版 | 继续访问电脑版

GA地精研究院

 找回密码
 立即注册
查看: 6543|回复: 48

[演示&系统] 自制新版jAPI,兼容1.20e/1.21b/1.22(附带源代码)

[复制链接]
发表于 2009-2-26 13:20:40 | 显示全部楼层 |阅读模式
其实就是加了对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_new.rar

30 KB, 下载次数: 233

评分

参与人数 1威望 +3 收起 理由
血戮魔动冰 + 3

查看全部评分

发表于 2009-2-26 13:28:30 | 显示全部楼层
哎~~虽然有心学jAPI,可是无奈GA的两篇jAPI文章都讲的特别晦涩~~基本什么名词都不懂~~
不知道LZ能不能把自己的Japi的文章发上?
要不然把自己学习的Japi文章转载上来?
我会万分感谢的~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-26 13:32:10 | 显示全部楼层
楼上可以看fileio.cpp的源代码,如果还有问题的话,就直接跟帖提问吧
回复 支持 反对

使用道具 举报

发表于 2009-2-26 15:36:55 | 显示全部楼层
能不能先给我你的邮箱地址?
我的Email:xuelumodongbing@126.com。
回复 支持 反对

使用道具 举报

发表于 2009-2-26 16:17:17 | 显示全部楼层
恩~~~虽然学C++,但是还是不懂很多~~
(下定决心回家把研发人员书库看一下~~)
如果想在你的japi里添加自己的japi函数(如FileReadBool和FileWriteBool)。就直接这样声明?
(在fileio.cpp里)
首先:[codes=C++]typedef long jBool;[/codes]
函数:
[codes=C++]
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;
}[/codes]
最后在DllMain中添加:
[codes=C++]
        jAddNative(FileReadBool,"FileReadBool","(I)B");
        jAddNative(FileWriteBool,"FileWriteBool","(IB)I");
[/codes]
fileio.j:
[codes=jass]
native FileReadBool takes integer fileid returns boolean
native FileWriteBool takes integer fileid, boolean value returns integer
[/codes]
是不是这样就成功了?
急~~~求LZ火速解答~~
回复 支持 反对

使用道具 举报

发表于 2009-2-26 16:29:27 | 显示全部楼层
LS乱的一滩糊涂

这个东西会和bnloader冲突吗?
回复 支持 反对

使用道具 举报

发表于 2009-2-26 16:32:50 | 显示全部楼层
bnloader?又是个不懂的名词…………
求LS告诉我这是个什么东西……
还有【这个东西会和bnloader冲突】的冲突是什么意思…………
回复 支持 反对

使用道具 举报

发表于 2009-2-26 16:33:39 | 显示全部楼层
引用第6楼血戮魔动冰于2009-02-26 16:32发表的  :
bnloader?又是个不懂的名词…………
求LS告诉我这是个什么东西……
还有【这个东西会和bnloader冲突】的冲突是什么意思…………
拿来连学校战网的东东
回复 支持 反对

使用道具 举报

发表于 2009-2-26 16:34:54 | 显示全部楼层
引用第6楼血戮魔动冰于2009-02-26 16:32发表的  :
还有【这个东西会和bnloader冲突】的冲突是什么意思…………
冲突就是有你没我有我没你
回复 支持 反对

使用道具 举报

发表于 2009-2-26 16:57:11 | 显示全部楼层
………………
啊啊~~被吓到~~~~(>_<)~~~~
我是个白痴~~LS你真的不要欺负我~~

还有:神奇的LZ出现吧……我快等疯了~~
回复 支持 反对

使用道具 举报

发表于 2009-2-26 17:23:52 | 显示全部楼层
LS可以看这个http://www.islga.org/bbs/read.php?tid=1509

是不是,可不可以这种问题自己试下就可以了吧
回复 支持 反对

使用道具 举报

发表于 2009-2-26 17:36:11 | 显示全部楼层
引用第10楼actboy168于2009-02-26 17:23发表的  :
LS可以看这个http://www.islga.org/bbs/read.php?tid=1509

是不是,可不可以这种问题自己试下就可以了吧
水平太次,看不懂呀,再说那个又不是LZ写的,也许不一样呢
回复 支持 反对

使用道具 举报

发表于 2009-2-26 17:40:41 | 显示全部楼层
那个...native函数的调用方式应该是cdecl
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-26 18:37:13 | 显示全部楼层
回楼上,我没有认真看堆栈的压入顺序,但老版本的jAPI的jNative的定义确实是__stdcall
我去看了sourceforge的w3grimoire仓库看了源代码,现在仍然是定义为__stdcall
回复 支持 反对

使用道具 举报

发表于 2009-2-26 20:23:44 | 显示全部楼层
出來支持一下
回复 支持 反对

使用道具 举报

发表于 2009-2-26 22:26:18 | 显示全部楼层
哦~
ca召唤出了艾玛侬
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-27 00:12:44 | 显示全部楼层
引用第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引导,可以上私服了。
回复 支持 反对

使用道具 举报

发表于 2009-2-27 09:48:49 | 显示全部楼层
引用第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引导,可以上私服了。
[s:160][s:160]好东西
回复 支持 反对

使用道具 举报

发表于 2009-2-27 11:00:00 | 显示全部楼层
来参观一下。

是lz做的吗?
回复 支持 反对

使用道具 举报

发表于 2009-2-27 12:49:27 | 显示全部楼层
我真的是白痴……japi.dll用什么工具才可以查看?
还有怎样看魔兽的内存/堆栈?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-2-27 12:52:33 | 显示全部楼层
引用第19楼血戮魔动冰于2009-02-27 12:49发表的  :
我真的是白痴……japi.dll用什么工具才可以查看?
还有怎样看魔兽的内存/堆栈?
winhex或者ultraedit-32就可以编辑
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2018-12-15 18:19 , Processed in 0.053822 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表