游戏漏洞基于CE的AutoAssemble LUA注入

Posted 游戏安全实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了游戏漏洞基于CE的AutoAssemble LUA注入相关的知识,希望对你有一定的参考价值。


平常是否在测试某个游戏中想把一些状态打印出来呢,而用c写hook是否很不高效,每次更改代码又需要重新编译重新注入

下面将介绍一种使用ce lua对函数进行hook,并进行一些复杂的逻辑处理

应用场景:

分支执行

通过参数信息来筛选是否需要hook

通过调用lua后的返回值判断是否需要hook

参数打印

对函数的某个地方进行hook,并打印各种信息

ps:ce lua的接口在CE目录下的main.lua可查看


1. 对目标函数(此处以SendMessageA为例子)进行AutoAssemble Code injection


先来看看SendMessageA头部

 

非常标准的头部5字节

然后对它进行Code Injection

【游戏漏洞】基于CE的AutoAssemble LUA注入

 

2. 编辑{$lua}部分


{$lua}

openLuaServer("CELUASERVER")

 

function myfunction(param) --create a global function called myfunction

  print("this function got called")

  print("retAddr "..string.format("%x", readInteger(param+0x4)))

  print("param1 "..string.format("%x", readInteger(param+0x8)))

  print("param2 "..string.format("%x", readInteger(param+0xc)))

  print("param3 "..string.format("%x", readInteger(param+0x10)))

end

 

3. 编辑{$asm}部分


大部分代码都是CE CodeInjection和Call CE lua function自动生成的

只需手工处理一下传入的参数(在newmem可见)

{$asm}

//...

newmem: //this is allocated memory, you have read,write,execute access

//place your code here

push ebp                             //ebp保存

mov ebp,esp                         //ebp初始化

push eax                             //eax环境保存

push ebp                             //此处将ebp作为参数传入

push myluascript                   //函数名称

call LuaFunctionCall              //lua调用

pop eax                              //eax恢复

mov esp,ebp                         //esp还原

pop ebp                              //ebp恢复

 

需注意的是AutoAssemble代码只是一个大致的框架,根据不同的场景需要进行一些调整


4. Execute


效果图:

在Lua Engine处查看控制台输出结果

【游戏漏洞】基于CE的AutoAssemble LUA注入

 

AutoAssemble的全部代码:

{$lua}

openLuaServer("CELUASERVER")

 

function myfunction(param) --create a global function called myfunction

  print("this function got called")

  print("retAddr "..string.format("%x", readInteger(param+0x4)))

  print("param1 "..string.format("%x", readInteger(param+0x8)))

  print("param2 "..string.format("%x", readInteger(param+0xc)))

  print("param3 "..string.format("%x", readInteger(param+0x10)))

end

 

{$asm}

//--------Ctrl+L Call CE lua function 自动生成的----------

loadlibrary(luaclient-i386.dll)

luacall(openLuaServer('CELUASERVER'))

globalalloc(luainit, 128)

globalalloc(LuaFunctionCall, 128)

label(luainit_exit)

globalalloc(luaserverinitialized, 4)

globalalloc(luaservername, 12)

 

luaservername:

db 'CELUASERVER',0

 

luainit:

cmp [luaserverinitialized],0

jne luainit_exit

push luaservername     //初次调用则会加载lua的dll

call CELUA_Initialize //this function is defined in the luaclient dll

mov [luaserverinitialized],eax

luainit_exit:

ret

 

LuaFunctionCall:

push ebp

mov ebp,esp

call luainit

 

push [ebp+c]

push [ebp+8]

call CELUA_ExecuteFunction

pop ebp

ret 8

//luacall call example:

//push integervariableyouwishtopasstolua

//push addresstostringwithfunction  //(The lua function will have access to the variable passed by name "parameter")

//call LuaFunctionCall

//When done EAX will contain the result of the lua function EAX为函数返回值

//--------Ctrl+L Call CE lua function 自动生成的----------

 

//--------Ctrl+I CodeInjection 自动生成的----------

alloc(newmem,2048)

label(returnhere)

label(originalcode)

label(exit)

myluascript:

db 'myfunction(parameter)',0

 

newmem: //this is allocated memory, you have read,write,execute access

//place your code here

push ebp                             //ebp保存

mov ebp,esp                         //ebp初始化

push eax                             //eax环境保存

push ebp                             //此处将ebp作为参数传入

push myluascript                   //函数名称

call LuaFunctionCall              //lua调用

pop eax                              //eax恢复

mov esp,ebp                         //esp还原

pop ebp                              //ebp恢复

 

originalcode:

mov edi,edi

push ebp

mov ebp,esp

 

exit:

jmp returnhere

 

"USER32.dll"+1B870:

jmp newmem

returnhere:

//--------Ctrl+I CodeInjection 自动生成的----------



来源:k3v1n1990s-邮件投稿

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)



回复“游戏名”,有惊喜哦~

点击下方“阅读原文”查看更多

↓↓↓ 

以上是关于游戏漏洞基于CE的AutoAssemble LUA注入的主要内容,如果未能解决你的问题,请参考以下文章

Windows 逆向CE 地址遍历工具 ( CE 结构剖析工具 | 尝试进行瞬移操作 | 尝试查找飞天漏洞 )

基于Lua的游戏服务端框架简介

关于Redis Lua 子系统存在缓冲区错误漏洞和struct 库整数溢出漏洞的安全公告

CE修改Eternium永恒之金LUA篇

CE修改Eternium永恒之金LUA篇

漏洞分析打破基于openresty的WEB安全防护(CVE-2018-9230)