• 标 题:一个CrackMe的破解以及注册机的制作 (4千字)
  • 作 者:NYDoll
  • 时 间:2001-8-16 20:51:26
  • 链 接:http://bbs.pediy.com

一个CrackMe的破解以及注册机的制作

    自从研究CCG的CrackMe之后 便开始对CrackMe这个东西很感兴趣,所以跑到DDXia前辈的主页上逛了一圈准备借鉴
一下别人的优秀思想,完善一下自己正在酝酿中的CrackMe,太难的破不了,太简单的又没有意思,找了一个中等难度的东西Down了下来,回来一看,正好适合写偏教程给初学者讲讲 ^_^ 说不定以后FCG的考试也要用CrackMe了呢

这个东西的注册方法很普遍 就是Name/SN的格式 先进入注册窗口 输入姓名:NYDoll 注册码:38383838 运行TRW下断点BPX HMEMCPY 然后回到程序点击注册按钮,被TRW栏下,清除断点BC * 输入PMODULE到程序领空 然后要按一阵F10之后来到这里:

:004479A6 837DF400                cmp dword ptr [ebp-0C], 00000000
:004479AA 0F8428020000            je 00447BD8
:004479B0 8BB338030000            mov esi, dword ptr [ebx+00000338]
:004479B6 807E0500                cmp byte ptr [esi+05], 00
:004479BA 0F8420010000            je 00447AE0

//省略一部分代码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004479BA(C)
|
:00447AE0 33F6                    xor esi, esi
:00447AE2 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447AE5 8B83D4020000            mov eax, dword ptr [ebx+000002D4]
:00447AEB E868BDFDFF              call 00423858
:00447AF0 8B45F4                  mov eax, dword ptr [ebp-0C]
:00447AF3 E83CBFFBFF              call 00403A34 
:00447AF8 85C0                    test eax, eax
:00447AFA 7E4B                    jle 00447B47
:00447AFC 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447AFF 8B83D4020000            mov eax, dword ptr [ebx+000002D4]
:00447B05 E84EBDFDFF              call 00423858
:00447B0A 8B45F4                  mov eax, dword ptr [ebp-0C] //载入用户名
:00447B0D E822BFFBFF              call 00403A34
:00447B12 8BF8                    mov edi, eax //得到用户名的字符数
:00447B14 85FF                    test edi, edi //比较用户名是否为空
:00447B16 7C2F                    jl 00447B47 //跳走就死翘翘了 :(
:00447B18 47                      inc edi
:00447B19 C745F800000000          mov [ebp-08], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00447B45(C)
|
:00447B20 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447B23 8B83D4020000            mov eax, dword ptr [ebx+000002D4]
:00447B29 E82ABDFDFF              call 00423858
:00447B2E 8B45F4                  mov eax, dword ptr [ebp-0C] //载入用户名
:00447B31 8B55F8                  mov edx, dword ptr [ebp-08] //记录循环次数
:00447B34 0FB64410FF              movzx eax, byte ptr [eax+edx-01] //将用户名的第一位以ASCII码形式存到EAX,第一次循环值为零。
:00447B39 03F0                    add esi, eax    //与上一次循环后得到的累加值相加
:00447B3B 03B314030000            add esi, dword ptr [ebx+00000314] //当前字符的十进制值加上11111
:00447B41 FF45F8                  inc [ebp-08]
:00447B44 4F                      dec edi //计数器
:00447B45 75D9                    jne 00447B20 //用户名全部计算完毕则跳走

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00447AFA(C), :00447B16(C)
|
:00447B47 8D55FC                  lea edx, dword ptr [ebp-04]
:00447B4A 8BC6                    mov eax, esi //将累加值压入EAX寄存器
:00447B4C E857FBFBFF              call 004076A8
:00447B51 FFB30C030000            push dword ptr [ebx+0000030C]
:00447B57 FF75FC                  push [ebp-04]
:00447B5A FFB310030000            push dword ptr [ebx+00000310]
:00447B60 8D45FC                  lea eax, dword ptr [ebp-04]
:00447B63 BA03000000              mov edx, 00000003
:00447B68 E887BFFBFF              call 00403AF4
:00447B6D 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447B70 8B83D8020000            mov eax, dword ptr [ebx+000002D8]
:00447B76 E8DDBCFDFF              call 00423858
:00447B7B 8B55F4                  mov edx, dword ptr [ebp-0C] //EDX中为我输入的注册码
:00447B7E 8B45FC                  mov eax, dword ptr [ebp-04] //EAX中为刚才循环完后的累加值
:00447B81 E8BEBFFBFF              call 00403B44
:00447B86 7528                    jne 00447BB0  //如果不相等就死了 :(

