好了,今天我们来破解这个小程序。
首先,把文件载入PEiD,查看文件的基本信息,看看是否带壳。载入后的信息如下图:
可以看到这个程序使用VB写的,不带壳,好了,可以破解了。
打开这个程序,出现弹窗
随便输入几个字符,点击OK
载入IDA,搜素文本“...Wrong”,得到以下代码:
.text:00402579 test si, si
.text:0040257C mov [ebp-6Ch], eax
.text:0040257F mov [ebp-54h], ecx
.text:00402582 mov [ebp-5Ch], eax
.text:00402585 mov [ebp-44h], ecx
.text:00402588 mov [ebp-4Ch], eax
.text:0040258B jz short loc_4025E5 //若条件成立,跳转到注册失败的代码段,这里可以直接NOP掉,或者改写命令 jnz.....
.text:0040258D push offset aYouGetIt ; "You Get It"
.text:00402592 push offset asc_401B9C ; "\r\n"
.text:00402597 call edi ; __vbaStrCat
.text:00402599 mov edx, eax
.text:0040259B lea ecx, [ebp-18h]
.text:0040259E call ebx ; __vbaStrMove
.text:004025A0 push eax
.text:004025A1 push offset aKeygenItNow ; "KeyGen It Now"
.text:004025A6 call edi ; __vbaStrCat
.text:004025A8 lea ecx, [ebp-6Ch]
.text:004025AB mov [ebp-34h], eax
.text:004025AE lea edx, [ebp-5Ch]
.text:004025B1 push ecx
.text:004025B2 lea eax, [ebp-4Ch]
.text:004025B5 push edx
.text:004025B6 push eax
.text:004025B7 lea ecx, [ebp-3Ch]
.text:004025BA push 0
.text:004025BC push ecx
.text:004025BD mov dword ptr [ebp-3Ch], 8
.text:004025C4 call ds:rtcMsgBox
.text:004025CA lea ecx, [ebp-18h]
.text:004025CD call ds:__vbaFreeStr
.text:004025D3 lea edx, [ebp-6Ch]
.text:004025D6 lea eax, [ebp-5Ch]
.text:004025D9 push edx
.text:004025DA lea ecx, [ebp-4Ch]
.text:004025DD push eax
.text:004025DE lea edx, [ebp-3Ch]
.text:004025E1 push ecx
.text:004025E2 push edx
.text:004025E3 jmp short loc_40263B
.text:004025E5 ; ---------------------------------------------------------------------------
.text:004025E5
.text:004025E5 loc_4025E5: ; CODE XREF: .text:0040258Bj
.text:004025E5 push offset aYouGetWrong ; "You Get Wrong"
.text:004025EA push offset asc_401B9C ; "\r\n"
.text:004025EF call edi ; __vbaStrCat
.text:004025F1 mov edx, eax
.text:004025F3 lea ecx, [ebp-18h]
.text:004025F6 call ebx ; __vbaStrMove
.text:004025F8 push eax
.text:004025F9 push offset aTryAgain ; "Try Again"
.text:004025FE call edi ; __vbaStrCat
直接把文件载入UE,找到.text:0040258B jz short loc_4025E5 代码所在位置,直接改成90 90 或者改成jnz的十六进制代码 即可爆破。
破解成功。
还有其他的方法:
将程序载入OD,找到上述代码处。
1.继续向上查看发现 _vbaStrCmp调用,尝试将esi变为0,过关成功!
.text:00402533 call ds:__vbaStrCmp
.text:00402539 mov esi, eax
.text:0040253B lea edx, [ebp-20h]
.text:0040253E neg esi
.text:00402540 lea eax, [ebp-18h]
2.在弹出框位置下断点,然后直接从堆栈中得到真码和假码,重新输入,过关!
3.从验证入口点直接单步,完成注册机,过关!(此过程得出的结果为"AKA-"+itoa(17CFBH*strlen(input)+input[0]))。
我是在一个大牛的文章里边看到的这个方法,就借鉴过来了。