2005ljb 发表于 2009-9-10 16:05:39

学习[PYG]算法分析入门第四课求助

飘云老大的算法分析入门第四课中的软件私人保险箱已经更新到6.48版(下载地址http://www3.skycn.com/soft/14176.html),按照老大的教程可以提示注册成功。可是工具集里的还原功能不能使用,提示只有注册用户才能使用,而且软件使用15次以后提示过期。自己分析了一下,软件在第一次启动的时候会在系统目录生成一个Mgprend4.dll文件,用记事本打开里面是试用次数15,次数不能改大,因为程序启动时会判断这个值,如果大于15直接跳到过期,出现过期提示的同时会在注册表HKEY_LOCAL_MACHINE\SOFTWARE\FinalVer里建立一个end4的项目,每次程序启动会先检测这个项目,那就直接提示过期。过期后,会提示注册,注册窗口要求填入用户名和注册码,不知道注册码是不是要用用户名参与运算,一直没把这个注册的地方断下来,所以想请各位高手看看这个软件到底该怎么注册?另外,在前面提到的使用工具集里的还原功能提示只有注册用户才能使用,在这里跟踪,发现软件是读取注册表HKEY_CURRENT_USER\Software\SafeBox里面的RegNo项目,而且在试用时我们注册成功时,建立的项目名称是RegNum,尝试把RegNum改成RegNo,可以通过第一步验证,可是第二步通不过(使用这个功能要通过2步验证)。
困扰自己2天了,实在是找不到好的头绪,不知道怎样才能算是真正的注册,所以发贴请教大家,请大家多指教!代码贴在下面。
004E8E06|.E8 BD25F8FF   call    0046B3C8
004E8E0B|.8BD8          mov   ebx, eax
004E8E0D|.BA 02000080   mov   edx, 80000002
004E8E12|.8BC3          mov   eax, ebx
004E8E14|.E8 4F26F8FF   call    0046B468
004E8E19|.B1 01         mov   cl, 1
004E8E1B|.BA 04924E00   mov   edx, 004E9204               ;ASCII"Software\FinalVer"
004E8E20|.8BC3          mov   eax, ebx
004E8E22|.E8 8527F8FF   call    0046B5AC
004E8E27|.BA 20924E00   mov   edx, 004E9220               ;ASCII "end4"
004E8E2C|.8BC3          mov   eax, ebx
004E8E2E|.E8 692EF8FF   call    0046BC9C                      ;判断注册表里是否用end4这个项目
004E8E33|.84C0          test    al, al
004E8E35|.0F85 24030000 jnz   004E915F                      ;如果用end4这个项目跳向过期
004E8E3B|.8D85 2CFEFFFF lea   eax, dword ptr
004E8E41|.E8 0AD3FFFF   call    004E6150                      ;获得系统目录
004E8E46|.8D85 2CFEFFFF lea   eax, dword ptr
004E8E4C|.BA 30924E00   mov   edx, 004E9230               ;ASCII "\Mgprend4.dll"
004E8E51|.E8 3AC1F1FF   call    00404F90
004E8E56|.8B85 2CFEFFFF mov   eax, dword ptr
004E8E5C|.E8 EB0AF2FF   call    0040994C                      ;判断系统里是否有Mgprend4.dll这个文件
004E8E61|.84C0          test    al, al
004E8E63|.0F84 8E020000 je      004E90F7                      ;没有就跳走,然后建立这个文件
004E8E69|.8D85 28FEFFFF lea   eax, dword ptr
004E8E6F|.E8 DCD2FFFF   call    004E6150
004E8E74|.8D85 28FEFFFF lea   eax, dword ptr
004E8E7A|.BA 30924E00   mov   edx, 004E9230               ;ASCII "\Mgprend4.dll"
004E8E7F|.E8 0CC1F1FF   call    00404F90
004E8E84|.8B95 28FEFFFF mov   edx, dword ptr
004E8E8A|.8D85 30FEFFFF lea   eax, dword ptr
004E8E90|.E8 4FA1F1FF   call    00402FE4
004E8E95|.8D85 30FEFFFF lea   eax, dword ptr
004E8E9B|.E8 D49EF1FF   call    00402D74
004E8EA0|.E8 739AF1FF   call    00402918
004E8EA5|.8D55 FC       lea   edx, dword ptr
004E8EA8|.8D85 30FEFFFF lea   eax, dword ptr
004E8EAE|.E8 D5A6F1FF   call    00403588
004E8EB3|.8D85 30FEFFFF lea   eax, dword ptr
004E8EB9|.E8 36A7F1FF   call    004035F4
004E8EBE|.E8 559AF1FF   call    00402918
004E8EC3|.8D85 30FEFFFF lea   eax, dword ptr
004E8EC9|.E8 92A2F1FF   call    00403160
004E8ECE|.E8 459AF1FF   call    00402918
004E8ED3|.8B45 FC       mov   eax, dword ptr
004E8ED6|.E8 3908F2FF   call    00409714                      ;上面是读取Mgprend4.dll中的次数
004E8EDB|.8BF8          mov   edi, eax
004E8EDD|.85FF          test    edi, edi                      ;判断次数是否等于0
004E8EDF|.7E 05         jle   short 004E8EE6                ;等于0就跳到过期
004E8EE1|.83FF 0F       cmp   edi, 0F                     ;判断是否大于15
004E8EE4|.7E 73         jle   short 004E8F59                ;跳走就继续判断是否大于3
004E8EE6|>33C9          xor   ecx, ecx                      ;不跳走就直接提示过期
004E8EE8|.BA 20924E00   mov   edx, 004E9220               ;ASCII "end4"
004E8EED|.8BC3          mov   eax, ebx
004E8EEF|.E8 E42BF8FF   call    0046BAD8
004E8EF4|.33D2          xor   edx, edx
004E8EF6|.8B86 2C030000 mov   eax, dword ptr
004E8EFC|.8B08          mov   ecx, dword ptr
004E8EFE|.FF51 64       call    dword ptr
004E8F01|.B2 01         mov   dl, 1
004E8F03|.8B86 6C030000 mov   eax, dword ptr
004E8F09|.E8 2EF1F5FF   call    0044803C
004E8F0E|.BA 48924E00   mov   edx, 004E9248
004E8F13|.8B86 78030000 mov   eax, dword ptr
004E8F19|.E8 7620FBFF   call    0049AF94
004E8F1E|.BA 58924E00   mov   edx, 004E9258
004E8F23|.8B86 74030000 mov   eax, dword ptr
004E8F29|.E8 1EF2F5FF   call    0044814C
004E8F2E|.6A 01         push    1
004E8F30|.68 84924E00   push    004E9284
004E8F35|.68 84924E00   push    004E9284
004E8F3A|.68 88924E00   push    004E9288                      ;ASCII
"http://www.sharebank.com.cn/soft/softbuy.php?soid=10816"
004E8F3F|.68 C0924E00   push    004E92C0                      ;ASCII "Open"
004E8F44|.A1 68DE4E00   mov   eax, dword ptr
004E8F49|.E8 DA58F6FF   call    0044E828
004E8F4E|.50            push    eax                           ; |hWnd
004E8F4F|.E8 34F7F4FF   call    <jmp.&shell32.ShellExecuteA>; \ShellExecuteA
004E8F54|.E9 6D020000   jmp   004E91C6
004E8F59|>83FF 04       cmp   edi, 4                        ;判断是否大于3,小于3会提示试用剩余次数
004E8F5C|.0F8F 0A010000 jg      004E906C                      ;没跳
004E8F62|.33D2          xor   edx, edx
004E8F64|.8B86 2C030000 mov   eax, dword ptr
004E8F6A|.8B08          mov   ecx, dword ptr
004E8F6C|.FF51 64       call    dword ptr
004E8F6F|.B2 01         mov   dl, 1
004E8F71|.8B86 6C030000 mov   eax, dword ptr
004E8F77|.E8 C0F0F5FF   call    0044803C
004E8F7C|.68 D0924E00   push    004E92D0                      ;您还能再使用几次,几<3
004E8F81|.8D95 20FEFFFF lea   edx, dword ptr
004E8F87|.8BC7          mov   eax, edi
004E8F89|.48            dec   eax
004E8F8A|.E8 E506F2FF   call    00409674
004E8F8F|.FFB5 20FEFFFF push    dword ptr
004E8F95|.68 E8924E00   push    004E92E8
004E8F9A|.8D85 24FEFFFF lea   eax, dword ptr
004E8FA0|.BA 03000000   mov   edx, 3
004E8FA5|.E8 9EC0F1FF   call    00405048
004E8FAA|.8B95 24FEFFFF mov   edx, dword ptr
004E8FB0|.8B86 74030000 mov   eax, dword ptr
004E8FB6|.E8 91F1F5FF   call    0044814C
004E8FBB|.6A 01         push    1
004E8FBD|.68 84924E00   push    004E9284
004E8FC2|.68 84924E00   push    004E9284
004E8FC7|.68 88924E00   push    004E9288                      ;ASCII"http://www.sharebank.com.cn/soft/softbuy.php?soid=10816"
004E8FCC|.68 C0924E00   push    004E92C0                      ;ASCII "Open"
004E8FD1|.A1 68DE4E00   mov   eax, dword ptr
004E8FD6|.E8 4D58F6FF   call    0044E828
004E8FDB|.50            push    eax                           ; |hWnd
004E8FDC|.E8 A7F6F4FF   call    <jmp.&shell32.ShellExecuteA>; \ShellExecuteA
004E8FE1|.8B45 FC       mov   eax, dword ptr
004E8FE4|.E8 2B07F2FF   call    00409714
004E8FE9|.48            dec   eax
004E8FEA|.8D95 1CFEFFFF lea   edx, dword ptr
004E8FF0|.E8 7F06F2FF   call    00409674
004E8FF5|.8B95 1CFEFFFF mov   edx, dword ptr
004E8FFB|.8D45 FC       lea   eax, dword ptr
004E8FFE|.E8 65BDF1FF   call    00404D68
004E9003|.8D85 18FEFFFF lea   eax, dword ptr
004E9009|.E8 42D1FFFF   call    004E6150
004E900E|.8D85 18FEFFFF lea   eax, dword ptr
004E9014|.BA 30924E00   mov   edx, 004E9230               ;ASCII "\Mgprend4.dll"
004E9019|.E8 72BFF1FF   call    00404F90
004E901E|.8B95 18FEFFFF mov   edx, dword ptr
004E9024|.8D85 30FEFFFF lea   eax, dword ptr
004E902A|.E8 B59FF1FF   call    00402FE4
004E902F|.8D85 30FEFFFF lea   eax, dword ptr
004E9035|.E8 469DF1FF   call    00402D80
004E903A|.E8 D998F1FF   call    00402918
004E903F|.8B55 FC       mov   edx, dword ptr
004E9042|.8D85 30FEFFFF lea   eax, dword ptr
004E9048|.E8 4FC3F1FF   call    0040539C
004E904D|.E8 5EA9F1FF   call    004039B0
004E9052|.E8 C198F1FF   call    00402918
004E9057|.8D85 30FEFFFF lea   eax, dword ptr
004E905D|.E8 FEA0F1FF   call    00403160
004E9062|.E8 B198F1FF   call    00402918
004E9067|.E9 5A010000   jmp   004E91C6
004E906C|>8B45 FC       mov   eax, dword ptr
004E906F|.E8 A006F2FF   call    00409714
004E9074|.48            dec   eax
004E9075|.8D95 14FEFFFF lea   edx, dword ptr
004E907B|.E8 F405F2FF   call    00409674
004E9080|.8B95 14FEFFFF mov   edx, dword ptr
004E9086|.8D45 FC       lea   eax, dword ptr
004E9089|.E8 DABCF1FF   call    00404D68
004E908E|.8D85 10FEFFFF lea   eax, dword ptr
004E9094|.E8 B7D0FFFF   call    004E6150
004E9099|.8D85 10FEFFFF lea   eax, dword ptr
004E909F|.BA 30924E00   mov   edx, 004E9230               ;ASCII "\Mgprend4.dll"
004E90A4|.E8 E7BEF1FF   call    00404F90
004E90A9|.8B95 10FEFFFF mov   edx, dword ptr
004E90AF|.8D85 30FEFFFF lea   eax, dword ptr
004E90B5|.E8 2A9FF1FF   call    00402FE4
004E90BA|.8D85 30FEFFFF lea   eax, dword ptr
004E90C0|.E8 BB9CF1FF   call    00402D80
004E90C5|.E8 4E98F1FF   call    00402918
004E90CA|.8B55 FC       mov   edx, dword ptr
004E90CD|.8D85 30FEFFFF lea   eax, dword ptr
004E90D3|.E8 C4C2F1FF   call    0040539C
004E90D8|.E8 D3A8F1FF   call    004039B0
004E90DD|.E8 3698F1FF   call    00402918
004E90E2|.8D85 30FEFFFF lea   eax, dword ptr
004E90E8|.E8 73A0F1FF   call    00403160
004E90ED|.E8 2698F1FF   call    00402918
004E90F2|.E9 C8000000   jmp   004E91BF
004E90F7|>8D85 0CFEFFFF lea   eax, dword ptr       ;从004E8E63跳过来的
004E90FD|.E8 4ED0FFFF   call    004E6150                      ;下面就是建立Mgprend4.dll这个文件的过程
004E9102|.8D85 0CFEFFFF lea   eax, dword ptr
004E9108|.BA 30924E00   mov   edx, 004E9230               ;ASCII "\Mgprend4.dll"
004E910D|.E8 7EBEF1FF   call    00404F90
004E9112|.8B95 0CFEFFFF mov   edx, dword ptr
004E9118|.8D85 30FEFFFF lea   eax, dword ptr
004E911E|.E8 C19EF1FF   call    00402FE4
004E9123|.8D85 30FEFFFF lea   eax, dword ptr
004E9129|.E8 529CF1FF   call    00402D80
004E912E|.E8 E597F1FF   call    00402918
004E9133|.BA 44934E00   mov   edx, 004E9344               ;ASCII "15"
004E9138|.8D85 30FEFFFF lea   eax, dword ptr
004E913E|.E8 59C2F1FF   call    0040539C                      ;这里是写入试用次数15
004E9143|.E8 68A8F1FF   call    004039B0
004E9148|.E8 CB97F1FF   call    00402918
004E914D|.8D85 30FEFFFF lea   eax, dword ptr
004E9153|.E8 08A0F1FF   call    00403160
004E9158|.E8 BB97F1FF   call    00402918
004E915D|.EB 60         jmp   short 004E91BF
004E915F|>33D2          xor   edx, edx
004E9161|.8B86 2C030000 mov   eax, dword ptr


另外使用工具集里的还原功能,会用2次验证,代码如下:
004E3DE1|.8BC6          mov   eax, esi
004E3DE3|.E8 8076F8FF   call    0046B468
004E3DE8|.B1 01         mov   cl, 1
004E3DEA|.BA 34424E00   mov   edx, 004E4234               ;ASCII "Software\SafeBox"
004E3DEF|.8BC6          mov   eax, esi
004E3DF1|.E8 B677F8FF   call    0046B5AC
004E3DF6|.BA 50424E00   mov   edx, 004E4250               ;ASCII "RegNo"
004E3DFB|.8BC6          mov   eax, esi                      ;上面是读取注册表
004E3DFD|.E8 9A7EF8FF   call    0046BC9C                      ;第一次验证
004E3E02|.84C0          test    al, al
004E3E04|.75 24         jnz   short 004E3E2A                ;通过验证就跳走
004E3E06|.8BC6          mov   eax, esi
004E3E08|.E8 3701F2FF   call    00403F44
004E3E0D|.6A 00         push    0
004E3E0F|.B9 58424E00   mov   ecx, 004E4258
004E3E14|.BA 64424E00   mov   edx, 004E4264               ;本功能仅限注册用户使用!
004E3E19|.A1 C0CD4E00   mov   eax, dword ptr
004E3E1E|.8B00          mov   eax, dword ptr
004E3E20|.E8 5751F8FF   call    00468F7C
004E3E25|.E9 BB030000   jmp   004E41E5
004E3E2A|>8D4D F8       lea   ecx, dword ptr
004E3E2D|.BA 50424E00   mov   edx, 004E4250               ;ASCII "RegNo"
004E3E32|.8BC6          mov   eax, esi
004E3E34|.E8 CB7CF8FF   call    0046BB04                      ;再一次读取注册表
004E3E39|.8B45 F8       mov   eax, dword ptr
004E3E3C|.50            push    eax
004E3E3D|.6A 03         push    3
004E3E3F|.8D45 EC       lea   eax, dword ptr
004E3E42|.50            push    eax
004E3E43|.B9 02000000   mov   ecx, 2
004E3E48|.BA 01000000   mov   edx, 1
004E3E4D|.8B45 FC       mov   eax, dword ptr
004E3E50|.E8 7FBDFEFF   call    004CFBD4
004E3E55|.8B45 EC       mov   eax, dword ptr
004E3E58|.8D4D F0       lea   ecx, dword ptr
004E3E5B|.BA 03000000   mov   edx, 3
004E3E60|.E8 AFDCF5FF   call    00441B14
004E3E65|.FF75 F0       push    dword ptr
004E3E68|.6A 03         push    3
004E3E6A|.8D45 E4       lea   eax, dword ptr
004E3E6D|.50            push    eax
004E3E6E|.B9 02000000   mov   ecx, 2
004E3E73|.BA 01000000   mov   edx, 1
004E3E78|.8B45 FC       mov   eax, dword ptr
004E3E7B|.E8 F8BDFEFF   call    004CFC78
004E3E80|.8B45 E4       mov   eax, dword ptr
004E3E83|.8D4D E8       lea   ecx, dword ptr
004E3E86|.BA 03000000   mov   edx, 3
004E3E8B|.E8 A0DCF5FF   call    00441B30
004E3E90|.FF75 E8       push    dword ptr
004E3E93|.8D45 E0       lea   eax, dword ptr
004E3E96|.50            push    eax
004E3E97|.6A 03         push    3
004E3E99|.8D45 DC       lea   eax, dword ptr
004E3E9C|.50            push    eax
004E3E9D|.B9 02000000   mov   ecx, 2
004E3EA2|.BA 01000000   mov   edx, 1
004E3EA7|.8B45 FC       mov   eax, dword ptr
004E3EAA|.E8 25BDFEFF   call    004CFBD4
004E3EAF|.8B45 DC       mov   eax, dword ptr
004E3EB2|.B9 02000000   mov   ecx, 2
004E3EB7|.BA 03000000   mov   edx, 3
004E3EBC|.E8 93DCF5FF   call    00441B54
004E3EC1|.FF75 E0       push    dword ptr
004E3EC4|.8D45 F4       lea   eax, dword ptr
004E3EC7|.BA 03000000   mov   edx, 3
004E3ECC|.E8 7711F2FF   call    00405048
004E3ED1|.8B55 F4       mov   edx, dword ptr
004E3ED4|.58            pop   eax
004E3ED5|.E8 F211F2FF   call    004050CC                      ;第二次验证
004E3EDA|.74 24         je      short 004E3F00                ;通过就跳走
004E3EDC|.8BC6          mov   eax, esi
004E3EDE|.E8 6100F2FF   call    00403F44
004E3EE3|.6A 00         push    0
004E3EE5|.B9 58424E00   mov   ecx, 004E4258
004E3EEA|.BA 64424E00   mov   edx, 004E4264               ;本功能仅限注册用户使用!
004E3EEF|.A1 C0CD4E00   mov   eax, dword ptr
004E3EF4|.8B00          mov   eax, dword ptr
004E3EF6|.E8 8150F8FF   call    00468F7C
004E3EFB|.E9 E5020000   jmp   004E41E5
004E3F00|>8D55 D4       lea   edx, dword ptr
004E3F03|.8B83 E8030000 mov   eax, dword ptr

[ 本帖最后由 2005ljb 于 2009-9-10 16:09 编辑 ]

2005ljb 发表于 2009-9-10 22:30:56

没人来指教一下么?还是大家都不在?

MOV 发表于 2009-9-28 18:00:26

004E3ED5|.E8 F211F2FF   call    004050CC                      ;第二次验证 进这个里面看看 是什么意思
004E3EDA|.74 24         je      short 004E3F00                ;通过就跳走判断这个跳了没有啊
004E3EDC|.8BC6          mov   eax, esi
004E3EDE|.E8 6100F2FF   call    00403F44
004E3EE3|.6A 00         push    0
004E3EE5|.B9 58424E00   mov   ecx, 004E4258
004E3EEA|.BA 64424E00   mov   edx, 004E4264               ;本功能仅限注册用户使用!
004E3EEF|.A1 C0CD4E00   mov   eax, dword ptr
004E3EF4|.8B00          mov   eax, dword ptr
004E3EF6|.E8 8150F8FF   call    00468F7C
004E3EFB|.E9 E5020000   jmp   004E41E5
004E3F00|>8D55 D4       lea   edx, dword ptr
004E3F03|.8B83 E8030000 mov   eax, dword ptr

野猫III 发表于 2009-9-29 14:13:48

004E3DBA|.55            PUSH EBP
004E3DBB|.68 1D424E00   PUSH _UnPacke.004E421D
004E3DC0|.64:FF30       PUSH DWORD PTR FS:
004E3DC3|.64:8920       MOV DWORD PTR FS:,ESP
004E3DC6|.8D45 FC       LEA EAX,DWORD PTR SS:
004E3DC9|.E8 2EBDFEFF   CALL _UnPacke.004CFAFC
004E3DCE|.B2 01         MOV DL,1
004E3DD0|.A1 C8B24600   MOV EAX,DWORD PTR DS:
004E3DD5|.E8 EE75F8FF   CALL _UnPacke.0046B3C8
004E3DDA|.8BF0          MOV ESI,EAX
004E3DDC|.BA 01000080   MOV EDX,80000001
004E3DE1|.8BC6          MOV EAX,ESI
004E3DE3|.E8 8076F8FF   CALL _UnPacke.0046B468
004E3DE8|.B1 01         MOV CL,1
004E3DEA|.BA 34424E00   MOV EDX,_UnPacke.004E4234                ;Software\SafeBox
004E3DEF|.8BC6          MOV EAX,ESI
004E3DF1|.E8 B677F8FF   CALL _UnPacke.0046B5AC
004E3DF6|.BA 50424E00   MOV EDX,_UnPacke.004E4250                ;RegNo
004E3DFB|.8BC6          MOV EAX,ESI
004E3DFD|.E8 9A7EF8FF   CALL _UnPacke.0046BC9C
004E3E02|.84C0          TEST AL,AL
004E3E04|.75 24         JNZ SHORT _UnPacke.004E3E2A
004E3E06|.8BC6          MOV EAX,ESI
004E3E08|.E8 3701F2FF   CALL _UnPacke.00403F44
004E3E0D|.6A 00         PUSH 0
004E3E0F|.B9 58424E00   MOV ECX,_UnPacke.004E4258                ;私人保险箱
004E3E14|.BA 64424E00   MOV EDX,_UnPacke.004E4264                ;本功能仅限注册用户使用!
004E3E19|.A1 C0CD4E00   MOV EAX,DWORD PTR DS:
004E3E1E|.8B00          MOV EAX,DWORD PTR DS:
004E3E20|.E8 5751F8FF   CALL _UnPacke.00468F7C
004E3E25|.E9 BB030000   JMP _UnPacke.004E41E5
004E3E2A|>8D4D F8       LEA ECX,DWORD PTR SS:
004E3E2D|.BA 50424E00   MOV EDX,_UnPacke.004E4250                ;RegNo
004E3E32|.8BC6          MOV EAX,ESI
004E3E34|.E8 CB7CF8FF   CALL _UnPacke.0046BB04
004E3E39|.8B45 F8       MOV EAX,DWORD PTR SS:
004E3E3C|.50            PUSH EAX
004E3E3D|.6A 03         PUSH 3
004E3E3F|.8D45 EC       LEA EAX,DWORD PTR SS:
004E3E42|.50            PUSH EAX
004E3E43|.B9 02000000   MOV ECX,2
004E3E48|.BA 01000000   MOV EDX,1
004E3E4D|.8B45 FC       MOV EAX,DWORD PTR SS:
004E3E50|.E8 7FBDFEFF   CALL _UnPacke.004CFBD4
004E3E55|.8B45 EC       MOV EAX,DWORD PTR SS:
004E3E58|.8D4D F0       LEA ECX,DWORD PTR SS:
004E3E5B|.BA 03000000   MOV EDX,3
004E3E60|.E8 AFDCF5FF   CALL _UnPacke.00441B14
004E3E65|.FF75 F0       PUSH DWORD PTR SS:
004E3E68|.6A 03         PUSH 3
004E3E6A|.8D45 E4       LEA EAX,DWORD PTR SS:
004E3E6D|.50            PUSH EAX
004E3E6E|.B9 02000000   MOV ECX,2
004E3E73|.BA 01000000   MOV EDX,1
004E3E78|.8B45 FC       MOV EAX,DWORD PTR SS:
004E3E7B|.E8 F8BDFEFF   CALL _UnPacke.004CFC78
004E3E80|.8B45 E4       MOV EAX,DWORD PTR SS:
004E3E83|.8D4D E8       LEA ECX,DWORD PTR SS:
004E3E86|.BA 03000000   MOV EDX,3
004E3E8B|.E8 A0DCF5FF   CALL _UnPacke.00441B30
004E3E90|.FF75 E8       PUSH DWORD PTR SS:
004E3E93|.8D45 E0       LEA EAX,DWORD PTR SS:
004E3E96|.50            PUSH EAX
004E3E97|.6A 03         PUSH 3
004E3E99|.8D45 DC       LEA EAX,DWORD PTR SS:
004E3E9C|.50            PUSH EAX
004E3E9D|.B9 02000000   MOV ECX,2
004E3EA2|.BA 01000000   MOV EDX,1
004E3EA7|.8B45 FC       MOV EAX,DWORD PTR SS:
004E3EAA|.E8 25BDFEFF   CALL _UnPacke.004CFBD4
004E3EAF|.8B45 DC       MOV EAX,DWORD PTR SS:            ; |真码ASCII "079@@O]p",本人的机器码是:ASCII "078BFBFF"
004E3EB2|.B9 02000000   MOV ECX,2                              ; |注意ECX=2
004E3EB7|.BA 03000000   MOV EDX,3                              ; |注意EDX=3
004E3EBC|.E8 93DCF5FF   CALL _UnPacke.00441B54                   ; \_UnPacke.00441B54
004E3EC1|.FF75 E0       PUSH DWORD PTR SS:               ;第三位起,取2位即"9@"
004E3EC4|.8D45 F4       LEA EAX,DWORD PTR SS:
004E3EC7|.BA 03000000   MOV EDX,3
004E3ECC|.E8 7711F2FF   CALL _UnPacke.00405048
004E3ED1|.8B55 F4       MOV EDX,DWORD PTR SS:             ;把这两位码移到最后成了另一组码:ASCII "07@O]p9@",,写在RegNo里,就成功。004E3ED4|.58            POP EAX
004E3ED5|.E8 F211F2FF   CALL _UnPacke.004050CC
004E3EDA|.74 24         JE SHORT _UnPacke.004E3F00
004E3EDC|.8BC6          MOV EAX,ESI
004E3EDE|.E8 6100F2FF   CALL _UnPacke.00403F44
004E3EE3|.6A 00         PUSH 0
004E3EE5|.B9 58424E00   MOV ECX,_UnPacke.004E4258                ;私人保险箱
004E3EEA|.BA 64424E00   MOV EDX,_UnPacke.004E4264                ;本功能仅限注册用户使用!
软件的限制相对比较多,没深入再分析。
根据程序一段算法代码段,我用KeyMake写了一个算法注册机,供大家交流,引用请保存内容完整性:

数据段:szHomePage db "https://www.chinapyg.com/",0
szEmail    db "mailto:[email protected]",0
szErrMessdb "输入的序列号不正确!",0
hKey db 8 dup(0)
;Code By WildCatIII 20090929
;KeyGen For 私人保险箱 6.48代码段:MOV ,EAX;预存机器码到中
MOV EBX,EAX
invoke lstrlen,EBX;取得机器码的位数
MOV EDX,1;同004E4B2F,接着进入算法CALL
MOV ESI,EDX
CMP EAX,8 ;机器码位数检测,是否为8位
JNZ Err;位数不对,跳错。
XOR EBX,EBX
MOV BYTE PTR SS:,AL;位数放同004CFC0E
MOV BL,1
MOV DWORD PTR SS:,0;初始为0,加H表示16进制
MOV DWORD PTR SS:,2
MOV DWORD PTR SS:,3
MOV EDI,1 ;初始EDI,做为hKey存放注册码的指针用
;以下照抄004CFC16-004CFC26代码段
AT004CFC13:
LEA EAX,DWORD PTR SS:
XOR EDX,EDX                           ;EDX清零
MOV DL,BL                               ;计数放DL
MOV ECX,DWORD PTR SS:            ;机器码
MOV DL,BYTE PTR DS:          ;逐位取
MOV ECX,ESI                           ;ECX=ESI
SHR ECX,8                               ;ECX右移8位
XOR DL,CL                               ;DL与CL异或,结果设为Str1
MOV BYTE PTR ,DL            ;把它逐个放到hKey里,最终成为注册码
INC EDI                                 ;EDI指针+1,指向下一位存放位置
XOR EAX,EAX                           ;XOR EAX
MOV AL,DL                               ;AL=DL
ADD ESI,EAX                           ;ESI+EAX,当前位数加上Str1,设为Str2
IMUL ESI,DWORD PTR SS:         ;Str2乘以定值2
ADD ESI,DWORD PTR SS:          ;再加上定值3,结果设为Str3,以备循环使用
INC EBX                                 ;EBX+1
DEC BYTE PTR SS:               ;位数-1,指向下一位机器码
JNZ AT004CFC13             ;重复
LEA EAX,hKey ; 由EAX指向注册码hKey
JMP Show
Err:
LEA EAX,szErrMess ;机器码位数不对,由EAX指向错误提示
Show:
NOP ;

[ 本帖最后由 野猫III 于 2009-9-29 15:02 编辑 ]

月之精灵 发表于 2009-9-29 15:29:42

猫老师又出来了哈,

给你阳光 发表于 2009-9-29 15:43:54

猫兄很强大膜拜已久啊

wan 发表于 2009-9-29 17:39:39

猫闭关这么久该出来晒晒太阳了,呵

MOV 发表于 2009-9-29 20:40:14

就是强大/:010

杨家将 发表于 2009-9-30 16:53:38

猫兄出山了吧

2005ljb 发表于 2009-10-10 20:36:33

感谢猫老大的指点,不过有点小问题,就是在功能限制的第2次验证那里,不是把3,4位简单的移到最后,是先取前3位,然后把3,4位移到最后,再把第5位删除,最后把前3位放在最前面,这样才能通过验证。我的机器码是178BFBFF,注册码是179@@O]q,通过那个验证的注册码是
179O]q9@。我不确定软件是否完全按照我上面的步骤来得到最后的注册码的,因为看到先取了前3位,后来又看到了明码,所以这样推测,删除第5位这一步没跟出来,功力有限。。。。
    非常感谢猫老大用keymake写注册机的教程,以前在网上搜索过,只看到软件自带那个例子,不是很懂,现在猫老的连着发了几篇,好好消化一下。
页: [1] 2
查看完整版本: 学习[PYG]算法分析入门第四课求助