【软件名称】我爱我车管理软件V1.3
【下载地址】http://www.zssoft.com/
【应用平台】Windows 98/ME/NT/2000/XP/2003
【软件大小】796K
【软件限制】未注册版本限制只能记录保养维修记录30条、加油记录30条。
【破解声明】菜鸟初学,破解只是感兴趣,无其它目的。失误之处敬请诸位大侠赐教!
【破解工具】OllDbg1.10,PEid0.93,stripper 2.01
【软件简介】全程跟踪记录您爱车的保养、维修、贷款、保险、油耗及其它日常费用记录。全新XP界面,傻瓜式操作!
【感    谢】首先感谢前辈们的教程和工具,才有这只刚出笼的菜鸟。再次感谢霏凡论坛的林逸凡、深遂,要不是他们的帮忙就没有我在看雪的ID。最后,感谢我的亲友对我的支持,特别是三懂表哥。谨以此文献给大家,以表谢意。
========================================================================================
【分析过程】
本文如有错误之处还请指出!

安装后用PEid0.93扫了一下主程序My2Car.exe,发现是ASPack 2.11 -> Alexey Solodovnikov的壳。我等菜鸟还未到手动脱壳的境界,
只好拿出仓底的stripper 2.01把My2Car.exe给做了。出来后扫了一下程序,是Microsoft Visual C++ 6.0写的。用算法扫描居然有blowfish算法在其中,怕怕。。。。。。也得上啊。

运行程序点注册,我的机器码为1111176897,不填注册名和注册码点注册,弹出"非法注册码,请支持正版软件,谢谢!".

HOHO,用OD载入,搜一下ASCII字符再说,进去后搜‘注册’字样,发现有"您的软件试用已经结束,请注册后使用!"等,先不管,我们要先来到下面这个地方
00439E27   .  6A 30         PUSH 30
00439E29   .  6A 00         PUSH 0
00439E2B   .  68 40814C00   PUSH _My2Car.004C8140                    ;  非法注册码,请支持正版软件,谢谢!
00439E30   .  8BCE          MOV ECX,ESI
00439E32   .  E8 FC250500   CALL _My2Car.0048C433
00439E37   .  8D4C24 04     LEA ECX,DWORD PTR SS:[ESP+4]
00439E3B   .  C74424 10 FFF>MOV DWORD PTR SS:[ESP+10],-1
00439E43   .  E8 13470500   CALL _My2Car.0048E55B
00439E48   .  5E            POP ESI
00439E49   .  8B4C24 04     MOV ECX,DWORD PTR SS:[ESP+4]
00439E4D   .  64:890D 00000>MOV DWORD PTR FS:[0],ECX
00439E54   .  83C4 10       ADD ESP,10
00439E57   .  C3            RETN

