[ Mugen ] - helper型 亲捏造 的几个特点

最近对helper型亲捏造进行了仔细的研究,有点成果。
但也有几个疑问。



这种 helper型亲捏造,是由helper实现的。而并非 本体亲捏造
本体亲捏造,简单暴力,成功率高(我个人认为,有主观因素,可能有错)。

helper型亲捏造  就是 普通意义上 大家所讲的 亲捏造。



①,这种亲捏造,既可以使用 %n,也可以不使用 %n。
不使用%n 的人物有 ESC,p-debugger_0106 。
顺便,p-debugger 的代码 和 ESC 几乎一模一样。稍有改动。


使用 %n 则 更方便。




②,很可能需要 “领域确保”,也就是用一些没攻击受击框的helper来占位。
往往出现的情况就是一堆helper占位,然后一个helper进行亲捏造。


③,亲捏造 只是一种 “变量和内存联系的手段” ,本身没啥杀伤力,但花式众多。


④,helper型亲捏造 思路和 本体亲捏造 完全不同。
本体亲捏造,是将 parent (6693 - 6696)(不是parent_id)这个位置上的数值全部刷掉,刷成自己想要的数值。 这个数值,就被认定为 亲的初始地址。



helper型亲捏造,则是将 parent (6693 - 6696) 在原有亲の地址的基础上,进行偏移。也就是在原有的数值上,加点数值。
最后得到的数值,也被认定为 亲的初始地址。


一般来说,加的偏移量 为 16进制下 1700 。也就是 10进制下 5888 。

刷值,只需要把parent (6693 - 6696) 这个位置 第二个位置 6694 处,刷成 (原有的数值+17)(全16进制)


注意,Mugen内操作,君无法使用16进制,所以得把 17 转换成10进制 --- 23
原有的数值,虽然在内存中是 16进制,但是在数字相加的时候,会把23 转换成17(16进制),然后相加
也就是会自动统一 进制。不用担心。


这样,如果 原来,4个位置的值为 (A ,B ,C ,D)
那么现在就变成了  (A ,B+23,C ,D)
这个时候, 亲就移动了 。向后移动了 5888 个 单位。


这刚好使得 新的亲位置下,其 var(56) 刚好在原来的 parent处,从而通过 parentvaradd
对原亲的 parent进行前移动 和 后移动。目的是,让捏造出来的亲的其他变量 ,刚好移动到你想要的地方



概念图



注意,以上图,纯属我个人的理解,可能有误,所以本文是抛砖引玉


如果,有谁懂的,都可以反驳我,补充一下本帖。感谢至极。




修改 helper的原亲 的 parent处之后,就可以进行一些技术上的跟进了


这个时候,就有杀伤力了,。
比如 亲捏造直死,就是亲捏造后,让对方alive归零。


⑤,亲捏造 最开始刷值的时候,要保证 亲ID是 0 。


之后用var(56)修改的时候,可以通过var(54)来修改 原来的亲的 helper ID
因为
6685-6688 :helperID       ; var(54)

6689-6692 :ParentID      ; var(55)

6693-6696 :Parent         ; var(56)

6697-6700 :Root            ; var(57)



这有特殊用途。
相当于创造了一个新的helper。


ESC 就是这么做的



⑥,来说说,亲捏造 刷值上的一个问题。
想要偏移 1700,只需要让 6694处 刷成(原来的值+23)


[state ];6684
type=null
trigger1=1
[state ];6685
type=null
trigger1=1
[state ];6686
type=null
trigger1=1
[state ];6687
type=null
trigger1=1
[state ];6688
type=null
trigger1=1
[state ];6689       ; 此处是 亲ID,亲捏造不是刷这里,这里是刷亲变更的地方
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6690
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6691
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6692
type=null
trigger1=1
ignorehitpause=1
persistent = 256
[state ];6693
type=null
trigger1=1
[state ];6694          此处将数值刷成17,将由下面循环控制刷值,亲捏造刷此处
type=null
trigger1=1
ignorehitpause=1
persistent = 128        ; 注意,这里待会儿有 原数值 + 128 的 persistent要刷
[state ];6695
type=null
trigger1=1
[state ];6696
type=null
trigger1=1
[state ];6697
type=null
trigger1=1
[state ];6698
type=null
trigger1=1
[state ];6699
type=null
trigger1=1
[state ];6700
type=null
trigger1=1
[state ];6701
type=null
trigger1=1
[state ];6702
type=null
trigger1=1
[state ];6703
type=null
trigger1=1
[state ];6704
type=null
trigger1=1
; 用变量,控制刷值次数
[State ]
type=VarSet
trigger1=!(2048&sysvar(2))    ; 亲捏造不成功的话,进行刷值
trigger1=Var(8):=Var(8)+1
trigger1=Var(8)>233           ; 233 = 256 - 23 ,23的16进制是 17
sysvar(2)=sysvar(2)|2048    ; 亲捏造 成功 标致
ignorehitpause=1
persistent = 256
; 下面是 刷值成功后,转入其他状态,这个不用管。
[State ]
type=ChangeState
trigger1=2048&sysvar(2)
trigger1=Var(9):=669400000
trigger2=Var(9):=1000006694
value= Var(9)
ignorehitpause=1
persistent = 256


注意,上面那个 “233”
这个“233",不是开玩笑的 233.而是有其含义的
这里是刷 233次

我来说一下,
233 = 256 - 23

23是 17(16进制) 的 10进制表示。


假设,parent (6693 - 6696) 这4个位置 原来的值是 A ,B ,C ,D
现在我们想得到是 A , B +23 ,C ,D
B如果+23,就是内存中加了 17(16进制)。
因为B是第二个位置,所以,内存中会偏移  00(D) 00(C) 17(B) 00(A)


那么为什么,刷 233次,就能得到 B +23呢?


举个例子,假设 原来的值为 B


那么,根据persistent刷值原理(不明白的,我博客上可以找到)
定义:

将原值刷完,并且第一次将persistent值刷完,我们这里算刷了第一次
则此还需要刷的次数为

(256 - 23) - (128 + B) =  128 - 23 - B


第二次刷的时候,原值已经刷完,只会通过persistent来刷值了。
那么,第二次 刷 128 - 23 -B 次后
最后的值为
128 - (128 - 23 -B) = B +23


得到了我们想要的 B +23

所以,最开始的 233 其实 是这样来的。





其实也可以刷 105次
hitachi氏的亲捏造里,就是刷的105次 (128 - 23)

因为
128 + B  - (128 -23) = B +23
也是能达到的。





-----------------------------------


本文抛砖引玉向,暂时就写这么多了。

有些东西,我也没研究透彻,毕竟国内资料少。


参考资料:
ESC,
hitachi氏 亲捏造记述 + 实验体pause,
月神蕾米,
遥远氏亲变更视频教程(其实是亲捏造,我会乱说 233333)

 
评论(1)
热度(2)
 
回到顶部