首页
社区
课程
招聘
KeyGenMe:Crack入门系列
发表于: 2006-10-26 10:18 113323

KeyGenMe:Crack入门系列

2006-10-26 10:18
113323
收藏
免费 7
支持
分享
最新回复 (223)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
WYC
201
谢谢!这第五个注册码的字符是这么换过来的不清楚。
     
上传的附件:
2008-2-25 20:21
0
雪    币: 171
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
202
内容已被删除
2008-2-28 20:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
203
马上学习
2008-3-3 21:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
204
下载完,慢慢去研究。。
2008-3-8 15:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
205
好东西,谢谢了.
2008-3-8 23:10
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
206
在这里内存注册机就是在内存中把JNZ改为JZ对吗?是用什么工具做的?不会自己写个软件吗?是用游戏修改工具吗?
2008-3-9 22:38
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
207
晓得内存注册机了,大家不用回答了
2008-3-10 11:17
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
208
我的第五个VC的,见笑了!

//IDC_EDIT2为注册码;
//IDC_EDIT1为用户名;

void CREG_KEYGENME_05Dlg::OnButton1()
{
        // TODO: Add your control notification handler code here
        char my[]="~!@#$%^&*()_+|\\=-/?.,><;:`";
        char user[1024];
        char reg[1024];
        memset(user,0,1024);
        memset(reg,0,1024);
        int l= GetDlgItemText(IDC_EDIT1,user,1024);
        if (l>=1023)
        {
                MessageBox("用户名太长");
                return;
        }
        if (l % 2==1)
        {
                user[l]='*';
                user[l+1] = '\0';
                l = l + 1;
        }
        for (int i=0;i< (l / 2); i++)
        {
                int a;
                char m;
                m = user[i];
                a = (m * 4 ) % 0x1A;
                reg[i*2] =my[a];
                m = user[i + 1];
                a = (m + m * 2 ) % 0x1a;
                reg[i*2 + 1]= my[a];
        }
        reg[i*2]= '\0';
        SetDlgItemText(IDC_EDIT2,reg);
}
2008-3-10 15:09
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
209
我的机器是win2k,万能断点不起作用怎么办?bpx hmemcpy行吗?
2008-3-10 15:21
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
210
VB的不好破样,总是麻麻杂杂的
2008-3-10 20:52
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
211
收下了```
2008-3-18 18:49
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
212
......
不会弄啊~~
2008-3-19 17:29
0
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ppt
213
怎么没有后续的CrackMe了
2008-6-2 10:09
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
214
KeyGenMe_03算法分析
本人是菜鸟,在这里献丑了。^_^
假设:name = 123 serial = 456
码表:
A.B.C.D.E.F.G.H.I.J.K
L.M.N.O.P.Q.R.S.T.U.V
W.X.Y.Z.0.1.2.3.4.5.6
7.8.9
1、name的第一个字符的asc码值乘以1,乘积加1存入edi;
     name的第二个字符的asc码值乘以2,乘积加上edi的值结果存入edi
     以此类推,name的第N个字符的asc码值乘以N再加edi的值结果存入edi
    【在这里就是:edi = 31*1+1=32,edi = edi+32*2=96,edi=edi+33*3=12F】
2、将第一步的最终计算结果12F乘以147D5,结果等于184051B

3、将第2步的计算结果184051B除以24,得到余数1B,将1B加1,等于1C,将1C乘以2,
   得到38,再减去2,得到36,换成10进制就是54,在码表找到第54个字符(.也算是一个字符)
   ,对应的码值是1,所以真实的serial的第一个字符是1.
    【在这里就是:184051B%24=1B,1B+1=1C,1C*2=38,38-2=36】
   
4、通过fild,fstp,fld指令,把第2步获得的结果184051B转换为浮点实数25429275,将25429275
     除以3,把所得的商转换成16进制存入esi中,用esi的值除以24,所得余数为9,将9加上1等于
    A,A乘以2,再减去1,得到12转成十进制就是18,在码表中对应的值为J
     所以真实的serial的第二个字符是J.
   
5、通过fild,fstp,fld指令,把第4步中esi的值转换为浮点实数,再除以3,把商转换成10进制存入
   esi,再用esi的值除以24,所得的余数为F,(F+1)*2-2=38换成10进制就是30,对应码值是P
6、循环执行第5步,每次以上一次的esi的值做第5步的运算,直到esi的值等于0。
下面就name = 123演算一次
1、31*1+1+32*2+33*3=32+64+99=12F

2、12F*147D5=184051B

3、184051B%24=1B,1B+1=1C,1C*2-2=36,把36换成十进制等于54,对应码值为1

4、把184051B转换为浮点实数25429275,25429275/3=8476425,换成16进制等于815709,存入esi,815709%24=9,9+1=10,10*2-2=12
   12换成10进制就是18,对应的码值是J

5、把815709换成浮点实数,所得结果除以3,商等于2825475,换成16进制就是2B1D03,存入esi,
   2B1D03%24=F,(F+1)*2-2=1E,换成10进制就是30,对应的码值是P

6、把2B1D03换成浮点实数,所得结果除以3,商等于941825换成16进制就是E5F01,存入esi,
   E5F01%24=1D,(1D+1)*2-2=3A,换成10进制就是58,对应的码值是3
   
按照此计算方式一直计算直到esi的值等于0。
所以当name = 123时,真实serial=1JP3W589Y69AMQFCB

不当之处多多包含。
2008-7-3 22:13
0
雪    币: 261
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
215
看来论坛真是人才辈出啊!又一颗明星诞生了!哎!惭愧!
2008-7-4 00:01
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
216
KeyGenMe_04算法分析
本人是菜鸟,在这里献丑了。^_^
假设name=123
serial的长度必须是十个字符,并且只能是数字
第1个字符asc码值与第6个字符asc码值的和必须是69 所以
1 2 3 4 5 6 7 8 9 10
--------------------
8         5
第2个字符asc码值与第7个字符asc码值的和必须是67 所以
1 2 3 4 5 6 7 8 9 10
--------------------
8 6       5 1
第3个字符asc码值与第8个字符asc码值的和必须是69 所以
1 2 3 4 5 6 7 8 9 10
--------------------
8 6 8     5 1 1   
第4个字符asc码值与第9个字符asc码值的和必须是70 所以
1 2 3 4 5 6 7 8 9 10
--------------------
8 6 8 8   5 1 1 8  
第4个字符asc码值与第10个字符asc码值的乘积必须是A8C 所以
1 2 3 4 5 6 7 8 9 10
--------------------
8 6 8 8 6 5 1 1 8 2
所以当
name=123时,serial=8688651182
2008-7-4 00:29
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
217
keygenme_05算法分析
本人是菜鸟,在这里献丑了。^_^
假设name=1234
码表如下:
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25//这一行是码值所在的位置
-----------------------------------------------------------------------------//这一行只是分隔符
7E 21 40 23 24 25 5E 26 2A 28 29 5F 2B 7C 5C 3D 2D 2F 3F 2E 2C 3E 3C 3B 3A 60//这一行是码值 
~  !   @  # $  %  ^  &  *  (  )  _  +  |  \  =  -  /  ?  .  ,  >  <  ;  :  `
1、name的长度必须大于4
2、name长度值除以2,所得商存于[ebp-20],这个值后面会用到,是一个循环的次数
   【在这里就是:[ebp-20]=4/2=2】
   
