首页
社区
课程
招聘
[求助]某一手游luac的解密,还原opcode的问题。
发表于: 2017-9-7 16:55 14788

[求助]某一手游luac的解密,还原opcode的问题。

2017-9-7 16:55
14788
现在很多手游在dump下来都是luac的文件。用luadec.exe都是直接报错的。
网上查了很多资料,说是编译的时候作者改过了opcode顺序,要跟踪还原回来opcode,然后重新编译luadec才能反编译出源码。
那么问题来了。
怎么还原回opcode呢。
查看了lua的源码,lua5.1一共有38条lua的虚拟机的指令。
用IDA怎么跟踪呢?
菜鸟我折腾了好几天,求大神们帮帮忙。
以下是我分析出来的东西。跟到了一个opcode影射表。可是看半天不知道这表有什么用呢



请问地址:76AF7346里面的数据是不是opmodes呢。刚好是38条。如果是的话,怎么还原opcode的顺序呢 先谢谢各位了

文件我放到附件里面,谢谢各位。




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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 272
活跃值: (3258)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
等大神指导方法,,现在我只是找个没有opcode乱序的游戏再对比乱序的找到对应的映射关系
2017-9-7 17:12
0
雪    币: 127
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
gtict 等大神指导方法,,现在我只是找个没有opcode乱序的游戏再对比乱序的找到对应的映射关系
请问怎么找呢,能说一下思路吗
2017-9-7 17:15
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
http://bbs.pediy.com/thread-216969.htm
看下这个。
2017-9-7 17:18
0
雪    币: 127
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,看过了,还是不会呢
2017-9-7 17:31
0
雪    币: 516
活跃值: (797)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
6
首先,你要明白原生lua中所有opcode是什么意思,代码是怎么实现的。当你了解了opcode的实现时,再看梦幻opcode的实现代码(ida反编译so,定位到opcode的代码),然后分析并推倒出原生lua对应的opcode。当然有一点点小技巧,就是如果opmode对应,那么opcode也对应,具体看我写的那篇文章。以上,希望能够帮到你。
2017-9-9 13:31
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
7
还原过某精灵的lua  opcode,扔ida里找最长的switch就可以了。入口的话,hook  memcpy找到加载的地方,然后一路撸。
2017-9-9 13:53
0
雪    币: 127
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
littleNA 首先,你要明白原生lua中所有opcode是什么意思,代码是怎么实现的。当你了解了opcode的实现时,再看梦幻opcode的实现代码(ida反编译so,定位到opcode的代码),然后分析并推倒出原 ...
谢谢,感谢你的回复,我分析的这个so  按你精华贴的方法找到opmodes  的地方,对比了opmodes的数据,和没修改过的.so是一样的。所以很迷惘。可以帮我看一下吗?.so我上传到附件里面。
2017-9-9 17:07
0
雪    币: 516
活跃值: (797)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
9
 我那个方法不一定具有普遍的通用性,每个游戏都可能有不同的修改方法,原方法只能作为参考和学习的意义。
 下面简单看了下你给的so文件,给你分析下最简单的 add、sub、mul、div等opcode。

下面是add和sub, 特征是add和sub两个函数

下面是mod,特征是div、floor、mul、sub等函数


 其他的opcode得你自己去看源码,找特征或者找结构。

 从上面的图片可以看出,该游戏很有可能是选择2个opcode对应1个原opcode。(修改lua反编译工具luadec时需要注意)

 以上,希望对你有帮助。
2017-9-10 14:19
0
雪    币: 127
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢,明白了。
2017-9-11 12:10
0
雪    币: 102
活跃值: (2070)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
littleNA  我那个方法不一定具有普遍的通用性,每个游戏都可能有不同的修改方法,原方法只能作为参考和学习的意义。 下面简单看了下你给的so文件,给你分析下最简单的 add、su ...
他这个so我看了一下,有点奇怪,OpCode和luaP_opmodes都能找到,而且顺序正常的,没改过,但是在这个so的switch处理里却像是改动过,请问这是什么回事?
2017-9-17 23:29
0
雪    币: 516
活跃值: (797)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
12
koflfy 他这个so我看了一下,有点奇怪,OpCode和luaP_opmodes都能找到,而且顺序正常的,没改过,但是在这个so的switch处理里却像是改动过,请问这是什么回事?
当时我看的时候也有这个疑问,估计是不修改luaP_opmodes对解析没有什么影响吧(引用的地方不多),或者程序另外保存了一份,具体没有分析了。
2017-9-20 10:50
0
雪    币: 0
活跃值: (136)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
malokch 还原过某精灵的lua opcode,扔ida里找最长的switch就可以了。入口的话,hook memcpy找到加载的地方,然后一路撸。
大佬,有文章吗?想学习一下
2022-1-12 18:18
0
游客
登录 | 注册 方可回帖
返回
//