Virtual Piano破解手记

         每隔一段时间不破一两个软件玩玩心理就很不舒服...,最近因为频繁和音乐打交道,无意中发现了款电子琴软件Virtual Piano,本来想做KeyGen的,结果修改程序的乐趣盖过了追寻算法,分享几点破解+DIY心得^_^

         软件: Virtual Piano

         版本: 最新,反正天空下的

         保护方式:验证码,网络认证,重启效验

         目的: 研究而已,不得用于商业用途

         PEID查壳,ASPACK,手脱,不多说,脱完了不修IAT也能跑,一看就象是VB写的-_-#! 依据个人习惯先找字符参考,发现了有Trail提示和Register Success提示,先下个断点先,一跑,在Trail信息那停了下来,找不到从哪跳来的,也没在附近发现注册成功的标记,晕........

        此路不通,在看看API,VB想都不用想就下__vbastrcmp,在运行,在注册那输入 name:Red_angelX;code:123之后立刻断了下来^_^在4f092a处,eax的值就是输入的名字,往下一些判断大概是名字是否为空,不为空就继续往下走,两个跳转之后就是注册码比较的地方了:

      

004F0A8F    >   C785 E0FEFFFF > mov     dword ptr [ebp- 120 ] ,   0
004F0A99   
>   8B4D BC       mov     ecx ,  dword ptr [ebp- 48 ]
004F0A9C   
.    51             push    ecx
004F0A9D   
.   8B55 BC       mov     edx ,  dword ptr [ebp- 44 ]
004F0AA0   
.    52             push    edx
004F0AA1   
.   FF15 E0104000  call     dword ptr [ < &msvbvm60 . __vbaStrCm >;   msvbvm60 . __vbaStrCmp

           两个mov,第一个ss:[ebp-48]是伪码,第二个ss:[ebp-44]是真码,在哪里算出来的?没去找,因为后面还很多东西要分析...

         

004F0AA1    .   FF15 E0104000  call     dword ptr [ < &msvbvm60 . __vbaStrCm >;   msvbvm60 . __vbaStrCmp
004F0AA7   
.   F7D8          neg     eax
004F0AA9   
.   1BC0          sbb     eax ,  eax
004F0AAB   
.    40             inc     eax
004F0AAC   
.   F7D8          neg     eax
004F0AAE   
.    66 : 8985  00FFF > mov     word ptr [ebp- 100 ] ,  ax
004F0AB5   
.   8D4D B8       lea     ecx ,  dword ptr [ebp- 48 ]
004F0AB8   
.   FF15 3C124000  call     dword ptr [ < &msvbvm60 . __vbaFreeS >;   msvbvm60 . __vbaFreeStr
004F0ABE   
.   8D4D A8       lea     ecx ,  dword ptr [ebp- 58 ]
004F0AC1   
.   FF15  40124000   call     dword ptr [ < &msvbvm60 . __vbaFreeO >;   msvbvm60 . __vbaFreeObj
004F0AC7   
.   0FBF85 00FFFF > movsx   eax ,  word ptr [ebp- 100 ]
004F0ACE   
.   85C0          test    eax ,  eax
004F0AD0      0F84 7A0A0000 je      004F1550                         
;   不跳

          后面就是比较了  最后一个跳转就是关键跳,爆破点可以在这,不过我是修改上面的ebp-48为ebp-44嘻嘻:)

          按F9,本以为会弹出注册成功,结果却弹出一个网络验证的东西来了,寒,本地完了还有网络啊...(知道为什么我只爆破不分析算法了吧),继续根,程序把你输入的名字和验证码发到指定网站进行验证,本来想修改返回值来达到欺骗目的,结果发现网站什么也不返回-_-# 真狡猾,往下看,一,注册成功不就在后面么,注册成功前面有个跳转,改?NO,改了还是有网络验证,根据反汇编的提示人家可是有IP记录的哦,我直接在弹出网络认证窗口那把流程给跳到注册成功的提示,嘻嘻,把网络验证这个鸡肋去掉了,高兴一把,一跑软件,还是弹出要注册,看来重启效验没通过

         继续找API,找到一个rtcGetSetting,猜测是读配置文件,下断,跟踪,发现程序再注册成功后会把注册信息存在注册表里面进行效验,地址是SoftW/VB and vba pro/VPIANO3/reg下,仔细一看,里面的内容是自己输入的名字和伪码,-_-#,既然存再这,肯定还要来这取,于是找rtcSaveSetting下断点,继续跟,跟啊跟,发现下面内容

 

004F0F3A    >   C785 D4FEFFFF > mov     dword ptr [ebp-12C] ,   0
004F0F44   
>   8B45 BC       mov     eax ,  dword ptr [ebp-4C]
004F0F47   
.    50             push    eax
004F0F48   
.    68   58E44000    push     0040E458                           ;   UNICODE  " Code "
004F0F4D   
.    68  4CE44000   push    0040E44C                          ;   UNICODE  " REG "
004F0F52   
.    68  30414F00   push    004F4130
004F0F57   
.   8D4D B8       lea     ecx ,  dword ptr [ebp- 48 ]
004F0F5A   
.    51             push    ecx

       其中ebp-4c就是存的假码,难怪,把它改成ebp-44嘻嘻,保存,再跑,程序就自动注册自动保存了.

       到这里本来也就破完了,不过我还没玩过,虽然是自动注册,我还是想让它自己弹注册码,于是找了一个地方 大概是4F0E65的地方,让它跳到一个空白的地方,然后再那修改

 

004F3FBF      FF75 BC       push    dword ptr [ebp- 44 ]
004F3FC2      8F85 58FFFFFF pop     dword ptr [ebp-A8]
004F3FC8    ^ E9 99CEFFFF   jmp     004F0E66

      把真码压进去,赋给ebp-a8也就是msgbox显示的内容,破完了,继续研究下一个穿山甲的壳-_-#

你可能感兴趣的:(算法,网络,api,vb,VBA,破解)