3、获取name的第一个字符的asc值,用这个值乘以4,所得结果除以1A,得到余数E,E转换成10进制就是14,
   查找码表,对应的码值是5C,即“\”
   【在这里就是:31*4=C4,C4%1A=E,10进制值等于14】
   
4、获取name的第二个字符的asc值,假设这个值为asc2,则asc2=asc2+asc2*2,所得结果除以1A,余数为14
   转换成10进制为20,查找码表,对应的字符为“,”
   【在这里就是:32+32*2=96,96%1A=14,10进制值等于20】
   
5、[ebp-20]的值减1
   
6、获取name的第二个字符的asc码值,用这个值乘以4,得到的结果再除以1A,得到余数为12,转换成10进制
   就是18,对应码值为“?”
   【在这里就是:32%4=C8,C8%1A=12,10进制值等于18】  
   
7、获取name的第三个字符的asc值,假设这个值为asc3,则asc3=asc3+asc3*2,计算结果除以1A,余数为17,转换
   成10进制,就是23,对应的码值为“;”
   【在这里就是:33+33*2=99,99%1A=17,10进制值等于23】
   
8、[ebp-20]的值减1

因为[ebp-20]的值已等于0,所以serial的计算已经完成,若[ebp-20]的值大于2则按照上面的计算规则,继续计算直到
[ebp-20]=0。
所以真实的serial值为\,?;
2008-7-4 12:57
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
218
crackme_06算法分析
本人是菜鸟,在这里献丑了。^_^
假设name=1234
码表:
0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15//这一行是码值所在位置
-------------------------------------------------------------------//这一行没用的说
30 37 31 33 36 32 64 65 39 66  38 61  62  34  35   63//这一行是码值的asc值
0   7   1   3   6   2   d   e   9   f     8   a    b    4     5     c //这一行是码值代表的符号
1、name的长度必须大于4

