首页
社区
课程
招聘
[旧帖] [原创]日程助手(金猪版)算法分析和Delphi注册机编写 0.00雪花
发表于: 2007-12-30 09:31 3454

[旧帖] [原创]日程助手(金猪版)算法分析和Delphi注册机编写 0.00雪花

2007-12-30 09:31
3454
【文章标题】: 日程助手(金猪版)算法分析和Delphi注册机编写
【文章作者】: 海浪轻风(黄仁来)
【作者邮箱】: futuring@126.com
【作者主页】: http://hi.baidu.com/beyond0769
【软件名称】: 日程助手(金猪版)
【软件大小】: 939 KB
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Delphi6/7
【使用工具】: PEid, OllyDbg
【操作平台】: WinXP
【软件介绍】: 日程助手金猪版是一款帮助个人进行日程管理和提醒的
【作者声明】: 刚学破解,非一般的菜,第一次写注册机,只是感兴趣,没有其他目的。感谢fwycfpg的指点。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
    PEid查无壳,用Delphi编写。马上出现注册验证。随便输入一组试炼码后点“注册”出现错误提示
  “注册码不正确,请注册申请注册码!”迅速用OD载入运行,查找该ASCII字符串,定位到算法过程如下:
  004DD8BE   .  55            PUSH EBP
  004DD8BF   .  68 D4D94D00   PUSH MyAssist.004DD9D4
  004DD8C4   .  64:FF30       PUSH DWORD PTR FS:[EAX]
  004DD8C7   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
  004DD8CA   .  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
  004DD8CD   .  8B83 0C030000 MOV EAX,DWORD PTR DS:[EBX+30C]
  004DD8D3   .  E8 C429F7FF   CALL MyAssist.0045029C
  004DD8D8   .  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
  004DD8DB   .  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
  004DD8DE   .  E8 31B1F2FF   CALL MyAssist.00408A14
  004DD8E3   .  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]
  004DD8E6   .  50            PUSH EAX
  004DD8E7   .  8D45 E8       LEA EAX,DWORD PTR SS:[EBP-18]
  004DD8EA   .  E8 CD16FFFF   CALL MyAssist.004CEFBC
  004DD8EF   .  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]            ;  读取机器码
  004DD8F2   .  8D55 EC       LEA EDX,DWORD PTR SS:[EBP-14]
  004DD8F5   .  E8 EA15FFFF   CALL MyAssist.004CEEE4                   ;  关键算法CALL F7进入
  004DD8FA   .  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
  004DD8FD   .  8D55 F0       LEA EDX,DWORD PTR SS:[EBP-10]
  004DD900   .  E8 0FB1F2FF   CALL MyAssist.00408A14
  004DD905   .  8B55 F0       MOV EDX,DWORD PTR SS:[EBP-10]
  004DD908   .  58            POP EAX
  004DD909   .  E8 8E6DF2FF   CALL MyAssist.0040469C
  004DD90E   .  0F85 8B000000 JNZ MyAssist.004DD99F          ;  爆破点,不能跳
  004DD914   .  B2 01         MOV DL,1
  004DD916   .  A1 DC964300   MOV EAX,DWORD PTR DS:[4396DC]
  004DD91B   .  E8 BCBEF5FF   CALL MyAssist.004397DC
  004DD920   .  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
  004DD923   .  33C0          XOR EAX,EAX
  004DD925   .  55            PUSH EBP
  004DD926   .  68 98D94D00   PUSH MyAssist.004DD998
  004DD92B   .  64:FF30       PUSH DWORD PTR FS:[EAX]
  004DD92E   .  64:8920       MOV DWORD PTR FS:[EAX],ESP
  004DD931   .  BA 02000080   MOV EDX,80000002
  004DD936   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  004DD939   .  E8 3EBFF5FF   CALL MyAssist.0043987C
  004DD93E   .  33C9          XOR ECX,ECX
  004DD940   .  BA E8D94D00   MOV EDX,MyAssist.004DD9E8                ;  software\jzassistant\option
  004DD945   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  004DD948   .  E8 93BFF5FF   CALL MyAssist.004398E0
  004DD94D   .  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
  004DD950   .  E8 6716FFFF   CALL MyAssist.004CEFBC
  004DD955   .  8B45 E0       MOV EAX,DWORD PTR SS:[EBP-20]
  004DD958   .  8D55 E4       LEA EDX,DWORD PTR SS:[EBP-1C]
  004DD95B   .  E8 8415FFFF   CALL MyAssist.004CEEE4
  004DD960   .  8B4D E4       MOV ECX,DWORD PTR SS:[EBP-1C]
  004DD963   .  BA 0CDA4D00   MOV EDX,MyAssist.004DDA0C                ;  registrycode
  004DD968   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  004DD96B   .  E8 2CC1F5FF   CALL MyAssist.00439A9C
  004DD970   .  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  004DD973   .  E8 D4BEF5FF   CALL MyAssist.0043984C
  004DD978   .  B8 24DA4D00   MOV EAX,MyAssist.004DDA24                ;  注册成功!
  004DD97D   .  E8 6A63F5FF   CALL MyAssist.00433CEC
  004DD982   .  33C0          XOR EAX,EAX
  004DD984   .  5A            POP EDX
  004DD985   .  59            POP ECX
  004DD986   .  59            POP ECX
  004DD987   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
  004DD98A   .  68 A9D94D00   PUSH MyAssist.004DD9A9
  004DD98F   >  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  004DD992   .  E8 C95AF2FF   CALL MyAssist.00403460
  004DD997   .  C3            RETN
  004DD998   .^ E9 1762F2FF   JMP MyAssist.00403BB4
  004DD99D   .^ EB F0         JMP SHORT MyAssist.004DD98F
  004DD99F   >  B8 38DA4D00   MOV EAX,MyAssist.004DDA38                ;  注册码不正确,请注册申请注册码!
  004DD9A4   .  E8 4363F5FF   CALL MyAssist.00433CEC
  004DD9A9   .  33C0          XOR EAX,EAX
  004DD9AB   .  5A            POP EDX
  004DD9AC   .  59            POP ECX
  004DD9AD   .  59            POP ECX
  004DD9AE   .  64:8910       MOV DWORD PTR FS:[EAX],EDX
  004DD9B1   .  68 DBD94D00   PUSH MyAssist.004DD9DB
  004DD9B6   >  8D45 E0       LEA EAX,DWORD PTR SS:[EBP-20]
  004DD9B9   .  BA 05000000   MOV EDX,5
  004DD9BE   .  E8 F168F2FF   CALL MyAssist.004042B4
  004DD9C3   .  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
  004DD9C6   .  E8 C568F2FF   CALL MyAssist.00404290
  004DD9CB   .  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
  004DD9CE   .  E8 BD68F2FF   CALL MyAssist.00404290
  004DD9D3   .  C3            RETN
  004DD9D4   .^ E9 DB61F2FF   JMP MyAssist.00403BB4
  004DD9D9   .^ EB DB         JMP SHORT MyAssist.004DD9B6
  004DD9DB   .  5B            POP EBX
  004DD9DC   .  8BE5          MOV ESP,EBP
  004DD9DE   .  5D            POP EBP
  004DD9DF   .  C3            RETN
  _______________________________________
  
  进入关键算法 CALL MyAssist.004CEEE4  :
  004CEEE4  /$  55            PUSH EBP
  004CEEE5  |.  8BEC          MOV EBP,ESP
  004CEEE7  |.  83C4 F0       ADD ESP,-10
  004CEEEA  |.  53            PUSH EBX
  004CEEEB  |.  56            PUSH ESI
  004CEEEC  |.  33C9          XOR ECX,ECX
  004CEEEE  |.  894D F0       MOV DWORD PTR SS:[EBP-10],ECX
  004CEEF1  |.  894D F4       MOV DWORD PTR SS:[EBP-C],ECX
  004CEEF4  |.  8955 F8       MOV DWORD PTR SS:[EBP-8],EDX
  004CEEF7  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
  004CEEFA  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
  004CEEFD  |.  E8 3E58F3FF   CALL MyAssist.00404740
  004CEF02  |.  33C0          XOR EAX,EAX
  004CEF04  |.  55            PUSH EBP
  004CEF05  |.  68 ADEF4C00   PUSH MyAssist.004CEFAD
  004CEF0A  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
  004CEF0D  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
  004CEF10  |.  33DB          XOR EBX,EBX
  004CEF12  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  出现机器码,记为 MCode
  004CEF15  |.  E8 3656F3FF   CALL MyAssist.00404550                   ;  返回机器码长度 Length(MCode)
  004CEF1A  |.  8BD0          MOV EDX,EAX
  004CEF1C  |.  85D2          TEST EDX,EDX
  004CEF1E  |.  76 18         JBE SHORT MyAssist.004CEF38              ;  不能小于等于0
  004CEF20  |.  B8 01000000   MOV EAX,1
  004CEF25  |>  8B4D FC       /MOV ECX,DWORD PTR SS:[EBP-4]            ;  for i:=1 to Length(MCode)
  004CEF28  |.  0FB64C01 FF   |MOVZX ECX,BYTE PTR DS:[ECX+EAX-1]       ;  ECX:= ord(MCode[i])
  004CEF2D  |.  03D9          |ADD EBX,ECX                             ;  累加MCode每位ASCII值
  004CEF2F  |.  8D0CDB        |LEA ECX,DWORD PTR DS:[EBX+EBX*8]        ;  再乘以9
  004CEF32  |.  8BD9          |MOV EBX,ECX
  004CEF34  |.  40            |INC EAX
  004CEF35  |.  4A            |DEC EDX
  004CEF36  |.^ 75 ED         \JNZ SHORT MyAssist.004CEF25             ;  如果不等于Length(MCode)则继续循环
  004CEF38  |>  8BC3          MOV EAX,EBX                              ;  计算结果,记为Code1
  004CEF3A  |.  33D2          XOR EDX,EDX
  004CEF3C  |.  52            PUSH EDX                                 ; /Arg2 => 00000000
  004CEF3D  |.  50            PUSH EAX                                 ; |Arg1
  004CEF3E  |.  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]             ; |
  004CEF41  |.  E8 229FF3FF   CALL MyAssist.00408E68                   ; \MyAssist.00408E68
  004CEF46  |.  8BF3          MOV ESI,EBX                              ;  取Code1的十进制无符号值,inttostr(Code1);
  004CEF48  |.  33DB          XOR EBX,EBX
  004CEF4A  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]
  004CEF4D  |.  E8 FE55F3FF   CALL MyAssist.00404550                   ;  返回Code1的长度
  004CEF52  |.  83F8 01       CMP EAX,1                                ;  必须大于等于1
  004CEF55  |.  72 14         JB SHORT MyAssist.004CEF6B
  004CEF57  |>  8B55 F4       /MOV EDX,DWORD PTR SS:[EBP-C]            ;  for i:=Length(Code1) downto 1 do
  004CEF5A  |.  0FB65402 FF   |MOVZX EDX,BYTE PTR DS:[EDX+EAX-1]       ;  Code1[i]; //倒过来取每位ASCII
  004CEF5F  |.  03DA          |ADD EBX,EDX                             ;  累加
  004CEF61  |.  8D14DB        |LEA EDX,DWORD PTR DS:[EBX+EBX*8]        ;  乘以9
  004CEF64  |.  8BDA          |MOV EBX,EDX
  004CEF66  |.  48            |DEC EAX
  004CEF67  |.  85C0          |TEST EAX,EAX
  004CEF69  |.^ 75 EC         \JNZ SHORT MyAssist.004CEF57             ;  计算结果入EBX,记为Code2
  004CEF6B  |>  03F3          ADD ESI,EBX                              ;  Cold1+Cold2 (十六进制)
  004CEF6D  |.  D1EE          SHR ESI,1                                ;  ESI:=ESI SHR 1
  004CEF6F  |.  8BDE          MOV EBX,ESI
  004CEF71  |.  8BC3          MOV EAX,EBX                              ;  计算结果入EAX,
  004CEF73  |.  33D2          XOR EDX,EDX
  004CEF75  |.  52            PUSH EDX                                 ; /Arg2 => 00000000
  004CEF76  |.  50            PUSH EAX                                 ; |Arg1
  004CEF77  |.  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]            ; |
  004CEF7A  |.  E8 E99EF3FF   CALL MyAssist.00408E68                   ; \MyAssist.00408E68
  004CEF7F  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]            ;  EAX转换为十进制的字符串值为真正注册码
  004CEF82  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]
  004CEF85  |.  E8 8A9AF3FF   CALL MyAssist.00408A14
  004CEF8A  |.  33C0          XOR EAX,EAX
  004CEF8C  |.  5A            POP EDX
  004CEF8D  |.  59            POP ECX
  004CEF8E  |.  59            POP ECX
  004CEF8F  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
  004CEF92  |.  68 B4EF4C00   PUSH MyAssist.004CEFB4
  004CEF97  |>  8D45 F0       LEA EAX,DWORD PTR SS:[EBP-10]
  004CEF9A  |.  BA 02000000   MOV EDX,2
  004CEF9F  |.  E8 1053F3FF   CALL MyAssist.004042B4
  004CEFA4  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
  004CEFA7  |.  E8 E452F3FF   CALL MyAssist.00404290
  004CEFAC  \.  C3            RETN
  
  〖算法总结〗
  
  程序利用生成的机器码进行下列计算:
  1、从左到右取每位机器码ASCII值,乘以9,再累加起来得出 Code1;
  2、取Code1的十进制无符号值转为字符串,即inttstor(Code1);
  3、再把inttstor(Code1)从右到左取ASCII码乘以9累加起来得出 Code2;
  4、(Code1 + Code 2) shr 1
  5、把计算结果的十进制无符号值转为字符串即真正注册码.
  
  
  〖算法注册机〗
    本人只会Delphi,只能用它来写啦~~~
  
  function GetKey(MCode:string): string;
  var
     a,b:longWord; //定义为LongWord类型非常重要
     i:integer;
     Code1,Code2: string;
  begin
     a:=0; b:=0;
     Code1:=MCode; //取机器码;
     for i:=1 to Length(Code1) do a:=(a+ord(Code1[i]))*9; //循环取机器码ASCII值*9 之和
     Code1:=inttostr(a); //此时返回值为十进制的“无符号”值字符串
     for i:= Length(Code1) downto 1 do b:= (b+ ord(Code1[i]))*9; //循环取Code1的ASCII值*9 之和
     Code2:=inttostr(b);
     Result:= inttostr((a+b) shr 1); // Code1和Code2之和 再shr 1 运算,转十进制字符串即可。
  end;
  
  我的机器码是:-1074964643
     注册码:545040015
  
--------------------------------------------------------------------------------
【经验总结】
  开始遇到一个很郁闷的问题,不知道十六进制转十进制时有两个结果,一个是有符号值,一个是无符号值。一开始
  把变a,b定义为integer时,用inttostr(Code1)返回的值是有符号的十进制值的字符串,但人家要的是无符号值,后来狂搜
  百度,才发现要把a,b定义为LongWord类型才能返回无符号值,搞定!!!
  
  本破解没有什么技术含量,参考fwycfpg对1.0版本的破解思路,在此再次感谢fwycfpg!!
  
  Written by 黄仁来[东莞群英]
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年12月30日 9:28:36

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ltr
2
学习一下....
2007-12-30 14:13
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢分尝,学习。。
2008-1-2 15:11
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢,分享呀。

学习一下。
2008-1-2 16:05
0
游客
登录 | 注册 方可回帖
返回
//