一、过程1、对象:客户端(未加壳)2、分析和还原:2.1、lua保存在exe中,通过断lua_load相关的函数,dump出来脚本。signature一眼就知道是lua二进制格式的替换"\1bLua",如下:2.2 、修改文件头的signature后,使用lua的反编译工具反编译会出错,经过排错定位,发现是lua引擎的loadfunction函数被修改了。lua的二进制文件解析,是按照流的方式来的,从流中读取字节解析。正常的读取顺序是psource、linedefined、lastlinedefined、numparams、is_vararg、maxstacksize,而程序中的读取顺序是依次是psource、linedefined、numparams、lastlinedefined、maxstacksize、is_vararg。正常的顺序:程序修改后的顺序:所以,修改反编译引擎的loadfunction代码就能够正确解析。2.3 继续进行反编译尝试,还是报错。怀疑是lua的opcode定义顺序被修改(十年前的套路,懂得都懂)。人肉还原了字节码(熬夜的体力活)。lua5.4有83个opcode,定义如下:人肉识别后的顺序:识别字节码就是通过ida中交叉引用来实现。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
好人一生平安啊
ninebell 古语有云,闷头发大财。 说出来就会招人嫉妒,从而惹出祸来。。。