170923 逆向-Reversing.kr(MusicPlayer)

来源:互联网 发布:中金 薪水 知乎 编辑:程序博客网 时间:2024/06/03 14:57

1625-5 王子昂 总结《2017年9月23日》 【连续第356天总结】
A. Reversing.kr-Music Player
B.
ReadMe显示,现有程序只能播放1分钟,我们需要绕过这个显示从而得到flag,程序有多次检测。

从图标和提供的msvbvm60.dll可以知道是VB写的
OD加载发现从ntdll以后F9就直接飞了
用IDA加载也空空如也,只有三个子函数call dll,应该是反调机制?
这里写图片描述

遂打开VB Decompiler,这次清晰地得到了结构和事件
我本来以为程序是OPEN文件以后,点击PLAY时间轴出现0:00/1:00
是直接截取前一分钟的内容加载播放
在PLAY的代码里找了半天,也只发现一个HS_POS.MAX=CINT(600)
前后搜索了一下都没找到相关内容,按地址去OD中下断可以断下来
但是没有找到600

无奈,去翻了下大佬的WriteUp,发现实际上是播放到1:00时弹窗,然后停止
VB弹窗调用的API是rtcMsgBox

在模块中查找未果
估计是因为根目录下提供了msvbvm60.dll,把它改了个名字,Ctrl+G就可以看到加载的dll换成c盘的系统msvbvm60.dll了,这个时候再查看所有调用可以找到rtcMsgBox,不过调用树中仍然是空的

在函数内部下断,运行,断住,ALT+F9返回程序领空才终于找到调用:
这里写图片描述

向上翻几句,发现时间对比和关键跳转:

0040455D    8B85 5CFFFFFF   mov eax,dword ptr ss:[ebp-0xA4]00404563    3D 60EA0000     cmp eax,0xEA60                           ; 时间比较00404568    8945 E8         mov dword ptr ss:[ebp-0x18],eax0040456B    0F8C 8D000000   jl Music_Pl.004045FE                     ; 关键跳

将关键跳改为jmp,运行发现报错:
运行时错误:380

参照WriteUp,断Kernel32.RaiseException(同样调用树无结果,在函数内部下断)
似乎是OD的分析问题,断点位置的代码分析不整齐,导致再运行的时候理应被断住的地方报错了
不过没关系,虽然提示不太一样,在OD中F12暂停下来仍然可以找到调用
理论上来说ALT+K应该就能找到调用,不知道为什么仍然是空的
但是堆栈中还是可以看到,向上翻直到出现用户模块Music_Pl的调用:
这里写图片描述
找到调用后向上看一眼就能发现关键跳转,重新运行jmp掉即可:
这里写图片描述

最后password出现在标题中,完成。

最后复盘的时候想起,这个事件应该来自于计时器
每秒检查一次时间是否超过60000ms
正好在VB Decompiler中有TMR_POS_Timer事件,检查发现:
这里写图片描述
确实反编译出来了,未通过则调用STOP事件
不过之后的弹窗理论上来说应该在goto loc_00404795之前
但是这里的反编译却毫无显示
这里写图片描述
学长说应该是反调或者花指令……之后得研究一下OD的去花插件了(:з」∠)

C. 明日计划
本来以为Reversing.kr的难度不大,就把最前面三个看起来很简单的题跳过了
现在看来还是很有意思的,回头把那三个也做了吧
EasyCrack