能力值:
( LV2,RANK:10 )
|
-
-
201 楼
谢谢!这第五个注册码的字符是这么换过来的不清楚。
|
能力值:
( LV2,RANK:10 )
|
-
-
202 楼
内容已被删除
|
能力值:
( LV2,RANK:10 )
|
-
-
203 楼
马上学习
|
能力值:
( LV2,RANK:10 )
|
-
-
204 楼
下载完,慢慢去研究。。
|
能力值:
( LV2,RANK:10 )
|
-
-
205 楼
好东西,谢谢了.
|
能力值:
( LV2,RANK:10 )
|
-
-
206 楼
在这里内存注册机就是在内存中把JNZ改为JZ对吗?是用什么工具做的?不会自己写个软件吗?是用游戏修改工具吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
207 楼
晓得内存注册机了,大家不用回答了
|
能力值:
( 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);
}
|
能力值:
( LV2,RANK:10 )
|
-
-
209 楼
我的机器是win2k,万能断点不起作用怎么办?bpx hmemcpy行吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
210 楼
VB的不好破样,总是麻麻杂杂的
|
能力值:
( LV2,RANK:10 )
|
-
-
211 楼
收下了```
|
能力值:
( LV2,RANK:10 )
|
-
-
212 楼
......
不会弄啊~~
|
能力值:
( LV2,RANK:10 )
|
-
-
213 楼
怎么没有后续的CrackMe了
|
能力值:
( LV2,RANK:10 )
|
-
-
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
不当之处多多包含。
|
能力值:
( LV6,RANK:90 )
|
-
-
215 楼
看来论坛真是人才辈出啊!又一颗明星诞生了!哎!惭愧!
|
能力值:
( LV2,RANK:10 )
|
-
-
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
|
能力值:
( LV2,RANK:10 )
|
-
-
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值为\,?;
|
能力值:
( LV2,RANK:10 )
|
-
-
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
|
能力值:
( LV2,RANK:10 )
|
-
-
219 楼
写算法分析的朋友不错,给大家很多学习的经验
|
能力值:
( LV2,RANK:10 )
|
-
-
220 楼
没有详细的破解过程啊 哎 水平不够..
|
能力值:
( LV2,RANK:10 )
|
-
-
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
不当之处多多包涵。
|
能力值:
( LV2,RANK:10 )
|
-
-
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
|
能力值:
( 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; }
|
能力值:
( 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; }
|
|
|