从这儿往上看,有以下代码:
00439DA0   .  6A FF         PUSH -1
00439DA2   .  68 28524A00   PUSH _My2Car.004A5228                    ;  SE handler installation
00439DA7   .  64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00439DAD   .  50            PUSH EAX
00439DAE   .  64:8925 00000>MOV DWORD PTR FS:[0],ESP
00439DB5   .  51            PUSH ECX
00439DB6   .  56            PUSH ESI
00439DB7   .  8BF1          MOV ESI,ECX
00439DB9   .  6A 01         PUSH 1
00439DBB   .  E8 28320500   CALL _My2Car.0048CFE8                    ;  读取注册名及注册码
00439DC0   .  8B86 98020000 MOV EAX,DWORD PTR DS:[ESI+298]           ;  注册名入EAX
00439DC6   .  8B48 F8       MOV ECX,DWORD PTR DS:[EAX-8]
00439DC9   .  85C9          TEST ECX,ECX
00439DCB   .  0F84 1A010000 JE _My2Car.00439EEB                      ;  注册名为空就跳死
00439DD1   .  8B86 9C020000 MOV EAX,DWORD PTR DS:[ESI+29C]           ;  注册码入EAX
00439DD7   .  8B48 F8       MOV ECX,DWORD PTR DS:[EAX-8]
00439DDA   .  85C9          TEST ECX,ECX
00439DDC   .  0F84 09010000 JE _My2Car.00439EEB                      ;  注册码为空就跳死
00439DE2   .  50            PUSH EAX
00439DE3   .  E8 79CE0300   CALL _My2Car.00476C61                    ;  注册码转为16进制入EAX中
00439DE8   .  8B0D 0C924C00 MOV ECX,DWORD PTR DS:[4C920C]            ;  _My2Car.004C9220
00439DEE   .  35 5F123001   XOR EAX,130125F                          ;  关键数,注册机的核心 ^!^
00439DF3   .  894C24 08     MOV DWORD PTR SS:[ESP+8],ECX             
00439DF7   .  50            PUSH EAX
00439DF8   .  8D5424 0C     LEA EDX,DWORD PTR SS:[ESP+C]
00439DFC   .  68 C07C4C00   PUSH _My2Car.004C7CC0                    ;  ASCII "%010d"
00439E01   .  52            PUSH EDX
00439E02   .  C74424 20 000>MOV DWORD PTR SS:[ESP+20],0
00439E0A   .  E8 D6E60400   CALL _My2Car.004884E5                    ;  注册码转换关键处  
00439E0F   .  8B86 94020000 MOV EAX,DWORD PTR DS:[ESI+294]           ; |                                                        
00439E15   .  50            PUSH EAX                                 ; |Arg2 = 00B87758 ASCII "1111176897"                      
00439E16   .  8B4424 18     MOV EAX,DWORD PTR SS:[ESP+18]            ; |                                                       
00439E1A   .  50            PUSH EAX                                 ; |Arg1 = 00B87A28 ASCII "0890171052"                       
00439E1B   .  E8 CFCC0300   CALL _My2Car.00476AEF                    ; \_My2Car.00476AEF  关键CALL,经典啊                     
00439E20   .  83C4 18       ADD ESP,18                               ;                                                         
00439E23   .  85C0          TEST EAX,EAX                             ;                                                         
00439E25   .  74 31         JE SHORT _My2Car.00439E58                ;  关键跳转,不跳就OVER啦                                 
                                                                                                                                

在00439E1B设断,F9运行。注册名:pentacle 注册码:876543219 点保存后来来00439E1B,F7跟进去。                                                                                                                                  

004884E5  /$  8B4C24 04     MOV ECX,DWORD PTR SS:[ESP+4]             
004884E9  |.  8D4424 0C     LEA EAX,DWORD PTR SS:[ESP+C]             
004884ED  |.  50            PUSH EAX                                 ; /Arg2                         
004884EE  |.  FF7424 0C     PUSH DWORD PTR SS:[ESP+C]                ; |Arg1                  
004884F2  |.  E8 E6FCFFFF   CALL _My2Car.004881DD                    ; \_My2Car.004881DD                                      
004884F7  \.  C3            RETN                                                                    
                                                                              

F7再跟进CALL  _My2Car.004881DD                                                                                           



004881DD  /$  83EC 10       SUB ESP,10
004881E0  |.  836424 00 00  AND DWORD PTR SS:[ESP],0
004881E5  |.  55            PUSH EBP
004881E6  |.  8B6C24 1C     MOV EBP,DWORD PTR SS:[ESP+1C]
。。。。。。。。中间代码略。。。。。。。。。。。。                   ;  这个程序中说有blowfish算法把我都吓住了。但注册模块中却没有

//EBP+B8   0012F07C     |003D03B2  UNICODE "rols,processorArchitecture="x86",publicKeyToken="6595b64144ccf1df",type="win32",version="6.0.2600.21"
//这是我后来跟踪重启验证时发现的,但我功力有限,不清楚,还望高手指点一二。

