飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3018|回复: 5

CrackMe 6 算法分析+注册机

[复制链接]

该用户从未签到

发表于 2006-3-17 23:26:53 | 显示全部楼层 |阅读模式
初学 C++ 和算法分析,这东西坛子里的人都折腾过N次了。不过好像都觉得太简单没人写过注册机,贴上我的练习,分析的不好,代码写的更差,贴出来看看谁有时间帮我精简下算法。

用DEDE找到关键点后分析如下:


  1. 004417B8 >/.  55            PUSH EBP                                 ;  注册码判断开始<-TForm1@Button1Click
  2. 004417B9  |.  8BEC          MOV EBP,ESP
  3. 004417BB  |.  6A 00         PUSH 0
  4. 004417BD  |.  6A 00         PUSH 0
  5. 004417BF  |.  6A 00         PUSH 0
  6. 004417C1  |.  53            PUSH EBX
  7. 004417C2  |.  8BD8          MOV EBX,EAX
  8. 004417C4  |.  33C0          XOR EAX,EAX
  9. 004417C6  |.  55            PUSH EBP
  10. 004417C7  |.  68 60184400   PUSH <CrackMe.->System.Proc_00403278>
  11. 004417CC  |.  64:FF30       PUSH DWORD PTR FS:[EAX]
  12. 004417CF  |.  64:8920       MOV DWORD PTR FS:[EAX],ESP
  13. 004417D2  |.  8D55 FC       LEA EDX,DWORD PTR SS:[EBP-4]
  14. 004417D5  |.  8B83 C8020000 MOV EAX,DWORD PTR DS:[EBX+2C8]
  15. 004417DB >|.  E8 C419FEFF   CALL CrackMe.004231A4                    ;  获取注册码->controls.TControl.GetText(TControl):TCaption;
  16. 004417E0  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]             ;  [0012F650] 送 EAX
  17. 004417E3  |.  50            PUSH EAX                                 ;  EAX 压栈
  18. 004417E4  |.  8D55 F4       LEA EDX,DWORD PTR SS:[EBP-C]
  19. 004417E7  |.  8B83 C4020000 MOV EAX,DWORD PTR DS:[EBX+2C4]
  20. 004417ED >|.  E8 B219FEFF   CALL CrackMe.004231A4                    ;  获取用户名->controls.TControl.GetText(TControl):TCaption;
  21. 004417F2  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ;  [0012F648] 送 EAX
  22. 004417F5  |.  8D55 F8       LEA EDX,DWORD PTR SS:[EBP-8]
  23. 004417F8 >|.  E8 FBFEFFFF   CALL CrackMe.004416F8                    ;  关键 CALL 计算注册码 F7 跟进->Unit1.Proc_004416F8
  24. 004417FD  |.  8B55 F8       MOV EDX,DWORD PTR SS:[EBP-8]             ;  真码送 EDX
  25. 00441800  |.  58            POP EAX                                  ;  假码出栈送 EAX
  26. 00441801 >|.  E8 3E23FCFF   CALL CrackMe.00403B44                    ;  真假码比较->System.Proc_00403B44
  27. 00441806  |.  75 1A         JNZ SHORT CrackMe.00441822               ;  不等就 OVER
  28. 00441808  |.  6A 40         PUSH 40
  29. 0044180A  |.  B9 6C184400   MOV ECX,CrackMe.0044186C                 ;  ASCII "U made it"
  30. 0044180F  |.  BA 78184400   MOV EDX,CrackMe.00441878                 ;  ASCII "Right Code"
  31. 00441814  |.  A1 302C4400   MOV EAX,DWORD PTR DS:[442C30]
  32. 00441819  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
  33. 0044181B >|.  E8 D4D6FFFF   CALL CrackMe.0043EEF4                    ;  ->:TApplication._PROC_0043EEF4()
  34. 00441820  |.  EB 18         JMP SHORT CrackMe.0044183A
  35. 00441822  |>  6A 10         PUSH 10
  36. 00441824  |.  B9 84184400   MOV ECX,CrackMe.00441884                 ;  ASCII "Error"
  37. 00441829  |.  BA 8C184400   MOV EDX,CrackMe.0044188C                 ;  ASCII "Wrong Code"
  38. 0044182E  |.  A1 302C4400   MOV EAX,DWORD PTR DS:[442C30]
  39. 00441833  |.  8B00          MOV EAX,DWORD PTR DS:[EAX]
  40. 00441835 >|.  E8 BAD6FFFF   CALL CrackMe.0043EEF4                    ;  ->:TApplication._PROC_0043EEF4()
  41. 0044183A  |>  33C0          XOR EAX,EAX
  42. 0044183C  |.  5A            POP EDX
  43. 0044183D  |.  59            POP ECX
  44. 0044183E  |.  59            POP ECX
  45. 0044183F  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
  46. 00441842  |.  68 67184400   PUSH CrackMe.00441867
  47. 00441847  |>  8D45 F4       LEA EAX,DWORD PTR SS:[EBP-C]
  48. 0044184A >|.  E8 691FFCFF   CALL CrackMe.004037B8                    ;  ->System.Proc_004037B8
  49. 0044184F  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
  50. 00441852 >|.  E8 611FFCFF   CALL CrackMe.004037B8                    ;  ->System.Proc_004037B8
  51. 00441857  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
  52. 0044185A >|.  E8 591FFCFF   CALL CrackMe.004037B8                    ;  ->System.Proc_004037B8
  53. 0044185F  \.  C3            RETN
  54. 00441860 > .^ E9 131AFCFF   JMP CrackMe.00403278                     ;  ->System.Proc_00403278
  55. 00441865   .^ EB E0         JMP SHORT CrackMe.00441847
  56. 00441867   .  5B            POP EBX
  57. 00441868   .  8BE5          MOV ESP,EBP
  58. 0044186A   .  5D            POP EBP
  59. 0044186B   .  C3            RETN

  60. 004417F8 >|.  E8 FBFEFFFF   CALL CrackMe.004416F8 跟进后

  61. 004416F8  /$  53            PUSH EBX                                 ;  
  62. 004416F9  |.  56            PUSH ESI
  63. 004416FA  |.  57            PUSH EDI
  64. 004416FB  |.  83C4 DC       ADD ESP,-24
  65. 004416FE  |.  891424        MOV DWORD PTR SS:[ESP],EDX
  66. 00441701  |.  8BF8          MOV EDI,EAX                              ;  用户名送 EDI
  67. 00441703  |.  BB 05033949   MOV EBX,49390305
  68. 00441708  |.  BE 20126348   MOV ESI,48631220
  69. 0044170D  |.  8BC7          MOV EAX,EDI
  70. 0044170F  |.  E8 2023FCFF   CALL CrackMe.00403A34                    ;  获取注册码位数
  71. 00441714  |.  85C0          TEST EAX,EAX
  72. 00441716  |.  7E 2E         JLE SHORT CrackMe.00441746               ;  没输入注册码就 OVER
  73. 00441718  |.  BA 01000000   MOV EDX,1
  74. 0044171D  |>  33C9          /XOR ECX,ECX                             ;  清空 ECX
  75. 0044171F  |.  8A4C17 FF     |MOV CL,BYTE PTR DS:[EDI+EDX-1]          ;  取用户名 ASCII 送 CL
  76. 00441723  |.  33D9          |XOR EBX,ECX                             ;  与 49390305 做 XOR 运算 结果送 EBX
  77. 00441725  |.  33F3          |XOR ESI,EBX                             ;  再与 48631220 做 XOR 运算 结果送 ESI
  78. 00441727  |.  F6C3 01       |TEST BL,1                               ;  BL 做奇偶效验
  79. 0044172A  |.  74 0F         |JE SHORT CrackMe.0044173B               ;  偶数跳
  80. 0044172C  |.  D1FB          |SAR EBX,1                               ;  EBX = EBX/2
  81. 0044172E  |.  79 03         |JNS SHORT CrackMe.00441733
  82. 00441730  |.  83D3 00       |ADC EBX,0
  83. 00441733  |>  81F3 11032001 |XOR EBX,1200311                         ;  与 1200311 做 XOR 运算 结果送 EBX
  84. 00441739  |.  EB 07         |JMP SHORT CrackMe.00441742              ;  准备取下一个字母
  85. 0044173B  |>  D1FB          |SAR EBX,1                               ;  EBX = EBX/2
  86. 0044173D  |.  79 03         |JNS SHORT CrackMe.00441742
  87. 0044173F  |.  83D3 00       |ADC EBX,0
  88. 00441742  |>  42            |INC EDX                                 ;  计数器 + 1
  89. 00441743  |.  48            |DEC EAX                                 ;  用户名位数 - 1
  90. 00441744  |.^ 75 D7         \JNZ SHORT CrackMe.0044171D
  91. 00441746  |>  8B0424        MOV EAX,DWORD PTR SS:[ESP]
  92. 00441749  |.  50            PUSH EAX                                 ; /Arg1
  93. 0044174A  |.  8BC3          MOV EAX,EBX                              ; |结果 1 送 EAX
  94. 0044174C  |.  25 FFFF0000   AND EAX,0FFFF                            ; |取结果 1 后 4 位
  95. 00441751  |.  894424 08     MOV DWORD PTR SS:[ESP+8],EAX             ; |结果送 [0012F604]
  96. 00441755  |.  C64424 0C 00  MOV BYTE PTR SS:[ESP+C],0                ; |
  97. 0044175A  |.  C1EB 10       SHR EBX,10                               ; |取结果 1 前 4 位
  98. 0044175D  |.  895C24 10     MOV DWORD PTR SS:[ESP+10],EBX            ; |送 [0012F60C]
  99. 00441761  |.  C64424 14 00  MOV BYTE PTR SS:[ESP+14],0               ; |
  100. 00441766  |.  8BC6          MOV EAX,ESI                              ; |结果 2 送 EAX
  101. 00441768  |.  25 FFFF0000   AND EAX,0FFFF                            ; |取结果 2 后 4 位
  102. 0044176D  |.  894424 18     MOV DWORD PTR SS:[ESP+18],EAX            ; |结果送 [0012F614]
  103. 00441771  |.  C64424 1C 00  MOV BYTE PTR SS:[ESP+1C],0               ; |
  104. 00441776  |.  C1EE 10       SHR ESI,10                               ; |取结果 2 前 4 位
  105. 00441779  |.  897424 20     MOV DWORD PTR SS:[ESP+20],ESI            ; |送 [0012F61C]
  106. 0044177D  |.  C64424 24 00  MOV BYTE PTR SS:[ESP+24],0               ; |
  107. 00441782  |.  8D5424 08     LEA EDX,DWORD PTR SS:[ESP+8]             ; |
  108. 00441786  |.  B9 03000000   MOV ECX,3                                ; |
  109. 0044178B  |.  B8 A4174400   MOV EAX,CrackMe.004417A4                 ; |ASCII "%.4x-%.4x-%.4x-%.4x"
  110. 00441790  |.  E8 6F68FCFF   CALL CrackMe.00408004                    ; \格式转换
  111. 00441795  |.  83C4 24       ADD ESP,24
  112. 00441798  |.  5F            POP EDI
  113. 00441799  |.  5E            POP ESI
  114. 0044179A  |.  5B            POP EBX
  115. 0044179B  \.  C3            RETN