2、获取C盘的序列号,本机是D8227F69,将D8227F69左移5位得到447ED20

3、将第2步得到的447ED20循环左移0D位,结果为FDA40089

4、获取D盘的序列号,本机为8CE3FA13

5、C盘的序列号加上D盘的序列号,结果等于6506797C

6、将第5步的结果6506797C左移5位得到A0CF2F80

7、将第6步的结果A0CF2F80循环左移0D位得到E5F01419

8、C盘序列号的值与D盘序列号的值做浮点运算(这里没看明白~)结果为79D13310

9、name的各个字符的asc值相乘,结果为632478

10、将第9步的结果632478循环左移1位,结果为C648F0

11、将第8步的运算结果79D13310与第10步的结果C648F0坐or运算,结果为79D77BF0
       再将79D77BF0与0FFFFFFF相与,结果为9D77BF0
   
12、将第11步的结果9D77BF0除以10,余数为0,在码表中查找第0个码值为30即0

13、将9D77BF0除以4,所得商为275DEFC

14、将第13步的275DEFC除以10,余数为C,转换为10进制等于12,对应码值为62即b

15、将275DEFC除以4,商为9D77BF,按第14步的方式计算下一位的码值,

以此类推,直到除以4之后的商为0则计算完毕。

所以
name=1234时,serial=0bcca5e4e24ef1
2008-7-4 16:39
0
雪    币: 421
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
219
写算法分析的朋友不错,给大家很多学习的经验
2008-7-8 11:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
220
没有详细的破解过程啊 哎 水平不够..
2008-7-10 17:52
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
221
keygenme_07算法分析
本人是菜鸟,在这里献丑了。^_^
假设name=rmb
码表如下:
A   B    C    D    E    F
0   1    2    3    4    5

1、获取输入的name,把输入的name加上-pediy
    【在这里就是rmb-pediy】

2、将第一步的rmb-pediy的asc码值分别乘以1B然后把结果累加起来
   【在这里就是:72*1B=C06,6D*1B=B7F,62*1B=A56
      2D*1B=4BF,70*1B=BD0,65*1B=AA7,64*1B=A8C,69*1B=B13,
      79*1B=CC3,把以上计算结果累加得到:5F73】

