首页
社区
课程
招聘
[原创]DOTA传奇中Lua防护部分破解
发表于: 2014-12-17 15:50 17585

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

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

首先赞一下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个人观点,如有不对请大家斧正。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
难道它不是用的最新版lua。。。。
2014-12-17 18:02
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
沙发,学习一下。
2014-12-17 18:02
0
雪    币: 174
活跃值: (260)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
5.1 版本
2014-12-17 18:03
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
终于还是有人放出来了,其实执行的时候完全可以不需要那个表的。。。不明白
2014-12-17 19:11
0
雪    币: 174
活跃值: (260)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
这相当加密壳,执行之前要解密,VM还是LUA原来的,如果能改VM那也出神入化了。
2014-12-17 19:14
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
我的意思是可以改源码直接执行对应的handle, 不要那个表在luac中
2014-12-17 19:22
0
雪    币: 212
活跃值: (116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
以前有个贴子已经解码了所有lua,http://bbs.pediy.com/showthread.php?t=188534&page=3,我按此贴的工具修改解出了所有源代码,商业游戏,还是自娱自乐,不共享了
2014-12-28 13:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我按上面的帖子修改了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


请问我做漏了哪一步?
2015-2-5 07:06
0
游客
登录 | 注册 方可回帖
返回
//