复制代码


注册机:


  1. #include <iOStream>
  2. #include <iomanip>

  3. using namespace std;

  4. #define SIZE 100 //定义100位大小准备定义数组存放用户名

  5. #define OPF hex<<setfill('0')<<setw(4)<<setiosflags(ios::uppercase) //定义输出格式 OPF=Output Format

  6. void output(void); //定义输出头信息

  7. int main()
  8. {
  9.   char Name[SIZE] ={0}; //初始化数组为0
  10.   int Result1=0,Result2=0;
  11.   output();
  12.      cout<<"Please Input Your Name: " ;
  13.   cin>>Name;
  14.   for (int i=0;i<SIZE;i++)
  15.   {
  16.     if (0==i) //取出的是用户名中第一个字母的话用这个算
  17.     {
  18.       Result1=Name[i]^0x49390305;
  19.       Result2=Result1^0x48631220;
  20.     }
  21.     else //第二个字母开始用这个公式算
  22.     {
  23.       Result1=Result1^Name[i];
  24.       Result2=Result2^Result1;
  25.     }
  26.     //结果1后两位奇偶效验
  27.     if ((Result1 & 0xFF)%2) //奇数
  28.     {
  29.       Result1=Result1/2^0x1200311;
  30.     }
  31.     else Result1=Result1/2; //偶数  
  32.     if (!Name[i+1]) break; //用户名全部取完就结束
  33.   }
  34.   //格式化输出结果
  35.   cout<<"Your Serial Number Is : "<<OPF<<(Result1&0xFFFF)<<"-"<<OPF<<(Result1>>0x10)<<"-"<<OPF<<(Result2&0xFFFF)<<"-"<<OPF<<(Result2>>0x10)<<endl;
  36.   system("pause");
  37.   return 0;
  38. }

  39. void output(void)
  40. {
  41.     cout<<"                          " ;
  42.     cout<<".::KeyGen for CrackMe 6::."<<endl<<endl ;
  43.     cout<<"                               " ;
  44.     cout<<"Code BY RegKiller"<<endl<<endl ;
  45.     cout<<"                           " ;
  46.     cout<<"QQ Group Number: 21051610"<<endl<<endl ;
  47. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入我们

x
PYG19周年生日快乐!

该用户从未签到

发表于 2006-3-19 13:49:18 | 显示全部楼层
支持学习了!
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-3-19 14:51:22 | 显示全部楼层
    很强的样子,支持兄弟!!!!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-5-6 16:27
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2006-3-19 14:53:50 | 显示全部楼层
    :00441806 751A                    jne 00441822   //暴破点
    :00441808 6A40                    push 00000040
    :0044180A B96C184400              mov ecx, 0044186C

    * Possible StringData Ref from Code Obj ->"Right Code"
                                      |
    :0044180F BA78184400              mov edx, 00441878
    :00441814 A1302C4400              mov eax, dword ptr [00442C30]
    :00441819 8B00                    mov eax, dword ptr [eax]
    :0044181B E8D4D6FFFF              call 0043EEF4
    :00441820 EB18                    jmp 0044183A

    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:00441806(C)
    |
    :00441822 6A10                    push 00000010

    * Possible StringData Ref from Code Obj ->"Error"
                                      |
    :00441824 B984184400              mov ecx, 00441884

    * Possible StringData Ref from Code Obj ->"Wrong Code"
                                      |
    :00441829 BA8C184400              mov edx, 0044188C
    :0044182E A1302C4400              mov eax, dword ptr [00442C30]
    :00441833 8B00                    mov eax, dword ptr [eax]
    :00441835 E8BAD6FFFF              call 0043EEF4

    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:00441820(U)
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-3-19 22:43:06 | 显示全部楼层
    谢谢提供,学习一下。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-4-25 15:33:04 | 显示全部楼层
    DEDE不会用!不知谁有他的使用方法!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表