3、5F73除以6得到余数3,查找码表得到D
     5F73除以3,结果四舍五入得到1FD1,1FD1除以6等到余数3
     查找码表得到A,以此类推,直到除以3得到的商=0时结束。
   【在这里就是:
     5F73%6=3=>D,   5F73/3=1FD1
       1FD1%6=3=>D,   1FD1/3=A9B
       A9B%6=3=>D,     A9B/3=389
       389%6=5=>F,     389/3=12E
       12E%6=2=>C,    12E/3=65
       65%6=5=>F,       65/3=22
       22%6=4=>E,       22/3=B
       B%6=5=>F,         B/3=4
       4%6=4=>E,         4/3=1
       1%6=1=>B          1/3=0 】
所以name=rmb 时
Serial=DDDFCFEFEB
不当之处多多包涵。
2008-7-24 17:01
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rmb
222
keygenme_08算法分析
本人是菜鸟,在这里献丑了。^_^
假设name=123
码表:
A  B  C  D  E  F  G  H  I  J  K //码值
0  1  2  3  4  5  6  7  8  9  A //对应余数

L  M  N  O  P  Q  R   S   T   U   V  //码值
B  C  D  E  F  10 11 12 13 14 15 //对应余数

W  X   Y    Z  //码值
16 17 18  19 //对应余数

1、获取输入得name得长度
  【在这里就是3】
  
2、获取输入的serial,取serial每个字符的asc码值加上第一步的name的长度值,结果除以1A,
   用余数去查码表刻分别获取对应得码值.
   
3、用第二步的结果和字符串“UYQWHTPWHCJUPFTXHC"比较,相等则成功

所以假设输入的serial的某个字符得asc码值为X,(X+3)除以1A的余数等于Y
则有以下公式
N*1A+Y-3=X,其中N可以是1,2,3,4,。。。中得某个值,一般为2就可以
Y就对应码表中得“对应余数”的值

比如正确的serial转换后的第一个字符是U,U在码表中“对应余数”的值等于14,
所以2*1A+14-3=X,可以得出X=45,转换成十进制就是69,对应得asc字符是E,所以E就是
输入的serial中的正确字符,依此类推。

当name=123时,serial=EIAGRDZGRMTEZPDHRM
2008-7-24 19:28
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
223
第一次学分析算法,在前辈们成果的基础上做了两个题目,分享哈

keygenme_01
爆破:
00402576 . F6C4 40 test ah, 40
00402579 0F84 86000000 je 00402605 //这一句nop掉即可
0040257F . B9 04000280 mov ecx, 80020004

