首页
社区
课程
招聘
[原创]Cyclogs's KeyGenMe的算法分析
发表于: 2006-9-22 09:15 5947

[原创]Cyclogs's KeyGenMe的算法分析

bxm 活跃值
29
2006-9-22 09:15
5947

【文章标题】: Cyclogs's KeyGenMe的算法分析
【文章作者】: bxm
【作者邮箱】: bxm78@163.com
【加壳方式】: 无壳
【保护方式】: name、serial
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OD、VC++
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  00401564   .  E8 29030000   call    <jmp.&MFC42.#3098_CWnd::GetDlgItemTex>
  00401569   .  8D4C24 0C     lea     ecx, [esp+C]
  0040156D   .  6A 0A         push    0A
  0040156F   .  51            push    ecx
  00401570   .  68 E9030000   push    3E9
  00401575   .  8BCF          mov     ecx, edi
  00401577   .  E8 16030000   call    <jmp.&MFC42.#3098_CWnd::GetDlgItemTex>
  0040157C   .  BE 3C314000   mov     esi, 0040313C
  00401581   .  8D4424 18     lea     eax, [esp+18]
  00401585   >  8A10          mov     dl, [eax]
  00401587   .  8A1E          mov     bl, [esi]
  00401589   .  8ACA          mov     cl, dl
  0040158B   .  3AD3          cmp     dl, bl
  0040158D   .  75 1E         jnz     short 004015AD
  0040158F   .  84C9          test    cl, cl
  00401591   .  74 16         je      short 004015A9
  00401593   .  8A50 01       mov     dl, [eax+1]
  00401596   .  8A5E 01       mov     bl, [esi+1]
  00401599   .  8ACA          mov     cl, dl
  0040159B   .  3AD3          cmp     dl, bl
  0040159D   .  75 0E         jnz     short 004015AD
  0040159F   .  83C0 02       add     eax, 2
  004015A2   .  83C6 02       add     esi, 2
  004015A5   .  84C9          test    cl, cl
  004015A7   .^ 75 DC         jnz     short 00401585
  004015A9   >  33C0          xor     eax, eax
  004015AB   .  EB 05         jmp     short 004015B2
  004015AD   >  1BC0          sbb     eax, eax
  004015AF   .  83D8 FF       sbb     eax, -1
  004015B2   >  85C0          test    eax, eax
  004015B4   .  0F84 A1000000 je      0040165B                              ;  测试name是否为空
  004015BA   .  BE 3C314000   mov     esi, 0040313C
  004015BF   .  8D4424 0C     lea     eax, [esp+C]
  004015C3   >  8A10          mov     dl, [eax]
  004015C5   .  8A1E          mov     bl, [esi]
  004015C7   .  8ACA          mov     cl, dl
  004015C9   .  3AD3          cmp     dl, bl
  004015CB   .  75 1E         jnz     short 004015EB
  004015CD   .  84C9          test    cl, cl
  004015CF   .  74 16         je      short 004015E7
  004015D1   .  8A50 01       mov     dl, [eax+1]
  004015D4   .  8A5E 01       mov     bl, [esi+1]
  004015D7   .  8ACA          mov     cl, dl
  004015D9   .  3AD3          cmp     dl, bl
  004015DB   .  75 0E         jnz     short 004015EB
  004015DD   .  83C0 02       add     eax, 2
  004015E0   .  83C6 02       add     esi, 2
  004015E3   .  84C9          test    cl, cl
  004015E5   .^ 75 DC         jnz     short 004015C3
  004015E7   >  33C0          xor     eax, eax
  004015E9   .  EB 05         jmp     short 004015F0
  004015EB   >  1BC0          sbb     eax, eax
  004015ED   .  83D8 FF       sbb     eax, -1
  004015F0   >  85C0          test    eax, eax
  004015F2   .  74 67         je      short 0040165B                        ;  检查Serial是否为空
  004015F4   .  8D4424 0C     lea     eax, [esp+C]
  004015F8   .  50            push    eax
  004015F9   .  E8 B2FEFFFF   call    004014B0                              ;  测试serial是否符合规范,即不能有大于"f"的字符
  004015FE   .  83C4 04       add     esp, 4
  00401601   .  85C0          test    eax, eax
  00401603   .  74 66         je      short 0040166B
  00401605   .  8D4C24 0C     lea     ecx, [esp+C]
  00401609   .  51            push    ecx
  0040160A   .  E8 21FFFFFF   call    00401530                              ;  把serial的后8位转换成十六进制数,如我的“780328051”,转成数80328051
  0040160F   .  8D5424 1C     lea     edx, [esp+1C]
  00401613   .  8BF0          mov     esi, eax
  00401615   .  52            push    edx
  00401616   .  E8 55FEFFFF   call    00401470                              ;  对name进行运算,我的返回值为2786A
  0040161B   .  05 8F020000   add     eax, 28F                              ;  EAX+28F
  00401620   .  B9 34120000   mov     ecx, 1234                             ;  1234入ECX
  00401625   .  99            cdq                                           ;  符号扩展
  00401626   .  F7F9          idiv    ecx                                   ;  EAX/ECX
  00401628   .  B9 01000100   mov     ecx, 10001                            ;  10001入ECX
  0040162D   .  83C4 08       add     esp, 8
  00401630   .  8BC2          mov     eax, edx                              ;  EAX为name的最终运算结果,我的为1011,记为A
  00401632   .  0FAFC6        imul    eax, esi                              ;  EAX*ESI(即转化后的serial)
  00401635   .  99            cdq
  00401636   .  F7F9          idiv    ecx                                   ;  EAX/ECX
  00401638   .  B8 01000000   mov     eax, 1                                ;  1入EAX
  0040163D   .  2BC2          sub     eax, edx                              ;  EAX-EDX
  0040163F   .  75 2A         jnz     short 0040166B                        ;  不等于0跳向失败
  
  从00401632句开始分析,上面都是正向计算比较简单,很容易翻译成高级语言,就略去了。
  设name最终计算结果为A,转换后的serial为B,则A*B/0x10001的余数必须为1,据此我写了部分注册机源码。
  #include<iostream.h>
  #include<iomanip.h>
  void main()
  {
          long int A=0x1011;  //name运算后的最终结果
          int i=1;
          while((0x10001L*i+1)%A!=0)
                  i++;
          cout<<"Serial is "<<hex<<(0x10001L*i+1)/A<<endl;
  }
  
  可用的一组数据:
  name:bxm78
  serial:a551
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年09月22日 上午 9:12:04


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
2
GOOD,学习!
2006-9-22 09:39
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
不错.学习!!
2006-9-22 16:57
0
游客
登录 | 注册 方可回帖
返回
//