能力值:
( LV9,RANK:330 )
|
-
-
4 楼
VcdromX是共享软件,未注册的用户可以无限期地使用本软件,但有部分功能被禁止或受到限制,这些功能主要包括:
1.制作的光盘影像中所包含的文件和目录总数不能多于2000;
2.制作光盘时不能删除文件和目录;
3.浏览光盘影像时只能提取其中的文件,而不能提取其中的整个目录;
4.使用光盘助手时不能禁止光盘中所包含的自动运行指令。
我们将在收到您的注册费的12小时内,通过Email给您发送注册文件。――keyfile?不太像。
我猜这个软件的试用版,去掉了这些部分功能的代码(注册后发给你正式版才有),你只好自己DIY出来,不过应该不难吧。
|
能力值:
( LV9,RANK:170 )
|
-
-
5 楼
对于上楼提到的“不能删除文件和目录”这项功能,在软件中存在代码,当软件执行到下列代码中断时:
00463E53 |> 8B4D 08 MOV ECX,DWORD PTR SS:[EBP+8] ; Case C of switch 00463DFD
00463E56 |. FF55 14 CALL DWORD PTR SS:[EBP+14]
00463E59 |. EB 7F JMP SHORT VcdromX.00463EDA
我将地址转向00427B30,可以顺利实现删除文件和目录的功能。故我想该版本应该没有去除部分功能代码。
说明中的确提到过Keyfile,不过跟踪程序启动时打开的文件不太像Keyfile。
|
能力值:
( LV9,RANK:330 )
|
-
-
9 楼
昨天试着看了一下,感觉这个软件加密有些不错,至于是否是KEYFILE加密我没看,只是限制一些功能,好像直接是winapi编程的,估计firstrose会分析并爆破的很容易的(虽然是VC的),分析一下很有意思。
1.制作的光盘影像中所包含的文件和目录总数不能多于2000; 这个可以爆破
2.制作光盘时不能删除文件和目录; 这个楼上的已经找到,只是没想好怎么搞。
...
其实他还有很多限制,没提出来。
他有几个菜单和选项变灰,我一直没搞懂是怎样实现的。
“因为我目前关心的一点是如果局部破解的话该如何入手,也就是说在调试如何使程序在删除目录或文件时能正确转至正确的代码。”
可以在那里设内存断点,看看是在哪里改变的流向,估计知道一个限制,其余的就类似了。
|
能力值:
( LV12,RANK:650 )
|
-
-
11 楼
幸好点偶名di8是机关枪……顺便说一句,我不太喜欢爆破的。万一它给你来个暗桩的话……有人记得Brain病毒吗?查一下它的来历吧。你会很吃惊的。
用IDA可以发现,这个东东用了MFC。但是从IAT可以看到,它使用了大量API。我以前用过破解版,是Keyfile。注意后缀名.DAT
如何找呢?用BIEW查看文件内容。可以发现".DAT"。但是没有keyfile全名。找到相应的地址,可以看到有2个ref。下面一个好象是检查长度的,但我无法确定。上面一个有读文件的操作。文件缓冲区是动态分配的。
另外,它用了PathRemoveExtension来拼接出keyfile全名。
|
能力值:
( LV9,RANK:330 )
|
-
-
12 楼
他用了PathRemoveExtension把“E:\..\VcdromX.exe”后面的.exe去掉,然后后面加上哪个.dat
00416311 . 8B5424 08 mov edx,dword ptr ss:[esp+8]
00416315 . 8D4C24 0C lea ecx,dword ptr ss:[esp+C]
00416319 . 51 push ecx ; /Arg2
0041631A . 52 push edx ; |Arg1 这里就得到是keyfile全名 VCDROMX.DAT
0041631B . E8 41EA0400 call VcdromX.00464D61 ; 这里还没来的及看\VcdromX.00464D61
00416320 . 85C0 test eax,eax
00416322 . 74 04 je short VcdromX.00416328
|
能力值:
( LV12,RANK:650 )
|
-
-
13 楼
最初由 laoqian 发布 他用了PathRemoveExtension把“E:\..\VcdromX.exe”后面的.exe去掉,然后后面加上哪个.dat
00416311 . 8B5424 08 mov edx,dword ptr ss:[esp+8] 00416315 . 8D4C24 0C lea ecx,dword ptr ss:[esp+C] 00416319 . 51 push ecx ; /Arg2 ........
那个call是得到文件的属性。你好象不是用IDA啊。怎么不用呢?
.text:004162F2 call ds:PathRemoveExtensionA
.text:004162F8 push 0FFFFFFFFh
.text:004162FA lea ecx, [esp+0Ch]
.text:004162FE call ?ReleaseBuffer@CString@@QAEXH@Z ; CString::ReleaseBuffer(int)
.text:00416303 push offset a_dat ; ".DAT"
.text:00416308 lea ecx, [esp+0Ch]
.text:0041630C call sub_45ED87
.text:00416311 mov edx, [esp+8]
.text:00416315 lea ecx, [esp+0Ch]
.text:00416319 push ecx
.text:0041631A push edx
.text:0041631B call ?GetStatus@CFile@@SGHPBDAAUCFileStatus@@@Z ; CFile::GetStatus(char const *,CFileStatus &)
另外,还有一个地方,是
.text:0041481A call ds:GetModuleFileNameA
.text:00414820 push esi
.text:00414821 call ds:PathRemoveExtensionA
.text:00414827 push 0FFFFFFFFh
.text:00414829 lea ecx, [ebp-14h]
.text:0041482C call ?ReleaseBuffer@CString@@QAEXH@Z ; CString::ReleaseBuffer(int)
.text:00414831 push offset a_dat ; ".DAT"
.text:00414836 lea ecx, [ebp-14h]
.text:00414839 call sub_45ED87 下面就是读文件了
.text:00414866 mov byte ptr [ebp-4], 1
.text:0041486A call ?Open@CFile@@UAEHPBDIPAVCFileException@@@Z ; CFile::Open(char const *,uint,CFileException *)
.text:0041486F test eax, eax
.text:00414871 jz short loc_41489F
.text:00414873 lea ecx, [ebp-24h]
.text:00414876 call ??0AFX_EXCEPTION_LINK@@QAE@XZ ; AFX_EXCEPTION_LINK::AFX_EXCEPTION_LINK(void)
.text:0041487B push ebx
.text:0041487C push edi
.text:0041487D lea ecx, [ebp-34h]
.text:00414880 mov byte ptr [ebp-4], 3
.text:00414884 call sub_463187//就是这里
.text:00414889 lea ecx, [ebp-34h]
.text:0041488C mov esi, eax
.text:0041488E call ?Close@CFile@@UAEXXZ ; CFile::Close(void)
.text:00414893 mov dword ptr [ebp-4], 1
.text:0041489A call ?AfxTryCleanup@@YGXXZ ; AfxTryCleanup(void)
|
能力值:
( LV9,RANK:330 )
|
-
-
14 楼
主要是机器不行ida慢。
“另外,还有一个地方,是”动态跟踪他不来这里和和你说的下面那地方,文件长度不对?!。
接下面判断VCDROMX.DAT的大小
..........
0041631A . 52 push edx ; |Arg1
0041631B . E8 41EA0400 call VcdromX.00464D61 ; \返回若没有VCDROMX.DAT文件eax=0,有则eax=1
00416320 . 85C0 test eax,eax
00416322 . 74 04 je short VcdromX.00416328
00416324 . 8B4424 18 mov eax,dword ptr ss:[esp+18] ; 放置VCDROMX.DAT文件长度
00416328 > 25 FF3F0080 and eax,80003FFF 什么意思呢?
0041632D . 79 07 jns short VcdromX.00416336
0041632F . 48 dec eax
00416330 . 0D 00C0FFFF or eax,FFFFC000 什么意思呢?
00416335 . 40 inc eax
00416336 > 8D4C24 08 lea ecx,dword ptr ss:[esp+8]
0041633A . 894424 18 mov dword ptr ss:[esp+18],eax
0041633E . E8 3F860400 call VcdromX.0045E982
........
好烦,,领导老是来视察,老是中断,不愿接下去了,哎
休息休息
|
能力值:
( LV12,RANK:650 )
|
-
-
15 楼
最初由 laoqian 发布 主要是机器不行ida慢。 “另外,还有一个地方,是”动态跟踪他不来这里和和你说的下面那地方,文件长度不对?!。
接下面判断VCDROMX.DAT的大小 .......... ........
我家里D750也慢的一塌糊涂
对了。上面的分析是静态分析,没有跟。所以有些地方只是猜想,比如开始说xx是判断长度,实际是取文件信息。
跟不到估计是因为keyfile长度不对。你放了假文件没有?他取文件信息时顺便取了长度的。要是他在这里做个检查,就不去傻读文件了。
|
能力值:
( LV9,RANK:170 )
|
-
-
16 楼
看到偶求解的被顶起的贴子,有点高兴,就再分析一点,补充一点内容:
//软件启动时的注册验证
004162A0 . 6A FF PUSH -1
004162A2 . 68 CBD04700 PUSH VcdromX.0047D0CB ; SE handler installation
004162A7 . 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004162AD . 50 PUSH EAX
004162AE . 64:8925 00000000 MOV DWORD PTR FS:[0],ESP
004162B5 . 81EC 1C010000 SUB ESP,11C
004162BB . A1 D8F24900 MOV EAX,DWORD PTR DS:[49F2D8]
004162C0 . 56 PUSH ESI
004162C1 . 57 PUSH EDI
004162C2 . 8BF9 MOV EDI,ECX
004162C4 . 894424 08 MOV DWORD PTR SS:[ESP+8],EAX
004162C8 . 68 05010000 PUSH 105
004162CD . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
004162D1 . C78424 30010000 00000000 MOV DWORD PTR SS:[ESP+130],0
004162DC . E8 FA8A0400 CALL VcdromX.0045EDDB
004162E1 . 8BF0 MOV ESI,EAX
004162E3 . 68 04010000 PUSH 104 ; /BufSize = 104 (260.)
004162E8 . 56 PUSH ESI ; |PathBuffer
004162E9 . 6A 00 PUSH 0 ; |hModule = NULL
004162EB . FF15 04344800 CALL DWORD PTR DS:[<&KERNEL32.GetMod>; \GetModuleFileNameA 获取应用程序绝对路径 "...\VcdromX.exe"
004162F1 . 56 PUSH ESI ; /Path = "...\VcdromX.exe"
004162F2 . FF15 68344800 CALL DWORD PTR DS:[<&SHLWAPI.PathRem>; \PathRemoveExtensionA 移去扩展名(.exe)
004162F8 . 6A FF PUSH -1
004162FA . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C] ; 移去扩展名后的字符串的地址 "...\VcdromX"
004162FE . E8 278B0400 CALL VcdromX.0045EE2A
00416303 . 68 A8C54900 PUSH VcdromX.0049C5A8 ; ASCII ".DAT"
00416308 . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
0041630C . E8 768A0400 CALL VcdromX.0045ED87 ; 连接字符串
00416311 . 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8] ; "...\VcdromX.DAT" 得到注册文件
00416315 . 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
00416319 . 51 PUSH ECX ; /Arg2
0041631A . 52 PUSH EDX ; |Arg1 = "...VcdromX.DAT"
0041631B . E8 41EA0400 CALL VcdromX.00464D61 ; \VcdromX.00464D61 检查是否存在注册文件
00416320 . 85C0 TEST EAX,EAX
00416322 . 74 04 JE SHORT VcdromX.00416328
00416324 . 8B4424 18 MOV EAX,DWORD PTR SS:[ESP+18] ; 注册文件长度
00416328 > 25 FF3F0080 AND EAX,80003FFF
0041632D . 79 07 JNS SHORT VcdromX.00416336
0041632F . 48 DEC EAX
00416330 . 0D 00C0FFFF OR EAX,FFFFC000
00416335 . 40 INC EAX
00416336 > 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8] ; 注册文件的地址
0041633A . 894424 18 MOV DWORD PTR SS:[ESP+18],EAX
0041633E . E8 3F860400 CALL VcdromX.0045E982
00416343 . 8B4C24 18 MOV ECX,DWORD PTR SS:[ESP+18]
00416347 . 6A 00 PUSH 0 ; /lParam = 0
00416349 . 8BC1 MOV EAX,ECX ; |注册文件长度
0041634B . 81C1 DA390000 ADD ECX,39DA ; |
00416351 . 25 FFFF0000 AND EAX,0FFFF ; |
00416356 . 50 PUSH EAX ; |wParam = 长度
00416357 . 8B47 1C MOV EAX,DWORD PTR DS:[EDI+1C] ; |
0041635A . 51 PUSH ECX ; |Message
0041635B . 50 PUSH EAX ; |hWnd
0041635C . FF15 30374800 CALL DWORD PTR DS:[<&USER32.SendMess>; \SendMessageA 通过发送消息,检查注册情况
00416362 . 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
00416366 . C78424 2C010000 FFFFFFFF MOV DWORD PTR SS:[ESP+12C],-1
00416371 . E8 81860400 CALL VcdromX.0045E9F7
00416376 . 8B8C24 24010000 MOV ECX,DWORD PTR SS:[ESP+124]
0041637D . 5F POP EDI
0041637E . 5E POP ESI
0041637F . 64:890D 00000000 MOV DWORD PTR FS:[0],ECX
00416386 . 81C4 28010000 ADD ESP,128
0041638C . C2 0800 RETN 8
//检查注册情况
004147D0 /. 55 PUSH EBP
004147D1 |. 8BEC MOV EBP,ESP
004147D3 |. 6A FF PUSH -1
004147D5 |. 68 98CF4700 PUSH VcdromX.0047CF98 ; SE handler installation
004147DA |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
004147E0 |. 50 PUSH EAX
004147E1 |. 64:8925 00000000 MOV DWORD PTR FS:[0],ESP
004147E8 |. 83EC 28 SUB ESP,28
004147EB |. A1 D8F24900 MOV EAX,DWORD PTR DS:[49F2D8]
004147F0 |. 53 PUSH EBX
004147F1 |. 56 PUSH ESI
004147F2 |. 57 PUSH EDI
004147F3 |. 8965 F0 MOV DWORD PTR SS:[EBP-10],ESP
004147F6 |. 894D E8 MOV DWORD PTR SS:[EBP-18],ECX
004147F9 |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
004147FC |. 68 05010000 PUSH 105
00414801 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14]
00414804 |. C745 FC 00000000 MOV DWORD PTR SS:[EBP-4],0
0041480B |. E8 CBA50400 CALL VcdromX.0045EDDB
00414810 |. 8BF0 MOV ESI,EAX
00414812 |. 68 04010000 PUSH 104 ; /BufSize = 104 (260.)
00414817 |. 56 PUSH ESI ; |PathBuffer
00414818 |. 6A 00 PUSH 0 ; |hModule = NULL
0041481A |. FF15 04344800 CALL DWORD PTR DS:[<&KERNEL32.GetMod>; \GetModuleFileNameA 获得应用程序绝对路径
00414820 |. 56 PUSH ESI ; /Path = 获取得应用程序路径
00414821 |. FF15 68344800 CALL DWORD PTR DS:[<&SHLWAPI.PathRem>; \PathRemoveExtensionA 去除扩展名(.exe)
00414827 |. 6A FF PUSH -1
00414829 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] ; 去除了扩展名的字符串
0041482C |. E8 F9A50400 CALL VcdromX.0045EE2A
00414831 |. 68 A8C54900 PUSH VcdromX.0049C5A8 ; ASCII ".DAT"
00414836 |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14]
00414839 |. E8 49A50400 CALL VcdromX.0045ED87 ; 连接字符串,得到注册文件
0041483E |. 8B5D 08 MOV EBX,DWORD PTR SS:[EBP+8] ; 文件内容长度
00414841 |. 53 PUSH EBX
00414842 |. E8 9BA70400 CALL VcdromX.0045EFE2
00414847 |. 8BF8 MOV EDI,EAX
00414849 |. 83C4 04 ADD ESP,4
0041484C |. 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
0041484F |. 897D 08 MOV DWORD PTR SS:[EBP+8],EDI
00414852 |. E8 01E70400 CALL VcdromX.00462F58
00414857 |. 8B4D EC MOV ECX,DWORD PTR SS:[EBP-14]
0041485A |. 33F6 XOR ESI,ESI
0041485C |. 56 PUSH ESI ; /Arg3 => 00000000
0041485D |. 68 00800000 PUSH 8000 ; |Arg2 = 00008000
00414862 |. 51 PUSH ECX ; |Arg1 = 注册文件
00414863 |. 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34] ; |
00414866 |. C645 FC 01 MOV BYTE PTR SS:[EBP-4],1 ; |
0041486A |. E8 FBE70400 CALL VcdromX.0046306A ; \VcdromX.0046306A 打开文件
0041486F |. 85C0 TEST EAX,EAX
00414871 |. 74 2C JE SHORT VcdromX.0041489F
00414873 |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00414876 |. E8 81E60400 CALL VcdromX.00462EFC
0041487B |. 53 PUSH EBX ; /Arg2 = 文件内容长度
0041487C |. 57 PUSH EDI ; |Arg1 = Buffer
0041487D |. 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34] ; |
00414880 |. C645 FC 03 MOV BYTE PTR SS:[EBP-4],3 ; |
00414884 |. E8 FEE80400 CALL VcdromX.00463187 ; \VcdromX.00463187 读取文件内容,EAX返回文件长度
00414889 |. 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
0041488C |. 8BF0 MOV ESI,EAX
0041488E |. E8 F2E90400 CALL VcdromX.00463285 ; 关闭文件
00414893 |. C745 FC 01000000 MOV DWORD PTR SS:[EBP-4],1
0041489A |. E8 9BE60400 CALL VcdromX.00462F3A
0041489F |> 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14] ; 注册文件地址
004148A2 |. E8 DBA00400 CALL VcdromX.0045E982
004148A7 |. 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18]
004148AA |. 81E6 FFFF0000 AND ESI,0FFFF
004148B0 |. 57 PUSH EDI ; /lParam = 文件内容
004148B1 |. 56 PUSH ESI ; |wParam = 文件长度
004148B2 |. 8B51 1C MOV EDX,DWORD PTR DS:[ECX+1C] ; |
004148B5 |. 68 91040000 PUSH 491 ; |Message = MSG(491)
004148BA |. 52 PUSH EDX ; |hWnd
004148BB |. FF15 30374800 CALL DWORD PTR DS:[<&USER32.SendMess>; \SendMessageA 通过发送消息,处理注册文件
004148C1 |> 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
004148C4 |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
004148C8 |. E8 E0E60400 CALL VcdromX.00462FAD
004148CD |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14]
004148D0 |. C745 FC FFFFFFFF MOV DWORD PTR SS:[EBP-4],-1
004148D7 |. E8 1BA10400 CALL VcdromX.0045E9F7
004148DC |. 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
004148DF |. 5F POP EDI
004148E0 |. 5E POP ESI
004148E1 |. 64:890D 00000000 MOV DWORD PTR FS:[0],ECX
004148E8 |. 5B POP EBX
004148E9 |. 8BE5 MOV ESP,EBP
004148EB |. 5D POP EBP
004148EC \. C2 0800 RETN 8
错误难免,还请指正。
|
能力值:
( LV9,RANK:170 )
|
-
-
17 楼
今天没时间继续下去了,关键处可以通过下断:
00415A60 . 6A FF PUSH -1
00415A62 . 68 76D04700 PUSH VcdromX.0047D076 ; SE handler installation
00415A67 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00415A6D . 50 PUSH EAX
……
以下内容涉及对注册文件内容的处理。
|
能力值:
( LV9,RANK:330 )
|
-
-
19 楼
爆完sen3狗,回来继续研究。
请问楼主,你是怎样来到,
//检查注册情况 004147D0 /. 55 PUSH EBP 004147D1 |. 8BEC MOV EBP,ESP 004147D3 |. 6A FF PUSH -1 和 今天没时间继续下去了,关键处可以通过下断: 00415A60 . 6A FF PUSH -1 00415A62 . 68 76D04700 PUSH VcdromX.0047D076 ; SE handler installation 00415A67 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0] 00415A6D . 50 PUSH EAX …… 以下内容涉及对注册文件内容的处理。
我也制作了假VcdromX.DAT,但是文件大小怎么知道呢?看来大小不对。
|
能力值:
( LV9,RANK:170 )
|
-
-
20 楼
不好意思,这些天休息都在看电影,还是上次的东西。
估计注册文件大小为158H(344)个字节:
00415A92 > 68 58010000 PUSH 158
00415A97 . E8 46950400 CALL VcdromX.0045EFE2 ; 分配内存
|
能力值:
( LV9,RANK:330 )
|
-
-
22 楼
最初由 GoOdLeiSuRe 发布 不好意思,这些天休息都在看电影,还是上次的东西。
估计注册文件大小为158H(344)个字节:
00415A92 > 68 58010000 PUSH 158 ........
怎么找到的啊? 高!!!
又 :
firstrose你的3.8的key在4.1可以用吗?应该没换算法 吧 ?
|