算法分析:
//---------------------------------------------------------------------------------------------------------
下断点:bp __vbaLenBstr
0040241D . FF15 08104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; MSVBVM60.__vbaLenBstr
00402423 . 8BC8 mov ecx, eax
00402425 . FF15 50104000 call dword ptr [<&MSVBVM60.__vbaI2I4>] ; MSVBVM60.__vbaI2I4
0040242B . 8945 D0 mov dword ptr [ebp-30], eax
0040242E . 66:3D 0300 cmp ax, 3 ; 用户名是否大于3?
00402432 . 0F8C CD010000 jl 00402605 ; 小于则结束
00402438 . 8B0E mov ecx, dword ptr [esi]
0040243A . 56 push esi
0040243B . FF91 0C030000 call dword ptr [ecx+30C]
00402441 . 50 push eax
00402442 . 8D55 C4 lea edx, dword ptr [ebp-3C]
00402445 . 52 push edx
00402446 . FF15 30104000 call dword ptr [<&MSVBVM60.__vbaObjSet>] ; MSVBVM60.__vbaObjSet
0040244C . 8BF0 mov esi, eax
0040244E . 8B06 mov eax, dword ptr [esi]
00402450 . 8D4D C8 lea ecx, dword ptr [ebp-38]
00402453 . 51 push ecx
00402454 . 56 push esi
00402455 . FF90 A0000000 call dword ptr [eax+A0]
0040245B . DBE2 fclex ; 浮点数清楚异常
0040245D . 3BC3 cmp eax, ebx
0040245F . 7D 12 jge short 00402473
00402461 . 68 A0000000 push 0A0
00402466 . 68 401C4000 push 00401C40
0040246B . 56 push esi
0040246C . 50 push eax
0040246D . FF15 20104000 call dword ptr [<&MSVBVM60.__vbaHresultChe>; MSVBVM60.__vbaHresultCheckObj
00402473 > 8B55 C8 mov edx, dword ptr [ebp-38] ; 取假码
00402476 . 895D C8 mov dword ptr [ebp-38], ebx
00402479 . 8D4D DC lea ecx, dword ptr [ebp-24]
0040247C . FFD7 call edi
0040247E . 8D4D C4 lea ecx, dword ptr [ebp-3C]
00402481 . FF15 B0104000 call dword ptr [<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
00402487 . 8B55 DC mov edx, dword ptr [ebp-24]
0040248A . 52 push edx
0040248B . FF15 08104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; 取假码长度
00402491 . 8BC8 mov ecx, eax
00402493 . FF15 50104000 call dword ptr [<&MSVBVM60.__vbaI2I4>] ; MSVBVM60.__vbaI2I4
00402499 . 66:3BC3 cmp ax, bx
0040249C . 0F84 63010000 je 00402605 ; 判断假码长度,为0则退出
004024A2 . BF 01000000 mov edi, 1 ; edi中存放每次运算的注册码,初始值为1
004024A7 . 8BF7 mov esi, edi ; esi为计数,循环用户名长度次,此处开始初始化
004024A9 . 8B1D 0C104000 mov ebx, dword ptr [<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
004024AF > 66:3B75 D0 cmp si, word ptr [ebp-30] ; 开始循环取用户名的一位
004024B3 . 0F8F 93000000 jg 0040254C
004024B9 . C745 BC 01000000 mov dword ptr [ebp-44], 1
004024C0 . C745 B4 02000000 mov dword ptr [ebp-4C], 2
004024C7 . 8D45 CC lea eax, dword ptr [ebp-34] ; 将用户名存放地址放入eax
004024CA . 8985 7CFFFFFF mov dword ptr [ebp-84], eax
004024D0 . C785 74FFFFFF 08400000 mov dword ptr [ebp-8C], 4008
004024DA . 8D4D B4 lea ecx, dword ptr [ebp-4C] ; address of "2"
004024DD . 51 push ecx
004024DE . 0FBFD6 movsx edx, si
004024E1 . 52 push edx
004024E2 . 8D85 74FFFFFF lea eax, dword ptr [ebp-8C]
004024E8 . 50 push eax
004024E9 . 8D4D A4 lea ecx, dword ptr [ebp-5C]
004024EC . 51 push ecx
004024ED . FF15 44104000 call dword ptr [<&MSVBVM60.#632>] ; MSVBVM60.rtcMidCharVar
004024F3 . 8D55 A4 lea edx, dword ptr [ebp-5C]
004024F6 . 52 push edx
004024F7 . 8D45 C8 lea eax, dword ptr [ebp-38]
004024FA . 50 push eax
004024FB . FF15 74104000 call dword ptr [<&MSVBVM60.__vbaStrVarVal>>; MSVBVM60.__vbaStrVarVal
00402501 . 50 push eax
00402502 . FF15 18104000 call dword ptr [<&MSVBVM60.#516>] ; MSVBVM60.rtcAnsiValueBstr
00402508 . 66:0FAFC6 imul ax, si ; 用户名对应的ASCII换算成十进制乘以当前循环的次数
0040250C . 0F80 5F010000 jo 00402671 ; 若溢出,则退出
00402512 . 0FBFC8 movsx ecx, ax
00402515 . 03CF add ecx, edi ; 上面相乘的结果与上一个循环的值相加,第一次则加初始化值1
00402517 . 0F80 54010000 jo 00402671 ; 若溢出,则退出
0040251D . 8BF9 mov edi, ecx ; 最终的结果保存到edi
0040251F . 8D4D C8 lea ecx, dword ptr [ebp-38]
00402522 . FF15 B4104000 call dword ptr [<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
00402528 . 8D55 A4 lea edx, dword ptr [ebp-5C]
0040252B . 52 push edx
0040252C . 8D45 B4 lea eax, dword ptr [ebp-4C]
0040252F . 50 push eax
00402530 . 6A 02 push 2
00402532 . FFD3 call ebx
00402534 . 83C4 0C add esp, 0C
00402537 . B8 01000000 mov eax, 1 ; 计数加一……
0040253C . 66:03C6 add ax, si
0040253F . 0F80 2C010000 jo 00402671 ; 判断溢出
00402545 . 8BF0 mov esi, eax ; esi为计数,加一继续循环
00402547 .^ E9 63FFFFFF jmp 004024AF
0040254C > 69FF 96740100 imul edi, edi, 17496 /310 ; edi *=95382 //784
00402552 . 0F80 19010000 jo 00402671
00402558 . 897D D8 mov dword ptr [ebp-28], edi

……………………………………………………
edi为计算出的注册码
……………………………………………………

算法注册机:
#include <stdio.h>
#include <stdlib.h>
#include <string,h>

int main()
{
char *Name = new char; //store the user name
int password = 1;
int length ,j = 0;
printf("Input user name(Under 25 and above 3):");
gets(Name);
Lentgh = strlen(Name);
for(;j < Length ;j++)
{
password = ((int)Name[j] )*(j+1) + password;
}
password *= 95382;
printf("password :%9d\n",password);
if(Name)
delete []Name;
system("pause");
return 0;
}
2008-7-24 19:53
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
224
keygenme_02

………………………………………………………………………………………………………………
004024AA . 52 push edx
004024AB . FF15 08104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; 取假码长度
004024B1 . 8BC8 mov ecx, eax
004024B3 . FF15 50104000 call dword ptr [<&MSVBVM60.__vbaI2I4>] ; MSVBVM60.__vbaI2I4
004024B9 . 66:3BC3 cmp ax, bx
004024BC . 0F84 67010000 je 00402629 ; 判断假码长度是否为0?
004024C2 . BF 01000000 mov edi, 1 ; 初始化,循环开始,取第一位
004024C7 . 8BF7 mov esi, edi ; 初始化计数
004024C9 . 8B1D 0C104000 mov ebx, dword ptr [<&MSVBVM60.__vbaFreeV>; MSVBVM60.__vbaFreeVarList
004024CF > 66:3B75 D0 cmp si, word ptr [ebp-30] ; 进入循环
004024D3 . 0F8F 89000000 jg 00402562 ; 跳出循环的条件
004024D9 . C745 BC 01000000 mov dword ptr [ebp-44], 1
004024E0 . C745 B4 02000000 mov dword ptr [ebp-4C], 2
004024E7 . 8D45 CC lea eax, dword ptr [ebp-34]
004024EA . 8985 7CFFFFFF mov dword ptr [ebp-84], eax
004024F0 . C785 74FFFFFF 08400000 mov dword ptr [ebp-8C], 4008
004024FA . 8D4D B4 lea ecx, dword ptr [ebp-4C]
004024FD . 51 push ecx
004024FE . 0FBFD6 movsx edx, si
00402501 . 52 push edx
00402502 . 8D85 74FFFFFF lea eax, dword ptr [ebp-8C]
00402508 . 50 push eax
00402509 . 8D4D A4 lea ecx, dword ptr [ebp-5C]
0040250C . 51 push ecx
0040250D . FF15 44104000 call dword ptr [<&MSVBVM60.#632>] ; MSVBVM60.rtcMidCharVar
00402513 . 8D55 A4 lea edx, dword ptr [ebp-5C]
00402516 . 52 push edx
00402517 . 8D45 C8 lea eax, dword ptr [ebp-38]
0040251A . 50 push eax
0040251B . FF15 74104000 call dword ptr [<&MSVBVM60.__vbaStrVarVal>>; MSVBVM60.__vbaStrVarVal
00402521 . 50 push eax
00402522 . FF15 18104000 call dword ptr [<&MSVBVM60.#516>] ; MSVBVM60.rtcAnsiValueBstr
00402528 . 0FBFC8 movsx ecx, ax
0040252B . 03CF add ecx, edi
0040252D . 0F80 62010000 jo 00402695 ; 判断是否溢出
00402533 . 8BF9 mov edi, ecx ; edi=edi+ax
00402535 . 8D4D C8 lea ecx, dword ptr [ebp-38]
00402538 . FF15 B8104000 call dword ptr [<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0040253E . 8D55 A4 lea edx, dword ptr [ebp-5C]
00402541 . 52 push edx
00402542 . 8D45 B4 lea eax, dword ptr [ebp-4C]
00402545 . 50 push eax
00402546 . 6A 02 push 2
00402548 . FFD3 call ebx
0040254A . 83C4 0C add esp, 0C
0040254D . B8 01000000 mov eax, 1
00402552 . 66:03C6 add ax, si
00402555 . 0F80 3A010000 jo 00402695
0040255B . 8BF0 mov esi, eax
0040255D .^ E9 6DFFFFFF jmp 004024CF
00402562 > 69FF 10030000 imul edi, edi, 310 ; edi=edi*0x310H
00402568 . 0F80 27010000 jo 00402695
0040256E . DD05 E8104000 fld qword ptr [4010E8] ; 64位双精度
00402574 . FF15 9C104000 call dword ptr [<&MSVBVM60.__vbaFpI4>] ; MSVBVM60.__vbaFpI4
0040257A . 33F8 xor edi, eax ; 这里得到真码:edi=edi^26A2F285
0040257C . 897D D8 mov dword ptr [ebp-28], edi
0040257F . DB45 D8 fild dword ptr [ebp-28] ; 保存真码
00402582 . DD9D 14FFFFFF fstp qword ptr [ebp-EC] ; 浮点数保存出栈
00402588 . 8B4D DC mov ecx, dword ptr [ebp-24] ; 取假码
0040258B . 51 push ecx
0040258C . FF15 80104000 call dword ptr [<&MSVBVM60.__vbaR8Str>] ; MSVBVM60.__vbaR8Str
00402592 . DC9D 14FFFFFF fcomp qword ptr [ebp-EC] ; 此处ss[]中保存的为正确的注册码
00402598 . DFE0 fstsw ax ; 真码和假码做比较
0040259A . F6C4 40 test ah, 40
0040259D . 0F84 86000000 je 00402629
004025A3 . B9 04000280 mov ecx, 80020004
004025A8 . 894D 8C mov dword ptr [ebp-74], ecx
004025AB . B8 0A000000 mov eax, 0A
004025B0 . 8945 84 mov dword ptr [ebp-7C], eax
004025B3 . 894D 9C mov dword ptr [ebp-64], ecx
004025B6 . 8945 94 mov dword ptr [ebp-6C], eax
004025B9 . C785 6CFFFFFF 8C1C4000 mov dword ptr [ebp-94], 00401C8C ; UNICODE "Congratulations"


//………………………………………………………………………………………………
注册机源代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
char *Name = new char; //store the user name
int password = 1;
int Length ;
int j = 0;
printf("Input user name(Under 25 and above 2):");
gets(Name);
Length = strlen(Name);
for(;j < Length ;j++)
{
password = ((int)Name[j] ) + password;
}
password *= 784;
password = password ^ 648213125;
printf("password :%d\n",password);
if(Name)
delete []Name;
system("pause");
return 0;
}
2008-7-24 19:54
0
游客
登录 | 注册 方可回帖
返回
//