首页
社区
课程
招聘
[原创]2020网鼎杯青龙组_re_signal
发表于: 2020-5-18 18:57 6394

[原创]2020网鼎杯青龙组_re_signal

2020-5-18 18:57
6394

直接IDA分析,将表0x403040拷贝到opcode_table中拷贝了456个字节,将opcode_table传入vm_operad中,并传入一个114,可以发现456时114的4倍,因此114就是opcode以int大小索引的长度

opcode表:[10,4,16,8,3,5,1,4,32,8,5,3,1,3,2,8,11,1,12,8,4,4,1,5,3,8,3,33,1,11,8,11,1,4,9,8,3,32,1,2,81,8,4,36,1,12,8,11,1,5,2,8,2,37,1,2,54,8,4,65,1,2,32,8,5,1,1,5,3,8,2,37,1,4,9,8,3,32,1,2,65,8,12,1,7,34,7,63,7,52,7,50,7,114,7,51,7,24,7,167,7,49,7,241,7,40,7,132,7,193,7,30,7,122]

进入vm_operad分析,可以发现从op表中取值进行不同的操作

这里有几个case还是比较好分析的,case10进入read函数跟进后发现就是输入,且输入的长度必须时15个,最终的值时放在v3中,可以确定v3数组就是保存就是input

case7也比较好分析,即使判断v4[v8]与opcode中的值进行判断,如果不满足则失败,这里通过对v8这个索引进行搜索,发现就这里一处带引用了,因此v4从一开始便要与opcode中的相等。

下面打印出opcode表,这里可以明显的看到从7开始的地方后面就是与v4比对的值,并且刚好15个

opcode表:[10,4,16,8,3,5,1,4,32,8,5,3,1,3,2,8,11,1,12,8,4,4,1,5,3,8,3,33,1,11,8,11,1,4,9,8,3,32,1,2,81,8,4,36,1,12,8,11,1,5,2,8,2,37,1,2,54,8,4,65,1,2,32,8,5,1,1,5,3,8,2,37,1,4,9,8,3,32,1,2,65,8,12,1,7,34,7,63,7,52,7,50,7,114,7,51,7,24,7,167,7,49,7,241,7,40,7,132,7,193,7,30,7,122]

有些操作数后面跟的数据而非运算数值

v4 需要满足:[34,63,52,50,114,51,24,167,49,241,40,132,193,30,122]

下面就有几个问题要分析:

通过分析case 1可以发现v4[v7]=v5,v4的产生是由v5赋值而来,v7初始化为0,其他并无赋值,由此可知,case1控着这v4从开始的生成,可以从op表中发现1就是有15个,该case中的v9,v5则可以判断处分别为:input的运算取值索引,v5运算结果。

接下来就要还原v3的计算流程的,根据opcode分析,这里可以知道case 2,3,4,5都是进行的op_code_table_index + 1取值op_code_table_index += 2迭代,因此这几个操作数后面跟的一定时运算的数值并非操作数


通过分析可以根据比较,写出脚本自动还原,(逆过程+逆运算)


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-5-18 19:03 被Craft_A编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark
2020-5-19 06:50
0
雪    币: 2289
活跃值: (674)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我想请问一下,调整的opcode中3,5和5,1的顺序为什么不能改变呢
2023-7-14 14:26
0
游客
登录 | 注册 方可回帖
返回
//