//到此为止,整个CrackMe的算法已经完全弄明白了,为了使大家加深印象我再综合的复诉一边:
//举例说明NYDoll是如何产生出正确的注册码78339的
//(1)依次去NYDoll中的字符,并将它以ASCII码的形式保存
//(2)ASCII码的值加上11111,再保存起来
//(3)若用户名没有取完则循环,第二次ASCII码值加上11111的结果和第一次的累加值相加
//(4)若第一次循环,则累加值为11111
//即注册过程的中间数据为:11111+(78+11111)+(89+11111)+(68+11111)+(111+11111)+(108+11111)+(108+11111)
//结果等于78339即为正确的注册码了


                                            By 娃娃(NYDoll)
今天太困了 明天贴注册机! Bye For Now

  • 标 题:加上一个VB的注册机 (5千字)
  • 作 者:NYDoll
  • 时 间:2001-8-17 10:23:26

一个CrackMe的破解以及注册机的制作

    自从研究CCG的CrackMe之后 便开始对CrackMe这个东西很感兴趣,所以跑到DDXia前辈的主页上逛了一圈准备借鉴
一下别人的优秀思想,完善一下自己正在酝酿中的CrackMe,太难的破不了,太简单的又没有意思,找了一个中等难度的东西Down了下来,回来一看,正好适合写偏教程给初学者讲讲 ^_^ 说不定以后FCG的考试也要用CrackMe了呢

这个东西的注册方法很普遍 就是Name/SN的格式 先进入注册窗口 输入姓名:NYDoll 注册码:38383838 运行TRW下断点BPX HMEMCPY 然后回到程序点击注册按钮,被TRW栏下,清除断点BC * 输入PMODULE到程序领空 然后要按一阵F10之后来到这里:

:004479A6 837DF400                cmp dword ptr [ebp-0C], 00000000
:004479AA 0F8428020000            je 00447BD8
:004479B0 8BB338030000            mov esi, dword ptr [ebx+00000338]
:004479B6 807E0500                cmp byte ptr [esi+05], 00
:004479BA 0F8420010000            je 00447AE0

