找回密码
 点一下
查看: 4104|回复: 30

【实践中的理论】一个脚本效验的思路

[复制链接]
发表于 2007-10-21 16:01:48 | 显示全部楼层 |阅读模式
【理论】脚本效验


使用函数
function GetCodeId takes code func returns integer
return func
return 0
endfunction
得到目标函数的一个地址(句柄值?内存值?我不清楚,不过这个数值几乎每次开始游戏都是随机的,)
那么测试开始,建立两个紧连的空函数:
function a takes nothing returns nothing
endfunction

function c takes nothing returns nothing
endfunction



这两个函数的间隔值为24;然后在这两个之间有任何修改和插入(函数名除外),间隔值都会有变化,于是,一种效验方法便产生了。。。

由于还在研究中,那么补充几点提示:
1 大多数地图都会读bj的,而bj函数排在war3map前面。。。
2 通过excute我们可以把main 和 config 包括进去。。。

另外补充一点,同样可以检测到globals的变化。。。
发表于 2007-10-21 16:10:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-10-21 17:06:07 | 显示全部楼层
用给触发器贴标签的方法效验当然也可以,但游戏中难道不需要创建动态触发么,每出来一个合法的触发都要用用gamecache加一条标签~(估计某狼心疼得都要哭了),只在游戏的初始化执行检查的话,那难道不会在检查过后再真正创造那些额外的触发么~更何况,一定要用新建触发才行么吗?想破除脚本效验,只有连根拔掉清除才行,而对付触发标签检查,可以不去理会直接绕过
回复

使用道具 举报

发表于 2007-10-21 17:24:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-10-21 17:26:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2007-10-21 17:38:15 | 显示全部楼层
没办法,这叫条件反射。。。
回复

使用道具 举报

发表于 2007-10-21 21:59:22 | 显示全部楼层
那是因为盗版技术太烂。所以才被校验出来。
回复

使用道具 举报

发表于 2007-10-21 22:52:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-10-22 12:55:45 | 显示全部楼层
=。=
是啊。很有前途。要不连.j都加密了吧。这样更有前途。让改图的找不到这个j。也找不到这个触发。多好。
回复

使用道具 举报

发表于 2007-10-22 16:20:47 | 显示全部楼层
但是如果加到尾部怎么检测?
回复

使用道具 举报

发表于 2007-10-22 16:24:46 | 显示全部楼层
我想,Kook先生是想判断main函数和blizzard函数之间的差值.
如果这个差值变大了,就是中间插入函数了.如果某人十分狡猾,把函数写在main函数的后面,也就是楼上所说的脚本文件的结尾处,之后用ExecuteFunc调用,我想,上面的方法会失效.
回复

使用道具 举报

发表于 2007-10-22 17:12:38 | 显示全部楼层
恩  不能写到main之后
回复

使用道具 举报

发表于 2007-10-22 17:13:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2007-10-22 18:08:48 | 显示全部楼层
搭楼中~~~~刚测试 失败了N次.....
继续  
回复

使用道具 举报

 楼主| 发表于 2007-10-22 22:44:41 | 显示全部楼层
那么我便给个在config后的例子罢,最好是用jassshoppro直接调试(有we一样的ctrl f9 功能),不过脚本会轮次保存在war3map.j 和scripts\\war3map.j下,所以请连续保存两次以确保读的是scripts\\的(最好手工加点修改标记)

我的测试结果如下,对于main 和 config,和一般函数无特殊之处,而一个有趣的现象是一个“测不准原理”,比如两个普通自定义函数,a debug得到 100 b 得到 101 ,那么I2S(b-a) 显示出来完全是个无理由的数值~这究竟是不是integer位限造成的还不清楚,不过BJ函数却能正确应用于坐标原点,暂时是个迷。
具体测试:
以一个bj函数为起点得到数值a
以地图内一个函数为终点得到数值b
每次启动游戏,a和b都是随机的,但b-a会是个定值,这个值随两函数间的内容变化(忽视函数名变化~)而变化。

scriptsindefy.w3x

16 KB, 下载次数: 35

回复

使用道具 举报

发表于 2007-10-23 08:58:40 | 显示全部楼层
在config后面写函数实在是太明显了  简直就是告诉别人我就在这里校验的  还有直接 GetCodeId(config) 这样不行  必须加个变量才行
回复

使用道具 举报

 楼主| 发表于 2007-10-23 11:40:25 | 显示全部楼层
目前脚本效验是作为一个理论,当然为验证是否盗版提供了一个方法。至于如何使之不会很容易的就被移除掉,那是具体操作者自由设计的(比如使用自定义bj、让关键函数包括地图重要数据使之不可以被简单的删除)。破解方面的情况大家清楚除,历遍万条代码,那么所有事情都会一清二楚,大不了相当如自己重写过一份,就不在讨论里展开了;
目前提供的情况是:确能监视出地图脚本的变动,因为厄,即使用exectue,也无法避免在main里加上去吧,除非不想让那些函数被执行。
回复

使用道具 举报

 楼主| 发表于 2007-10-23 12:54:40 | 显示全部楼层
那个所谓“测不准”现象是
单独显示 a b  c  为  0 1 2 的话
那么显示 b-a   c-a  无法预料,比如 101  102  ;12345 12346 不过还是相差1
回复

使用道具 举报

发表于 2007-10-23 13:16:53 | 显示全部楼层
其实我觉得 能检测到globals的内容就够了 因为添加触发无论如何你也要先添加一个trigger啊
回复

使用道具 举报

发表于 2007-10-23 13:58:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

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

GMT+8, 2024-5-2 14:33 , Processed in 0.165475 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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