魔兽地图编辑器吧 关注:49,422贴子:3,568,588
  • 22回复贴,共1

内置Japi的前世今生(我也来科普下)

只看楼主收藏回复

内置Japi的功能是怎么实现的呢 内置 是将带有Japi的插件内置在地图里加载 从而实现自定义功能的接口


Japi是什么呢 Japi是指 自定义的Jass接口 ydwe定义为 非魔兽自带功能的函数
具体参考 actboy168的科普文章
https://tieba.baidu.com/p/2425581218


是在外部 使用内存注入器 加载自定义程序的方式来实现的Japi
缺点是难以多端支持 也就是在没有Japi注入器的环境下 地图无法创建 功能使用不了 这也造成japi在推广上天然的缺陷
将插件内置在地图里 可以满足在没有Japi环境下 使用Japi的功能 然而这里 内置是怎么内置的呢 难道是直接将dll跟exe添加到地图里就行? 远远没这么容易 实现需要关键的技术性问题 就是加载自定义程序 这又谈何容易 在1个正常的程序里 是不允许外人 来寄生自己的程序 寄生在别人的程序里的程序 就是病毒
这里内置Japi 就是用了病毒的方式来实现的


这里要再讲讲另外1个东西 RB (return bug) 这个bug大部分WEer都知道 RB嘛 RB强制转换类型+缓存 是1.20时期数据存取的1种方式 然而他有另外的用途 memory hack 内存破解 利用强制转换类型的 还有 变量同类型名字的bug 来实现 内存读取 跟 修改内存的漏洞
这里可以 参考下SE的文章
http://bbs.wow8.org/forum.php?mod=viewthread&ordertype=1&tid=221768


利用读写内存的漏洞 来写入自定义机器码 从而实现运行自定义程序的方式 来加载带有Japi功能的插件
利用读写内存的漏洞 运行自定义本地代码 又被称作是 “Jass虚拟机漏洞” 可以百度下 在很久以前就曾经爆发过这个漏洞的新闻 在1.24的时候RB被禁止之后就消声觅迹了 直到现在RB的memory hack回到我们的眼前
利用Jass虚拟机漏洞 穿透虚拟机 来加载Japi 从根本意义上说 就是在地图里植入病毒 只是这个病毒是为了实现Japi的功能 应用到地图编辑方面的用途而已 这是正确用途 ,也怕有心术不正的人士来借此漏洞 加载真正的病毒
所以各方面 对这个RB 这个内容做了限制 比如魔兽1.27B封了 写内存漏洞 (ps:不过又被我突破)
又比如 11平台 做了语法检测 从检测上 禁止了支持RB的语法 (PS:不过也有部分房间是允许的)


RB的memory hack 加载自定义接口函数的作用 是在 俄国佬的 dota6.88 里被大量扩展出新的 api
我根据国情 在能加载程序的基础上 移植使用ydwe的Japi的源码 从而实现 RB式运行ydwe的Japi 从而实现
内置在地图里的ydwe的Japi 从而出现现在 的内置Japi的功能
这样的功能对比 原本的japi 相对来说 只要在不反对有return bug 的地方即可运行使用
即非11平台的 其他平台 本地局域网 均可以使用
对此 科普性的描述就到此为止了
就科技而言 始终外国人还是快我们1步 等他们玩腻了 我们这边才开始 确实也是落后了许多


魔幻网游巅峰「永恒魔法」次世代大作今日公测

次世代魔幻RPG「永恒魔法」,永恒游戏,电影级3D画质,技能由玩家定制.动态沙盒副本,宏大史诗开放世界!限量礼包领取,送坐骑装备!

广告


虽然我看不懂 还是要顶下的


回复
举报|3楼2017-04-05 21:24


    回复
    举报|来自手机贴吧4楼2017-04-05 21:24
      围观


      回复
      举报|来自Android客户端5楼2017-04-05 21:29
        围观~


        回复
        举报|来自iPhone客户端7楼2017-04-05 21:44
          …喵呜不明嚼栗




          回复
          举报|来自Android客户端9楼2017-04-05 23:51


            回复
            举报|来自Android客户端10楼2017-04-06 00:19
              受教了


              回复
              举报|来自Android客户端11楼2017-04-06 00:25
                北京专业汽车贴膜连锁,价格公道质量好,50万+车友的共同选择! 本月下单最低五折!
                广告
                数组型变量的Set和Get如何用字节码表示呢?


                回复
                举报|12楼2017-04-06 00:37
                  关于以下代码,我有几个问题想问下
                  [jass]
                  function Memory takes integer address returns integer
                  set index=address
                  call TriggerEvaluate(MemReader)
                  return bestScore
                  endfunction
                  function Memory_Nothing takes nothing returns nothing
                  return
                  endfunction
                  function Memory_Init takes nothing returns nothing
                  set teamScore=C2I(function Memory_Nothing)-8
                  call TriggerAddCondition(MemReader,Condition(I2C(1648+C2I(function MeleeTournamentFinishNowRuleA))))
                  endfunction
                  [/jass]
                  1.set teamScore=C2I(function Memory_Nothing)-8 这个指代的应该是return吧?
                  2.I2C(1648+C2I(function MeleeTournamentFinishNowRuleA)
                  应该指代的是 指令set bestScore = teamScore[index]吧?
                  3.Memory_Nothing的字节码是怎样的?
                  4.Jass虚拟机的字节码有没有系统的教程?


                  收起回复
                  举报|13楼2017-04-06 00:51


                    回复
                    举报|来自Android客户端14楼2017-04-06 10:36
                      病毒帮顶


                      回复
                      举报|来自Android客户端15楼2017-04-06 10:46
                        大神好厉害 请问是专业是软件开发这类的吗


                        所以具体怎么用呢,原版编辑器能不能用呢


                        收起回复
                        举报|17楼2017-08-08 17:04