VoiceMeeter的逆向与破解
前言
如果您看到了这,您需要知道的:
我不是专业的逆向人员,一定会有错误,遗漏的地方,您可以联系我指正或交流
但请注意,不表明错误地方就对我文章指点不足的,我不接受
其次,这不是教程,您需要有一定的逆向基础
起因
疫情期间,由于每天上课摸鱼,大部分时间都和朋友在语音
我便需要一些整活神器,来在与语音里爆破我的朋友
我想起几年前发现的神器——VoiceMeter
这玩意太强大了,除了基本的混响,可视化地将音频通道显示出来,简直不要太方便
后来慢慢的我发现VoiceMeter Banana
的功能不够用了
但是Potato
是要收费的
虽然不贵,但是在国内支付VISA
卡不是一般的麻烦
更何况我自己连VISA
都没。。。
那没办法,我就看看我的三脚猫逆向能不能搞定他吧
分析
以下基于3.0.2.2版本
Google出来的教程都是使用的OD
我懒,反正静态,IDA不香嘛
那就开干吧
先看看注册界面
uhmmm…有个Activate
直接64位IDA拖进来,分析一通
一上来就先看看Strings好了
Activate…嗯?
直接跳到注册成功字符串的调用

有点明显,甚至不用看伪代码
那就直接把jnz改成jz:
00103A3 75 19 ===> 00103A3 74 19
齐活了?
吗?
几天后…
草,这玩意爆激活了,除了激活界面乱输能提示成功以外,别的地方和没激活一点区别也没有
我看到似乎网上激活后Challenge的字符会变绿,或许那就是关键之处?
看了下,变绿后Activate按钮会变成绿色的ACTIVATED
搜下ACTIVATED。。
寄!搜不到
那算了,让我们回到伪代码
我们发现这里与三个函数有关,并且后面的Email和Serial似乎都告诉着我们这俩函数的作用
唯独有一个sub_14000F530
进入这个函数,我们发现他的返回值不是0i64就是1i64
鲁迅先生说过:逆向的精髓在于大胆尝试
我们大胆猜测,返回1i64就代表激活成功
返回1i64的条件是这个if中qword_140135950和sub_14000F2D0(a3)这俩玩意同时等于1
进入sub_14000F2D0。。
妈的 又臭又长 不看了 直接大胆改了他
回到汇编,其实跳转的条件就是eax寄存器为1嘛
那就直接让eax寄存器变成1吧(
cmp eax, 1 ===> mov eax, 1
也就是:
00EB1E 83 F8 01 ===> 00EB1E B8 01 00 00 00
齐活了。。吧
先这样用着,以后有问题再更新