首页
论坛
课程
招聘
[原创]DOTA传奇中Lua防护部分破解
2014-12-17 15:50 14962

[原创]DOTA传奇中Lua防护部分破解

2014-12-17 15:50
14962
一直有人问这个,统一在这里发一下,原理很简单,详情看下文:

首先赞一下DOTA传奇的攻城尸,还是很有“气节”的,知道如何保护自己,不像有些,被拔了衣服就干。。。(哈哈,开个玩笑)

kanxue上有篇帖子讨论过*.abc文件的解密,这里不再赘述。
如果你只是想拿到lua源码,这里告诉你一个捷径:hook luaL_laodbuffer。

得到*.abc的原文后,其实是luac编译后的bin文件。
这个时候你用luadec神马的反编译是无法得到源代码的,其结果也是直接报错。

这就是DOTA传奇在Lua层做的保护。
破掉保护也比较容易,入手点就从luaL_loadbuffer开始,发现是bin文件就直接走undump,内部是LoadFunction等,Load期间对opcode进行解析。
DOTA传奇在opcode解析的时候做了一个映射,映射表如下:


所以推断在luac的时候,也有一份映射表。

拿着表重新编译一份luadec,就可以得到DOTA传奇LUA部分的完整源代码。

写到这应该非常清楚了,以上仅LZ个人观点,如有不对请大家斧正。

【公告】【iPhone 13、ipad、iWatch】11月15日中午12:00,看雪·众安 2021 KCTF秋季赛 正式开赛【攻击篇】!!!文末有惊喜~

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (8)
雪    币: 272
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AASSMM 活跃值 2014-12-17 18:02
2
0
难道它不是用的最新版lua。。。。
雪    币: 188
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JackJoker 活跃值 2014-12-17 18:02
3
0
沙发,学习一下。
雪    币: 170
活跃值: 活跃值 (55)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
rainyx 活跃值 1 2014-12-17 18:03
4
0
5.1 版本
雪    币: 203
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
正happy 活跃值 1 2014-12-17 19:11
5
0
终于还是有人放出来了,其实执行的时候完全可以不需要那个表的。。。不明白
雪    币: 170
活跃值: 活跃值 (55)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
rainyx 活跃值 1 2014-12-17 19:14
6
0
这相当加密壳,执行之前要解密,VM还是LUA原来的,如果能改VM那也出神入化了。
雪    币: 203
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
正happy 活跃值 1 2014-12-17 19:22
7
0
我的意思是可以改源码直接执行对应的handle, 不要那个表在luac中
雪    币: 204
活跃值: 活跃值 (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xtor 活跃值 2014-12-28 13:20
8
0
以前有个贴子已经解码了所有lua,http://bbs.pediy.com/showthread.php?t=188534&page=3,我按此贴的工具修改解出了所有源代码,商业游戏,还是自娱自乐,不共享了
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
seadog 活跃值 2015-2-5 07:06
9
0
我按上面的帖子修改了luadec
luadec/lua-5.1/src/lopcodes.h
const static int dectab[]={
0x0C, 0x01, 0x06, 0x01, 0x0C, 0x17, 0x14, 0x15, 0x0B, 0x21, 0x13, 0x19, 0x0D, 0x05, 0x00, 0x1F,
...
}
#define GET_OPCODE(i) \
(cast(OpCode, ((dectab[i%0x40]|(i&0xc0))>>POS_OP) & MASK1(SIZE_OP,0)))


修改之后的luadec还是报错
bad code in precompiled chunk


请问我做漏了哪一步?
游客
登录 | 注册 方可回帖
返回