//省略一部分代码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004479BA(C)
|
:00447AE0 33F6                    xor esi, esi
:00447AE2 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447AE5 8B83D4020000            mov eax, dword ptr [ebx+000002D4]
:00447AEB E868BDFDFF              call 00423858
:00447AF0 8B45F4                  mov eax, dword ptr [ebp-0C]
:00447AF3 E83CBFFBFF              call 00403A34 
:00447AF8 85C0                    test eax, eax
:00447AFA 7E4B                    jle 00447B47
:00447AFC 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447AFF 8B83D4020000            mov eax, dword ptr [ebx+000002D4]
:00447B05 E84EBDFDFF              call 00423858
:00447B0A 8B45F4                  mov eax, dword ptr [ebp-0C] //载入用户名
:00447B0D E822BFFBFF              call 00403A34
:00447B12 8BF8                    mov edi, eax //得到用户名的字符数
:00447B14 85FF                    test edi, edi //比较用户名是否为空
:00447B16 7C2F                    jl 00447B47 //跳走就死翘翘了 :(
:00447B18 47                      inc edi
:00447B19 C745F800000000          mov [ebp-08], 00000000

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00447B45(C)
|
:00447B20 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447B23 8B83D4020000            mov eax, dword ptr [ebx+000002D4]
:00447B29 E82ABDFDFF              call 00423858
:00447B2E 8B45F4                  mov eax, dword ptr [ebp-0C] //载入用户名
:00447B31 8B55F8                  mov edx, dword ptr [ebp-08] //记录循环次数
:00447B34 0FB64410FF              movzx eax, byte ptr [eax+edx-01] //将用户名的第一位以ASCII码形式存到EAX,第一次循环值为零。
:00447B39 03F0                    add esi, eax    //与上一次循环后得到的累加值相加
:00447B3B 03B314030000            add esi, dword ptr [ebx+00000314] //当前字符的十进制值加上11111
:00447B41 FF45F8                  inc [ebp-08]
:00447B44 4F                      dec edi //计数器
:00447B45 75D9                    jne 00447B20 //用户名全部计算完毕则跳走

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00447AFA(C), :00447B16(C)
|
:00447B47 8D55FC                  lea edx, dword ptr [ebp-04]
:00447B4A 8BC6                    mov eax, esi //将累加值压入EAX寄存器
:00447B4C E857FBFBFF              call 004076A8
:00447B51 FFB30C030000            push dword ptr [ebx+0000030C]
:00447B57 FF75FC                  push [ebp-04]
:00447B5A FFB310030000            push dword ptr [ebx+00000310]
:00447B60 8D45FC                  lea eax, dword ptr [ebp-04]
:00447B63 BA03000000              mov edx, 00000003
:00447B68 E887BFFBFF              call 00403AF4
:00447B6D 8D55F4                  lea edx, dword ptr [ebp-0C]
:00447B70 8B83D8020000            mov eax, dword ptr [ebx+000002D8]
:00447B76 E8DDBCFDFF              call 00423858
:00447B7B 8B55F4                  mov edx, dword ptr [ebp-0C] //EDX中为我输入的注册码
:00447B7E 8B45FC                  mov eax, dword ptr [ebp-04] //EAX中为刚才循环完后的累加值
:00447B81 E8BEBFFBFF              call 00403B44
:00447B86 7528                    jne 00447BB0  //如果不相等就死了 :(

//到此为止,整个CrackMe的算法已经完全弄明白了,为了使大家加深印象我再综合的复诉一边:
//举例说明NYDoll是如何产生出正确的注册码78339的
//(1)依次去NYDoll中的字符,并将它以ASCII码的形式保存
//(2)ASCII码的值加上11111,再保存起来
//(3)若用户名没有取完则循环,第二次ASCII码值加上11111的结果和第一次的累加值相加
//(4)若第一次循环,则累加值为11111
//即注册过程的中间数据为:11111+(78+11111)+(89+11111)+(68+11111)+(111+11111)+(108+11111)+(108+11111)
//结果等于78339即为正确的注册码了

接下来我们来看看要如何编写一个注册机,TC没有图形界面

Private Sub Text1_Change()
Dim c_num, aa, i As Integer  '定义变量
Dim a, b, c, d, e            '定义变量
c_num = Len(Trim(Text1.Text))  'c_num指注册名的字符个数
    If c_num = 0 Then        '若用户名一栏为空则提示
      MsgBox ("Enter Your Name First!")    '提示信息
      Else
      For i = 1 To c_num    '若填写完毕则开始循环运算
      a = Mid(Text1, i, 1)        'a指现在取的一个字符
      c = Asc(a)            '将用户名依次转换为ASCII码形式
      If i = 1 Then
      d = c + 11111 + 11111    '第一次循环累计值为11111
      Else
      d = c + 11111    '用户名的每位的ASCII码值加上11111
      End If
      e = e + d    '将累加值存入变量 E 中
      Next i
      Text2.Text = e    '循环完成后 E中存放的就是真正的注册码了
      End If
End Sub

  • 标 题:这个太简单了! (542字)
  • 作 者:伪装者[CCG]
  • 时 间:2001-8-17 12:17:32

#include "stdio.h"
main()
{
unsigned char string[98];
int d,i;
unsigned long c,e=11111,f=0;
printf("*********CrackMe 1.0*********\nThis keygen is made by Pretender\nPlease input your name : ");
gets(string);
printf("Your Register code is  : ");
d=strlen(string);
for(i=0;i<d;i++)
{c=string[i];
  f+=c;
}
f+=(d+1)*e;
printf("%ld",f);
printf("\n *****************************      ---    ---    ---\n *Welcome to WWW.CRACKNOW.COM*      /      /      / --\n *****************************      ---    ---    --/\n");
}