转贴过来的。(感觉不错大家一起学习下)
【文章标题】里诺会员管理软件(单机版)PJ分析及算法zcj
【软件名称】里诺会员管理软件(单机版)
【PJ作者】萧萧黄叶(不是本论坛的)
【下载地址】http://www.onlinedown.net/soft/26837.htm
【加壳方式】Borland Delphi 6.0 - 7.0
【使用工具】OllyICE,PEiD
【软件大小】6041KB
【软件类别】国产软件/办公软件
【软件授权】共享版
【软件语言】简体中文
【运行环境】Win9x/Me/NT/2000/XP/2003
【更新时间】2009-2-11 11:02:39
【软件详细信息】
里诺会员管理软件是一套功能强大的会员管理软件,软件将会员消费,会员基本信息,以及各种查询统计等紧密结合起来,操作简单方便,界面美观大方,能满足如销售,餐饮,美容,服务等行业进行会员制管理,会员卡管理,会员积分管理,会员消费管理的需求,科学的管理方法会给您带来无限的效益,里诺会员管理软件(会员卡管理软件)是您明智的选择。
软件具有以下功能特点:
1、强大的会员管理功能,支持折扣卡、储值卡和计次卡;
2、储值卡和计次卡可设卡密码;
3、支持连接磁卡读/写器等硬件;
4、会员积分管理,并且支持会员积分兑换成礼品(积分自动减少);
5、用户权限支持多用户使用,各个用户根据权限使用相应的功能模块;
6、支持从外部的Excel文件导入会员和商品资料,减少期初的录入工作量;
7、各种数据和报表可以方便转换为Excel数据格式导出;
8、各种报表支持自定义;
9、数据备份/恢复功能帮您以备不测。
里诺会员管理软件适合美容美发、健身等场所管理会员使用。网络版可以多台电脑联网使用,数据共享,同时操作等各项功能。
【详细过程】
运行程序发现提示要注册。
第一步,探壳。
PEiD:Borland Delphi 6.0 - 7.0
第二步,用OD分析。
载入程序后停在下面:
007480B0 > $ 55 PUSH EBP
007480B1 . 8BEC MOV EBP,ESP
F9运行,注册,我用123456789来注册,在确定之前下万能断点,确定后程序被断在下面:
77D33566 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>
77D33568 8BC8 MOV ECX,EAX
清除断点,不断的CTRL+F9,一直返回到这里:
0065E34E |. 85C0 TEST EAX,EAX
0065E350 |. 75 29 JNZ SHORT member.0065E37B
向上在0065E320 /. 55 PUSH EBP
下断点,F9后再次确定,程序断在此处:
0065E320 /. 55 PUSH EBP ; 再次断在这里,向下F8单步
0065E321 |. 8BEC MOV EBP,ESP
0065E323 |. 6A 00 PUSH 0
0065E325 |. 6A 00 PUSH 0
0065E327 |. 53 PUSH EBX
0065E328 |. 8BD8 MOV EBX,EAX
0065E32A |. 33C0 XOR EAX,EAX
0065E32C |. 55 PUSH EBP
0065E32D |. 68 E0E36500 PUSH member.0065E3E0
0065E332 |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0065E335 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0065E338 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
0065E33B |. 8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
0065E341 |. E8 9EE8E2FF CALL member.0048CBE4 ; 计算用户名的位数,我的用户名位数为8
0065E346 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 用户名,我这里为 "E1LAJYYE"
0065E349 |. E8 4E6CDAFF CALL member.00404F9C
0065E34E |. 85C0 TEST EAX,EAX ; 比较看看用户名是否为空。
0065E350 |. 75 29 JNZ SHORT member.0065E37B ; 有用户名就跳走
0065E352 |. 6A 40 PUSH 40
0065E354 |. 68 ECE36500 PUSH member.0065E3EC
0065E359 |. 68 F4E36500 PUSH member.0065E3F4
0065E35E |. 8BC3 MOV EAX,EBX
0065E360 |. E8 2B53E3FF CALL member.00493690
0065E365 |. 50 PUSH EAX ; |hOwner
0065E366 |. E8 15A1DAFF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
0065E36B |. 8B83 00030000 MOV EAX,DWORD PTR DS:[EBX+300]
0065E371 |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
0065E373 |. FF92 C4000000 CALL DWORD PTR DS:[EDX+C4]
0065E379 |. EB 4A JMP SHORT member.0065E3C5
0065E37B |> 8D55 F8 LEA EDX,DWORD PTR SS:[EBP-8]
0065E37E |. 8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
0065E384 |. E8 5BE8E2FF CALL member.0048CBE4 ; 取得注册码的位数,我的注册码位数为9
0065E389 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; 注册码,我这里当然为123456789
0065E38C |. E8 0B6CDAFF CALL member.00404F9C
0065E391 |. 85C0 TEST EAX,EAX ; 比较看看注册码是否为空。
0065E393 |. 75 29 JNZ SHORT member.0065E3BE
0065E395 |. 6A 40 PUSH 40
0065E397 |. 68 ECE36500 PUSH member.0065E3EC
0065E39C |. 68 04E46500 PUSH member.0065E404
0065E3A1 |. 8BC3 MOV EAX,EBX
0065E3A3 |. E8 E852E3FF CALL member.00493690
0065E3A8 |. 50 PUSH EAX ; |hOwner
0065E3A9 |. E8 D2A0DAFF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA
0065E3AE |. 8B83 04030000 MOV EAX,DWORD PTR DS:[EBX+304]
0065E3B4 |. 8B10 MOV EDX,DWORD PTR DS:[EAX]
0065E3B6 |. FF92 C4000000 CALL DWORD PTR DS:[EDX+C4]
0065E3BC |. EB 07 JMP SHORT member.0065E3C5
0065E3BE |> 8BC3 MOV EAX,EBX
0065E3C0 |. E8 5BFBFFFF CALL member.0065DF20 ; 这里要跟进了。
0065E3C5 |> 33C0 XOR EAX,EAX
跟进0065E3C0 CALL:
0065DF20 $ 55 PUSH EBP
0065DF21 . 8BEC MOV EBP,ESP
0065DF23 . 33C9 XOR ECX,ECX
0065DF25 . 51 PUSH ECX
0065DF26 . 51 PUSH ECX
0065DF27 . 51 PUSH ECX
0065DF28 . 51 PUSH ECX
0065DF29 . 51 PUSH ECX
0065DF2A . 53 PUSH EBX
0065DF2B . 56 PUSH ESI
0065DF2C . 57 PUSH EDI
0065DF2D . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0065DF30 . 33C0 XOR EAX,EAX
0065DF32 . 55 PUSH EBP
0065DF33 . 68 71E06500 PUSH member.0065E071
0065DF38 . 64:FF30 PUSH DWORD PTR FS:[EAX]
0065DF3B . 64:8920 MOV DWORD PTR FS:[EAX],ESP
0065DF3E . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0065DF41 . E8 AE020000 CALL member.0065E1F4 ; 关键CALL,一定要跟进。
0065DF46 . 84C0 TEST AL,AL
0065DF48 . 0F84 DB000000 JE member.0065E029 ; 关键跳,一跳就死。
0065DF4E . 33C0 XOR EAX,EAX
0065DF41 CALL member.0065E1F4继续跟进:
0065E1F4 /$ 55 PUSH EBP
0065E1F5 |. 8BEC MOV EBP,ESP
0065E1F7 |. 33C9 XOR ECX,ECX
0065E1F9 |. 51 PUSH ECX
0065E1FA |. 51 PUSH ECX
0065E1FB |. 51 PUSH ECX
0065E1FC |. 51 PUSH ECX
0065E1FD |. 51 PUSH ECX
0065E1FE |. 53 PUSH EBX
0065E1FF |. 56 PUSH ESI
0065E200 |. 8BF0 MOV ESI,EAX
0065E202 |. 33C0 XOR EAX,EAX
0065E204 |. 55 PUSH EBP
0065E205 |. 68 AFE26500 PUSH member.0065E2AF
0065E20A |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0065E20D |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0065E210 |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]
0065E213 |. 8B86 04030000 MOV EAX,DWORD PTR DS:[ESI+304]
0065E219 |. E8 C6E9E2FF CALL member.0048CBE4
0065E21E |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] ; 将注册码移到EAX
0065E221 |. 50 PUSH EAX
0065E222 |. 8D55 F4 LEA EDX,DWORD PTR SS:[EBP-C]
0065E225 |. 8B86 00030000 MOV EAX,DWORD PTR DS:[ESI+300]
0065E22B |. E8 B4E9E2FF CALL member.0048CBE4
0065E230 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; 将用户名移到EDX
0065E233 |. 8D4D F8 LEA ECX,DWORD PTR SS:[EBP-8]
0065E236 |. 8BC6 MOV EAX,ESI
0065E238 |. E8 F3FAFFFF CALL member.0065DD30 ; 这里是计算过程,跟进了。
0065E23D |. 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]
0065E238 CALL member.0065DD30跟进:
0065DD30 /$ 55 PUSH EBP
0065DD31 |. 8BEC MOV EBP,ESP
省略一部分,F8单步:
0065DD77 |. BB 01000000 MOV EBX,1
0065DD7C |> 8D4D EC /LEA ECX,DWORD PTR SS:[EBP-14]
0065DD7F |. 8B45 FC |MOV EAX,DWORD PTR SS:[EBP-4]
0065DD82 |. 0FB64418 FF |MOVZX EAX,BYTE PTR DS:[EAX+EBX-1] ; 按序取取用户名的每一位字符的ASCII码。
0065DD87 |. 33D2 |XOR EDX,EDX
0065DD89 |. E8 E6C8DAFF |CALL member.0040A674
0065DD8E |. 8B55 EC |MOV EDX,DWORD PTR SS:[EBP-14]
0065DD91 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[EBP-8]
0065DD94 |. E8 0B72DAFF |CALL member.00404FA4
0065DD99 |. 43 |INC EBX
0065DD9A |. 4E |DEC ESI
0065DD9B |.^ 75 DF \JNZ SHORT member.0065DD7C ; 最终将用户名字符的每一位的ASCII码连起来。我这里为"45314C414A595945"
0065DD9D |> 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0065DDA0 |. E8 F771DAFF CALL member.00404F9C
0065DDA5 |. 8BF0 MOV ESI,EAX
0065DDA7 |. 85F6 TEST ESI,ESI
0065DDA9 |. 7E 2C JLE SHORT member.0065DDD7
0065DDAB |. BB 01000000 MOV EBX,1
0065DDB0 |> 8B45 F8 /MOV EAX,DWORD PTR SS:[EBP-8]
0065DDB3 |. E8 E471DAFF |CALL member.00404F9C
0065DDB8 |. 2BC3 |SUB EAX,EBX
0065DDBA |. 8B55 F8 |MOV EDX,DWORD PTR SS:[EBP-8]
0065DDBD |. 8A1402 |MOV DL,BYTE PTR DS:[EDX+EAX]
0065DDC0 |. 8D45 E8 |LEA EAX,DWORD PTR SS:[EBP-18]
0065DDC3 |. E8 EC70DAFF |CALL member.00404EB4
0065DDC8 |. 8B55 E8 |MOV EDX,DWORD PTR SS:[EBP-18]
0065DDCB |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
0065DDCE |. E8 D171DAFF |CALL member.00404FA4
0065DDD3 |. 43 |INC EBX
0065DDD4 |. 4E |DEC ESI
0065DDD5 |.^ 75 D9 \JNZ SHORT member.0065DDB0 ; 将刚才的ASCII码串倒序。我的为: "549595A414C41354"
0065DDD7 |> 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
0065DDDA |. 50 PUSH EAX
0065DDDB |. B9 04000000 MOV ECX,4
0065DDE0 |. BA 01000000 MOV EDX,1
0065DDE5 |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0065DDE8 |. E8 0F74DAFF CALL member.004051FC
0065DDED |. 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
0065DDF0 |. 50 PUSH EAX
0065DDF1 |. B9 04000000 MOV ECX,4
0065DDF6 |. BA 05000000 MOV EDX,5
0065DDFB |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0065DDFE |. E8 F973DAFF CALL member.004051FC ; 取倒序后的字串的前四位及第二个四位
0065DE03 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0065DE06 |. E8 9171DAFF CALL member.00404F9C
0065DE0B |. 83F8 04 CMP EAX,4
0065DE0E |. 7D 2F JGE SHORT member.0065DE3F
0065DE10 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0065DE13 |. E8 8471DAFF CALL member.00404F9C
0065DE18 |. 8BD8 MOV EBX,EAX
0065DE1A |. 83FB 03 CMP EBX,3
0065DE1D |. 7F 20 JG SHORT member.0065DE3F
0065DE1F |> 8D4D E4 /LEA ECX,DWORD PTR SS:[EBP-1C]
0065DE22 |. 8BC3 |MOV EAX,EBX
0065DE24 |. C1E0 02 |SHL EAX,2
0065DE27 |. 33D2 |XOR EDX,EDX
0065DE29 |. E8 46C8DAFF |CALL member.0040A674
0065DE2E |. 8B55 E4 |MOV EDX,DWORD PTR SS:[EBP-1C]
0065DE31 |. 8D45 F8 |LEA EAX,DWORD PTR SS:[EBP-8]
0065DE34 |. E8 6B71DAFF |CALL member.00404FA4
0065DE39 |. 43 |INC EBX
0065DE3A |. 83FB 04 |CMP EBX,4
0065DE3D |.^ 75 E0 \JNZ SHORT member.0065DE1F
0065DE3F |> 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0065DE42 |. E8 5571DAFF CALL member.00404F9C
0065DE47 |. 83F8 04 CMP EAX,4
0065DE4A |. 7D 2F JGE SHORT member.0065DE7B
0065DE4C |. 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0065DE4F |. E8 4871DAFF CALL member.00404F9C
0065DE54 |. 8BD8 MOV EBX,EAX
0065DE56 |. 83FB 03 CMP EBX,3
0065DE59 |. 7F 20 JG SHORT member.0065DE7B
0065DE5B |> 8D4D E0 /LEA ECX,DWORD PTR SS:[EBP-20]
0065DE5E |. 8BC3 |MOV EAX,EBX
0065DE60 |. C1E0 02 |SHL EAX,2
0065DE63 |. 33D2 |XOR EDX,EDX
0065DE65 |. E8 0AC8DAFF |CALL member.0040A674
0065DE6A |. 8B55 E0 |MOV EDX,DWORD PTR SS:[EBP-20]
0065DE6D |. 8D45 F4 |LEA EAX,DWORD PTR SS:[EBP-C]
0065DE70 |. E8 2F71DAFF |CALL member.00404FA4
0065DE75 |. 43 |INC EBX
0065DE76 |. 83FB 04 |CMP EBX,4
0065DE79 |.^ 75 E0 \JNZ SHORT member.0065DE5B
0065DE7B |> 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
0065DE7E |. BA 08DF6500 MOV EDX,member.0065DF08 ; ASCII "mem45erpe"
0065DE83 |. E8 DC6EDAFF CALL member.00404D64 ; 取固定码 "mem45erpe"
0065DE88 |. 8D45 DC LEA EAX,DWORD PTR SS:[EBP-24]
0065DE8B |. 50 PUSH EAX
0065DE8C |. B9 04000000 MOV ECX,4
0065DE91 |. BA 01000000 MOV EDX,1
0065DE96 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0065DE99 |. E8 5E73DAFF CALL member.004051FC ; 取固定码 前四位"mem4"
0065DE9E |. FF75 DC PUSH DWORD PTR SS:[EBP-24]
0065DEA1 |. 68 1CDF6500 PUSH member.0065DF1C
0065DEA6 |. FF75 F8 PUSH DWORD PTR SS:[EBP-8]
0065DEA9 |. 8D45 D8 LEA EAX,DWORD PTR SS:[EBP-28]
0065DEAC |. 50 PUSH EAX
0065DEAD |. B9 05000000 MOV ECX,5
0065DEB2 |. BA 05000000 MOV EDX,5
0065DEB7 |. 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
0065DEBA |. E8 3D73DAFF CALL member.004051FC ; 取固定码的剩余部分
0065DEBF |. FF75 D8 PUSH DWORD PTR SS:[EBP-28]
0065DEC2 |. 68 1CDF6500 PUSH member.0065DF1C
0065DEC7 |. FF75 F4 PUSH DWORD PTR SS:[EBP-C]
0065DECA |. 8BC7 MOV EAX,EDI
0065DECC |. BA 06000000 MOV EDX,6
0065DED1 |. E8 8671DAFF CALL member.0040505C ; 将四部分的KEY连起来就是正确的注册码。
0065DED6 |. 33C0 XOR EAX,EAX
【算法过程】取固定码 "mem45erpe"前四位作为注册码的第一部分,并用“-”连接下一部分,剩余部分作为第三部分,仍用“-”连接下一部分。
计算用户名各字符的ASCII码,并倒序,前四位作为第二部分注册码,第二个四位作为第四部分注册码。
四个相连就是正确的注册码了。
【总结】一、软件未加壳,容易分析;二、明码对比,容易暴破和做成内存zcj;三、算法简单,并使用固定码。
【PJ声明】本文只是出于教学目的,请勿用于商业用途,否则后果自负。软件版权归作者所有。
附:虽然软件更新了,但算法一样。
[ 本帖最后由 戥锌№辰 于 2009-2-12 10:11 编辑 ] |