【软件名称】我爱我车管理软件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这个值转换过来的。嘿嘿,这么眼熟?原来"1111176897"转为十六进制就是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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)