004884CB  |.  E8 C511FFFF   CALL _My2Car.00479695                    ;  核心代码,作用是将机器码和注册码转换为ASCII值
004884D0  |.  83C4 0C       ADD ESP,0C
004884D3  |.  8BCF          MOV ECX,EDI
004884D5  |.  6A FF         PUSH -1
004884D7  |.  E8 FE640000   CALL _My2Car.0048E9DA                    ;  将ASCII值放入ECX中,我的ASCII "0890171052",这个值与机器码相等就注册成功
004884DC  |.  5F            POP EDI                                  ;  0012F4B0
004884DD  |.  5E            POP ESI
004884DE  |.  5D            POP EBP
004884DF  |.  83C4 10       ADD ESP,10
004884E2  \.  C2 0800       RETN 8

跟踪到此告一段落,回到最初。从上面的信息我们可以知道这个是以机器码为注册依据的,并且最后的对比也是同机器码对比。
我就在想这个机器码是通过什么转换过来的。
于是再次跟踪注册码,发现注册码是由423B36C1这个值转换过来的。嘿嘿,这么眼熟?原来"[/color]1111176897[color=#FF00FF]"转为十六进制就是423B36C1,还有423B-36C1我C盘的序列号啊。
HOHO。原来这个硬件代码就是C盘序列号啊。再仔细读了一下代码,发现注册名不参与注册码的计算。输入的注册码经过转换变十六进制,再与130125F进行一次异或运算。
只要这个值等于423B36C1就注册成功啦。不再说了,注册机已经出来啦。


附上VBS注册机源码:
' KeyGen For 我爱我车管理软件V1.3 
' 软件:我爱我车管理软件V1.3
' 下载地址:http://www.zssoft.com/
' 本程序在WINXP SP2下测试通过,此注册在WIN2000下测试有效。估计98也应该不会有问题的
' 如要转载,请保持信息的完整
' 这是作者的第一个注册机,如有BUG,请告之.
' 如果你修正了此程序的不足之处,请寄一份给我.
' pentaNC 制作 
' 2005.05.03
'
L_Welcome_MsgBox_Message_Text = "本程序只可研究学习,任何人不得用于商业目标。"+Chr(10)+"作者对使用本程序而导致的一切后果,不承担任何责任" +Chr(10)+"    "+Chr(10)+"pentaNC 2005.05.03"
L_Welcome_MsgBox_Title_Text = "KeyGen For 我爱我车管理软件V1.3 " 
Call Welcome() 
Dim RegVol ,RegCode
RegVol = InputBox("KeyGen For 我爱我车管理软件V1.3"+Chr(10)+"请在下面方框输入机器码:"+"    "+Chr(10)+"pentaNC 于2005.05.03","KeyGen For 我爱我车管理软件V1.3") 
RegCode = RegVol Xor 19927647
MsgBox ("你的注册码:" & RegCode)
MsgBox ("再次确认注册码:" & RegCode)
MsgBox ("欢迎光临看雪论坛和霏凡论坛"+Chr(10)+"    "+Chr(10)+"看雪论坛  http://bbs.pediy.com"+Chr(10)+"   "+Chr(10)+"霏凡论坛   http://bbs.crsky.com"+Chr(10)+"   "+Chr(10)+"欢迎使用由pentaNC制作的注册机")
'
Sub Welcome() 
Dim intDoIt 
intDoIt = MsgBox(L_Welcome_MsgBox_Message_Text, _ 
vbOKCancel + vbInformation, _ 
L_Welcome_MsgBox_Title_Text ) 
If intDoIt = vbCancel Then 
WScript.Quit 
End If 
End Sub
========================================================================================

【分析总结】

从破解这个软件中还是看出了自己的不足,特别是汇编语言,还得多补补。

========================================================================================

【版权信息】菜鸟初学,版权没有,转载请保存信息完整。

                                                   2005-5-3