每隔一段时间不破一两个软件玩玩心理就很不舒服...,最近因为频繁和音乐打交道,无意中发现了款电子琴软件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显示的内容,破完了,继续研究下一个穿山甲的壳-_-#