UNCTF- 2019 EasyVm
UNCTF- 2019 EasyVm
分析
放入IDA中分析
先看两个参数
2080
20A0
然后进去关键函数
发现这里是许多的a1的偏移,然后这里有一个10A8可以跟进去,注意这里的存储类型,后面分析有用
可以看到这里调用了很多的函数,然后进去第一个函数看一下
这里能够看到是通过switch和case语句进行很多的不同的偏移,这里并不知道他运行的顺序,需要虚拟机远程调试
动调
我的断点下在了这里
这里动态调试记得输入32位,防止最外面的if语句判断错误
然后进去看一下基本的数据存放
a1存放的东西:
看到这里,它的存储是4010A8,然后a1+8就是4010B0。然后看到下面
知道A0对应的是这里,再结合外面能推测出4010B0应该是地址
这里10B01118能与A0AF进行对应
从中知道(a1+24)调用的是20A0,(a1+32)调用的是我们所输入的东西,a2调用的是2080
也就是说a2+9是用来传输给switch进行判断的
然后通过不断的调试得出顺序是:A9,A3,A5,A6,A4,AB,A7,AE
接着找对应函数在干嘛
A9
这里并不知道a1+16和a1+18于是从10B0开始看一下都是干嘛的
10B0:
进行自增,然后根据上面byte的数据类型能推测a1+16应该是一个寄存器,所以这个我设为a16寄存器自增
然后往后面看能知道有a17和a18总共三个寄存器
所以A9为a16 = input[a18]
A3
a16 -= a18
A5
a17 = a16 ^ a17
A6
a16 = 0XCD
A4
a16 = a16 ^ a17
AB
A7
a17 = a16
AE
脚本
接下来只需要逆向这些算法就行了
/* |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逆向上分之路!
评论