文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → GIF Movie Gear 3.0.2pj心得 算法分析

GIF Movie Gear 3.0.2pj心得 算法分析

时间:2004/10/15 0:55:00来源:本站整理作者:蓝点我要评论(0)

 软件名称:GIF Movie Gear 3.0.2
文件大小:1145KB
软件授权:共享软件
使用平台:Win95/98
软件简介:
 软件简介:
  GIF动画制作软件,几乎有需要制作GIF动画的编辑功能它都有,无须再用其它的图型软件辅助。
它可以处理背景透明化而且做法容易,做好的图片可以做最佳化处理使图片减肥,另外它除了可以
把做好的图片存成GIF的动画图外。还可以存成AVI或是ANI的文件格式。


下载地址:http://www.onlinedown.net/gifmoviegear.htm
-----------------------------------------------------------------------

破解工具:OLLYDBG V1.07
 TC2.0

破解者:青锋剑客

破解目的:加入DFCG,找注册码,算法简单分析,作出相应注册机。

破解过程:

一、ollydbg1.07载入“movgear.exe”,按F9键运行,点"help"-->"Register Now...",name填入shifeng
Code填入87654321,填好后按“OK”,弹出错误"The information you have provided is invalid. Please be sure that you typed it exactly as it was given to you.",此时不要点确定,看下一步。

二、回到ollydbg窗口,在左上角CPU点右键-->search for-->All referenced text strings,打开了Text strings referenced in MOVGEAR:.text, 按Page Up键查找"The information you have provided is invalid. Please be sure that you typed it exactly as it was given to you."有两行,双击任一个,
会来到这里:

