00411ABF |. |7F 0B |jg short GEN32WIN.00411ACC 如果大于,就跳转
00411AC1 |> |47 |inc edi edi加上1
00411AC2 |. |80BC3D FCFEFFFF 0>|cmp byte ptr ss:[ebp+edi-104],0 比较下一字符是否为零
00411ACA |.^\75 9D \jnz short GEN32WIN.00411A69 为零则跳转
00411ACC |> 83FB 05 cmp ebx,5
00411ACF |. 7C 20 jl short GEN32WIN.00411AF1 取加密狗数据值

00411ec7 |. |b9 ff000000 |mov ecx,0ff。0049908f|.b9 64000000 |mov ecx,64。0049907b|.b9 19000000 mov ecx,19。
00411AD6 |. 8BC6 mov eax,esi 将esi赋给eax
00411AD8 |. 2BD2 sub edx,edx edx置为零
这一句代码的意思是用eax除以ebx,商放在eax中,余数放在edx中。ecx = edx + ecx+0x29a。0x00002b07 8d8c0a9a020000 lea ecx, dword [ds:edx+ecx+0x29a]。
00411ADC |. 3955 FC cmp dword ptr ss:[ebp-4],edx 比较edx中的真正注册码与加注册码
00411ADF |. 75 10 jnz short GEN32WIN.00411AF1 若相等就跳,不跳就挂
00411AE1 |. C705 60764600 010>mov dword ptr ds:[467660],1 没跳,值标志位为1,后面比较时用
00411AEB |. 8915 74764600 mov dword ptr ds:[467674],edx 把真的注册码放到地址467674
00411AF1 |> 5F pop edi
00411AF2 |. 5E pop esi
00411AF3 |. 5B pop ebx
00411AF4 |. 8BE5 mov esp,ebp
00411AF6 |. 5D pop ebp
00411AF7 \. C3 retn
Name: david
Code: 445478
总体上来说,是比较简单的。我这样的菜鸟就可以搞定的。^o^
语言算法总结:
dword ptr ds:[44E058]初识值是1,然后与15A4E35相乘,保存在eax中。eax再加上1。接着,右移10位,得到8位数,后四位与7FFF作与运算,其结果与eax的(ASCII-20h)的积再加上0E074E。最后,与esi(esi初识值为0)相加。然后再继续计算直到计算完所有的用户名字符。把"最终结果"(esi)与0F4240作除法运算加密狗破解bl锁,余数(换算成十进制)就是注册码。
附上C算法:
#include<stdio.h>
main()
{

41e-2 double f f float l l long double 0 0x0x31 0370x1f0x1f l long u unsigned 0xful unsigned long 15 'x' ascii '0'48 0 '0'48 xcha xcha - n - n f g f g d e d e p p 。1>msvcrtd.lib(_pdblkup_.obj) : error lnk2019: unresolved external symbol __imp__getprocessheap@0 referenced in function "int __cdecl _rtc_getsrcline(unsigned char *,wchar_t *,unsigned long,int *,wchar_t *,unsigned long)" (。 c 6 charshortintlong & and | or ^ xor ~ & n n & 0177 n 70 |1 x x | set_on x set_on 1 1 ^ 1 0 &|&&|| x 1y 2 x & y 0x && y 1 x 2 x 2 2 0 4 unsigned 0 signed 0 ~ 1 00 1 x x & ~077 x60x & ~077x & 0177700 x 16 xcha xcha - n - n f g f g d e d e p p 。
const/16 v1, 0xe。g += math.floor(math.random() * 0xf).tostring(0xf) + (i == 8 || i == 12 || i == 16 || i == 20 。_start+0xe: je +0xf <_start+0x1d>。
char name[64];
printf("************* Keygen for ChessGenius Classic 7.138R *************\n");
printf("Powered by David Nash\n");
printf("Please enter your name:");
gets(name);
for ( flag = 0; name[flag]; flag++ )
{
if ( name[flag] > 64 && name[flag] < 91 )
name[flag] += 32;
eax = (const1 * dword) + 1;
dword = eax;
eax = eax / 0X10000;
eax &= const2;
eax *= (name[flag] - 0x20);
eax += const3;
esi += eax;
}
esi = esi % const4;
printf("The code is: %d", esi);
getchar();
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-118239-2.html
任何东西都要一分为二看问题
女性
这是维护国家主权