译者:�d趣使然的小胃
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
一、前言
如果你在游戏行业摸爬滚打已久,你肯定听说过Lua这个名词。作为一门强大的脚本语言,Lua已经嵌入到数千种视频游戏中,提供了各种API接口,以便工程人员在游戏客户端以及服务器上添加各种功能。
我会不断强调一个观点:为了让攻击技术更加便捷、更加可靠以及更加高效,最好的方法就是攻击游戏引擎,而不是攻击游戏本身。Hook一大堆函数、定位一大堆地址本身是个很好的办法,然而这意味着只要游戏更新版本,你就需要更新你所使用的偏移量。相反,如果你hook了游戏使用的那些库,这些问题就会迎刃而解。
Lua的普及性使得它成为hook的理想目标。此外,由于游戏开发者使用Lua来添加内容及功能,因此游戏所包含的Lua环境就成为拥有大量功能的强大主机环境。
出于性能要求,使用LuaJIT来替代vanilla Lua是非常常见的场景。因此,在本文中我会探讨如何攻击LuaJIT。只要稍作修改,这种攻击技术也可以应用于vanilla Lua。
二、注入Lua代码
为了创建Lua环境,我们需要调用luaL_newstate返回一个lua_State对象,然后将其作为参数,调用luaL_openlibs即可。有人可能想通过劫持luaL_newstate的执行来注入代码,然而这种方法并不能奏效。因为此时程序库还没有加载,因此加载脚本不会起到任何作用。然而,我们可以劫持luaopen_jit函数,这个函数正是打开程序库时所调用的最后一个函数(参考此处)。
动态链接LuaJIT时,我们可以查找导出表来定位这个函数:
静态链接LuaJIT时,我们可以使用一些特征字符串来进行定位:
一旦找到这个函数,hook就不是件难事。然而,在hook之前,我们需要找到两个函数:luaL_loadfilex这个函数用来加载我们的Lua脚本,lua_pcall这个函数用来执行Lua脚本。动态链接时,我们可以在导出表中找到这两个函数;静态链接时,我们可以使用"=stdin"字符串来定位第一个函数(参考此处):
定位第二个函数需要多费点功夫,因为该函数没有关联某个特征字符串。然而幸运的是,该函数在内部调用时(参考此处),位于"=(debug command)"之后:
注意,上图中我们还能观察到luaL_loadbuffer函数的地址,牢记这一点,回头要用到。
识别出这些地址后,我们就可以开始写hook代码了:
typedef void* lua_State;
typedef int (*_luaL_loadfilex)(lua_State *L, const char *filename, const char *mode);
_luaL_loadfilex luaL_loadfilex;
typedef int (*_luaopen_jit)(lua_State *L);
_luaopen_jit luaopen_jit_original;
typedef int (*_lua_pcall)(lua_State *L, int nargs, int nresults, int errfunc);
_lua_pcall lua_pcall;
int luaopen_jit_hook(lua_State *L)
{
int ret_val = luaopen_jit_original(L);
luaL_loadfilex(L, "C: est.lua", NULL) || lua_pcall(L, 0, -1, 0);
return ret_val;
}
BOOL APIENTRY DllMain(HMODULE mod, DWORD reason, LPVOID res)
{
switch (reason) {
case DLL_PROCESS_ATTACH: {
luaL_loadfilex = (_luaL_loadfilex)LOADFILEEX_ADDR;
lua_pcall = (_lua_pcall)PCALL_ADDR;
HookCode(OPENJIT_ADDR, luaopen_jit_hook, (void**)&luaopen_jit_original);
break;
&nbs庆国庆迎中秋|胜"券"在握,好课限免! 阅读原文»一年一度祖国麻麻的生日到了,普天同庆,为了表达同胞之间深深的手足之情,牛妹决定,给安全牛课堂小伙伴儿们送大大大福利!!!
9月29日至10月8日,安全牛课堂两大福利给祖国麻麻庆生!前方高能,请留神!
活动一:200元无门槛优惠券大放送!
(课程、班级、Security+直播培训及会员均可使用)活动二:8门精品课程限时免费!
国庆课程限免名单如下:
1. SQLMAP实战
课程链接:
https://edu.aqniu.com/course/383
2. APPSCAN
课程链接:
https://edu.aqniu.com/course/666
3. TCPDUMP
课程链接:
https://edu.aqniu.com/course/737
4. OWASP_ZAP
课程链接:
https://edu.aqniu.com/course/733
5. BURP SUITE
课程链接:
https://edu.aqniu.com/course/732
6. AWVS
课程链接:
https://edu.aqniu.com/course/667
没有评论:
发表评论