0040EE60  /$ 8B4424 04      MOV EAX,DWORD PTR SS:[ESP+4]
0040EE64  |. 8B0D 68854600  MOV ECX,DWORD PTR DS:[468568]            ;  MOVGEAR.00400000
0040EE6A  |. 68 00020000    PUSH 200                                 ; /Count = 200 (512.)
0040EE6F  |. 68 40834600    PUSH MOVGEAR.00468340                    ; |Buffer = MOVGEAR.00468340
0040EE74  |. 50             PUSH EAX                                 ; |RsrcID
0040EE75  |. 51             PUSH ECX                                 ; |hInst => 00400000
0040EE76  |. FF15 64844400  CALL DWORD PTR DS:[<&USER32.LoadStringA>>; \LoadStringA
0040EE7C  |. 85C0           TEST EAX,EAX
0040EE7E  |. 74 0D          JE SHORT MOVGEAR.0040EE8D
0040EE80  |. 3D 00020000    CMP EAX,200
0040EE85  |. 7D 06          JGE SHORT MOVGEAR.0040EE8D
0040EE87  |. B8 40834600    MOV EAX,MOVGEAR.00468340                 ;  ASCII "The information you have provided is invalid. Please be sure that you typed it exactly as it was given to you."
0040EE8C  |. C3             RETN
0040EE8D  |> 33C0           XOR EAX,EAX
0040EE8F  \. C3             RETN

三、在0040EE60行按F2下断点,重新运行,中断到此处,此时在右下方的堆栈区会看到
006BF224  0040EECC  RETURN to MOVGEAR.0040EECC from MOVGEAR.0040EE60

四、看一下0040EECC行上下代码如下:

0040EE90  /$ 8B4C24 0C      MOV ECX,DWORD PTR SS:[ESP+C]
0040EE94  |. 8B15 68854600  MOV EDX,DWORD PTR DS:[468568]            ;  MOVGEAR.00400000
0040EE9A  |. 81EC 00010000  SUB ESP,100
0040EEA0  |. 8D4424 00      LEA EAX,DWORD PTR SS:[ESP]
0040EEA4  |. 68 FF000000    PUSH 0FF                                 ; /Count = FF (255.)
0040EEA9  |. 50             PUSH EAX                                 ; |Buffer
0040EEAA  |. 51             PUSH ECX                                 ; |RsrcID
0040EEAB  |. 52             PUSH EDX                                 ; |hInst => 00400000
0040EEAC  |. FF15 64844400  CALL DWORD PTR DS:[<&USER32.LoadStringA>>; \LoadStringA
0040EEB2  |. 8B8424 1001000>MOV EAX,DWORD PTR SS:[ESP+110]
0040EEB9  |. 8B9424 0801000>MOV EDX,DWORD PTR SS:[ESP+108]
0040EEC0  |. 8D4C24 00      LEA ECX,DWORD PTR SS:[ESP]
0040EEC4  |. 50             PUSH EAX
0040EEC5  |. 51             PUSH ECX
0040EEC6  |. 52             PUSH EDX
0040EEC7  |. E8 94FFFFFF    CALL MOVGEAR.0040EE60
0040EECC  |. 83C4 04        ADD ESP,4
0040EECF  |. 50             PUSH EAX                                 ; |Text
0040EED0  |. 8B8424 1001000>MOV EAX,DWORD PTR SS:[ESP+110]           ; |
0040EED7  |. 50             PUSH EAX                                 ; |hOwner
0040EED8  |. FF15 68844400  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0040EEDE  |. 81C4 00010000  ADD ESP,100
0040EEE4  \. C3             RETN

清除0040EE60处的断点,在0040EE90行按F2下断点,重新运行,中断后在右下方的堆栈区会看到:
006BF334  00431A63  RETURN to MOVGEAR.00431A63 from MOVGEAR.0040EE90

五、如上清除0040EE90处的断点,看00431A63行上下代码:

00431A51   > 6A 30          PUSH 30
00431A53   . 68 159D0000    PUSH 9D15
00431A58   . 68 149D0000    PUSH 9D14
00431A5D   . 56             PUSH ESI
00431A5E   . E8 2DD4FDFF    CALL MOVGEAR.0040EE90
00431A63   . 83C4 10        ADD ESP,10
00431A66   . 68 4F040000    PUSH 44F
00431A6B   . 56             PUSH ESI
00431A6C   . FFD7           CALL EDI
00431A6E   . 50             PUSH EAX                                 ; /hWnd
00431A6F   . FF15 B4834400  CALL DWORD PTR DS:[<&USER32.SetFocus>]   ; \SetFocus
00431A75   > 5F             POP EDI                                  ;  Default case of switch
00431A76   . 5E             POP ESI
00431A77   . 33C0           XOR EAX,EAX
00431A79   . 5B             POP EBX
00431A7A   . 81C4 1C010000  ADD ESP,11C
00431A80   . C2 1000        RETN 10

六、注意00431A51右面的>,向上看是哪里跳到这里。

0043194D   > 8BB424 2C01000>MOV ESI,DWORD PTR SS:[ESP+12C]           ;  Case 1 of switch 00431925
00431954   . 8B3D 7C844400  MOV EDI,DWORD PTR DS:[<&USER32.GetDlgIte>
0043195A   . 8D4C24 60      LEA ECX,DWORD PTR SS:[ESP+60]
0043195E   . 6A 64          PUSH 64                                  ; /Count = 64 (100.)
00431960   . 51             PUSH ECX                                 ; |Buffer
00431961   . 68 4F040000    PUSH 44F                                 ; |/ControlID = 44F (1103.)
00431966   . 56             PUSH ESI                                 ; ||hWnd
00431967   . FFD7           CALL EDI                                 ; |\GetDlgItem
00431969   . 8B1D 48834400  MOV EBX,DWORD PTR DS:[<&USER32.GetWindow>; |
0043196F   . 50             PUSH EAX                                 ; |hWnd
00431970   . FFD3           CALL EBX                                 ; \GetWindowTextA
00431972   . 8D9424 C400000>LEA EDX,DWORD PTR SS:[ESP+C4]
00431979   . 6A 64          PUSH 64                                  ; /Count = 64 (100.)
0043197B   . 52             PUSH EDX                                 ; |Buffer
0043197C   . 68 50040000    PUSH 450                                 ; |/ControlID = 450 (1104.)
00431981   . 56             PUSH ESI                                 ; ||hWnd
00431982   . FFD7           CALL EDI                                 ; |\GetDlgItem
00431984   . 50             PUSH EAX                                 ; |hWnd
00431985   . FFD3           CALL EBX                                 ; \GetWindowTextA
00431987   . 8D8424 C400000>LEA EAX,DWORD PTR SS:[ESP+C4]
0043198E   . 8D4C24 60      LEA ECX,DWORD PTR SS:[ESP+60]
00431992   . 50             PUSH EAX
00431993   . 51             PUSH ECX
00431994   . E8 F7FBFFFF    CALL MOVGEAR.00431590        当然怀疑这里有问题了。计算注册码并比较
00431999   . 83C4 08        ADD ESP,8
0043199C   . 85C0           TEST EAX,EAX
0043199E   . 0F84 AD000000  JE MOVGEAR.00431A51          就是在这里跳到上面所说的,跳则死
004319A4   . 8D5424 10      LEA EDX,DWORD PTR SS:[ESP+10]
004319A8   . 8D4424 0C      LEA EAX,DWORD PTR SS:[ESP+C]
004319AC   . 52             PUSH EDX                                 ; /pDisposition
004319AD   . 50             PUSH EAX                                 ; |pHandle
004319AE   . 6A 00          PUSH 0                                   ; |pSecurity = NULL
004319B0   . 68 3F000F00    PUSH 0F003F                              ; |Access = KEY_ALL_ACCESS
004319B5   . 6A 00          PUSH 0                                   ; |Options = REG_OPTION_NON_VOLATILE
004319B7   . 68 14ED4400    PUSH MOVGEAR.0044ED14                    ; |Class = ""
004319BC   . 6A 00          PUSH 0                                   ; |Reserved = 0
004319BE   . 68 F8B34400    PUSH MOVGEAR.0044B3F8                    ; |Subkey = "Software\gamani\GIFMovieGear\2.0"
004319C3   . 68 01000080    PUSH 80000001                            ; |hKey = HKEY_CURRENT_USER
004319C8   . FF15 0C804400  CALL DWORD PTR DS:[<&ADVAPI32.RegCreateK>; \RegCreateKeyExA
004319CE   . 8D7C24 60      LEA EDI,DWORD PTR SS:[ESP+60]
004319D2   . 83C9 FF        OR ECX,FFFFFFFF
004319D5   . 33C0           XOR EAX,EAX
004319D7   . 8B5424 0C      MOV EDX,DWORD PTR SS:[ESP+C]
004319DB   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
004319DD   . F7D1           NOT ECX
004319DF   . 8B1D 18804400  MOV EBX,DWORD PTR DS:[<&ADVAPI32.RegSetV>
004319E5   . 51             PUSH ECX                                 ; /BufSize
004319E6   . 8D4C24 64      LEA ECX,DWORD PTR SS:[ESP+64]            ; |
004319EA   . 51             PUSH ECX                                 ; |Buffer
004319EB   . 6A 01          PUSH 1                                   ; |valueType = REG_SZ
004319ED   . 50             PUSH EAX                                 ; |Reserved => 0
004319EE   . 68 98D44400    PUSH MOVGEAR.0044D498                    ; |valueName = "RegName3"
004319F3   . 52             PUSH EDX                                 ; |hKey
004319F4   . FFD3           CALL EBX                                 ; \RegSetvalueExA
004319F6   . 8DBC24 C400000>LEA EDI,DWORD PTR SS:[ESP+C4]
004319FD   . 83C9 FF        OR ECX,FFFFFFFF
00431A00   . 33C0           XOR EAX,EAX
00431A02   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
00431A04   . F7D1           NOT ECX
00431A06   . 8D8424 C400000>LEA EAX,DWORD PTR SS:[ESP+C4]
00431A0D   . 51             PUSH ECX                                 ; /BufSize
00431A0E   . 8B4C24 10      MOV ECX,DWORD PTR SS:[ESP+10]            ; |
00431A12   . 50             PUSH EAX                                 ; |Buffer
00431A13   . 6A 01          PUSH 1                                   ; |valueType = REG_SZ
00431A15   . 6A 00          PUSH 0                                   ; |Reserved = 0
00431A17   . 68 A4D44400    PUSH MOVGEAR.0044D4A4                    ; |valueName = "RegCode3"
00431A1C   . 51             PUSH ECX                                 ; |hKey
00431A1D   . FFD3           CALL EBX                                 ; \RegSetvalueExA
00431A1F   . 8B5424 0C      MOV EDX,DWORD PTR SS:[ESP+C]
00431A23   . 52             PUSH EDX                                 ; /hKey
00431A24   . FF15 00804400  CALL DWORD PTR DS:[<&ADVAPI32.RegCloseKe>; \RegCloseKey
00431A2A   . 68 B0D44400    PUSH MOVGEAR.0044D4B0                    ; /Subkey = "Software\Loani\MG3t"
00431A2F   . 68 02000080    PUSH 80000002                            ; |hKey = HKEY_LOCAL_MACHINE
00431A34   . FF15 14804400  CALL DWORD PTR DS:[<&ADVAPI32.RegDeleteK>; \RegDeleteKeyA
00431A3A   . 6A 01          PUSH 1                                   ; /Result = 1
00431A3C   . 56             PUSH ESI                                 ; |hWnd
00431A3D   . FF15 44834400  CALL DWORD PTR DS:[<&USER32.EndDialog>]  ; \EndDialog
00431A43   . 5F             POP EDI
00431A44   . 5E             POP ESI
00431A45   . 33C0           XOR EAX,EAX
00431A47   . 5B             POP EBX
00431A48   . 81C4 1C010000  ADD ESP,11C
00431A4E   . C2 1000        RETN 10

七、在00431994处按F2下断点,重新来过后F7跟入,来到这里:

00431590  /$ 53             PUSH EBX
00431591  |. 55             PUSH EBP
00431592  |. 8B6C24 10      MOV EBP,DWORD PTR SS:[ESP+10]
00431596  |. 56             PUSH ESI
00431597  |. 57             PUSH EDI
00431598  |. 807D 00 6D     CMP BYTE PTR SS:[EBP],6D    
0043159C  |. 0F85 A0000000  JNZ MOVGEAR.00431642
004315A2  |. 807D 01 67     CMP BYTE PTR SS:[EBP+1],67
004315A6  |. 0F85 96000000  JNZ MOVGEAR.00431642           跳则死
004315AC  |. 807D 02 33     CMP BYTE PTR SS:[EBP+2],33
004315B0  |. 0F85 8C000000  JNZ MOVGEAR.00431642
004315B6  |. 807D 03 37     CMP BYTE PTR SS:[EBP+3],37      开头四个字符一定要是"mg37"
004315BA  |. 0F85 82000000  JNZ MOVGEAR.00431642
004315C0  |. BB C4D44400    MOV EBX,MOVGEAR.0044D4C4
004315C5  |> 8B13           /MOV EDX,DWORD PTR DS:[EBX]
004315C7  |. 83C9 FF        |OR ECX,FFFFFFFF
004315CA  |. 8BFA           |MOV EDI,EDX
004315CC  |. 33C0           |XOR EAX,EAX
004315CE  |. F2:AE          |REPNE SCAS BYTE PTR ES:[EDI]
004315D0  |. F7D1           |NOT ECX
004315D2  |. 49             |DEC ECX                      计算"mvg21951736"的长度
004315D3  |. 8BFA           |MOV EDI,EDX
004315D5  |. 8BF5           |MOV ESI,EBP
004315D7  |. 33C0           |XOR EAX,EAX
004315D9  |. F3:A6          |REPE CMPS BYTE PTR ES:[EDI],BYTE PTR DS>  输入的注册号与"mvg21951736"比较
004315DB  |. 74 65          |JE SHORT MOVGEAR.00431642    相等则死。我认为肯定不相等,相等的话根本到不这里来,会在前面跳走,这也是我不明白的地方,请各位老师指点。
004315DD  |. 83C3 04        |ADD EBX,4
004315E0  |. 81FB C8D44400  |CMP EBX,MOVGEAR.0044D4C8                ;  ASCII "mvg21951736"
004315E6  |.^7C DD          \JL SHORT MOVGEAR.004315C5
004315E8  |. 807D 04 73     CMP BYTE PTR SS:[EBP+4],73        输入注册号第5位是否是S
004315EC  |. 75 01          JNZ SHORT MOVGEAR.004315EF        不是s则跳过第5、6、7位,从第8位开始
004315EE  |. 45             INC EBP是S则从第9位开始,注册成功后则为site license
004315EF  |> 83C5 07        ADD EBP,7
004315F2  |. 55             PUSH EBP
004315F3  |. E8 D0DD0000    CALL MOVGEAR.0043F3C8        从第8位或第9位开始的ASCII码转到16进制数
004315F8  |. 8B5424 18      MOV EDX,DWORD PTR SS:[ESP+18]
004315FC  |. 83C4 04        ADD ESP,4
004315FF  |. 8BFA           MOV EDI,EDX
00431601  |. 33C9           XOR ECX,ECX
00431603  |. 8A12           MOV DL,BYTE PTR DS:[EDX]
00431605  |. BE DF0B0000    MOV ESI,0BDF                赋初值,后面会用到
0043160A  |. 84D2           TEST DL,DL
0043160C  |. 74 26          JE SHORT MOVGEAR.00431634  跳则做最后比较
0043160E  |> 0FBED2         /MOVSX EDX,DL              计算正确注册号后面几位
00431611  |. 41             |INC ECX                 计数器N加1
00431612  |. 0FAFD1         |IMUL EDX,ECX            用户名第N个字符与计数值相乘
00431615  |. 03F2           |ADD ESI,EDX             加上一次运算结果,初值为0BDF
00431617  |. 81FE BE170000  |CMP ESI,17BE
0043161D  |. 7E 06          |JLE SHORT MOVGEAR.00431625
0043161F  |. 81EE BE170000  |SUB ESI,17BE            结果大于17BE则减去此值
00431625  |> 83F9 0A        |CMP ECX,0A     用户名字符数大于0A则ECX清零(即用户名10个字符为1组)
00431628  |. 7E 02          |JLE SHORT MOVGEAR.0043162C
0043162A  |. 33C9           |XOR ECX,ECX
0043162C  |> 8A57 01        |MOV DL,BYTE PTR DS:[EDI+1]  指向下一个数
0043162F  |. 47             |INC EDI
00431630  |. 84D2           |TEST DL,DL
00431632  |.^75 DA          \JNZ SHORT MOVGEAR.0043160E
00431634  |> 3BF0           CMP ESI,EAX                  此比较是关键的关键
00431636  |. 75 0A          JNZ SHORT MOVGEAR.00431642    跳则死
00431638  |. 5F             POP EDI
00431639  |. 5E             POP ESI
0043163A  |. 5D             POP EBP
0043163B  |. B8 01000000    MOV EAX,1            到这里使EAX为1,返回后表示注册正确
00431640  |. 5B             POP EBX
00431641  |. C3             RETN
00431642  |> 5F             POP EDI
00431643  |. 5E             POP ESI
00431644  |. 5D             POP EBP
00431645  |. 33C0           XOR EAX,EAX                  这是关键,一定不要到这来
00431647  |. 5B             POP EBX
00431648  \. C3             RETN

八、模拟运算过程:
BDF+73*1+68*2+69*3+66*4+65*5+6E*6+67*7=1753
注:上述运算每一步均不大于17BE
1753转换成10进制数为5971
综合起来用户名shifeng注册码mg37***5971或mg37s***5971


九、TC注册机,没考虑用户名大于10个字符。感谢我的C语言教员。
#include
#include
#include
#include
#include
void main(void)
{
   char * name="";
   int i,randnum;
   unsigned int value,len;
   clrscr();
   printf("\n**********************************************************\n");
   printf("Gif Movie Gear V3.0.2 Registration Code Generator\n");
   printf("Author: shifeng ( 2002/09/08 )\n");
   printf("**********************************************************\n\n");
   printf("Input Your Name : ");
   scanf("%s",name);
   printf("\n");
   value=0x0BDF;
   for(i=0;i  {value=(i+1)*((unsigned int)*(name+i))+value;
     if(value>=0x17BE) value=value-0x17BE;
  }
  randomize();
  randnum=random(1000);
  printf("Registration Code for single user: ");
  printf("mg37%d%d\n",randnum,(int)value);
          printf("Registration Code for site license: ");
  printf("mg37s%d%d\n",randnum,(int)value);
  getch();
}

十、注册信息在
HKEY_CURRENT_USER\Software\gamani\GIFMovieGear\2.0\RegCode3
删除后又变为未注册版本。


    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程