00427F94|.5>popecx
00427F95|.8>movecx,dwordptr[52E328];001._IconConverter
00427F9B|.8>movedx,dwordptr[ecx]
00427F9D|.8>movbyteptr[edx+3E4],al
00427FA3|.F>decdwordptr[ebp-3C]
00427FA6|.8>leaeax,dwordptr[ebp-C]
00427FA9|.B>movedx,2
00427FAE|.E>call<sub_509664>
00427FB3|.A>moveax,dwordptr[52E328]
00427FB8|.8>movecx,dwordptr[eax]
00427FBA|.8>cmpbyteptr[ecx+3E4],0
00427FC1|.0>je<loc_4281E6>
3.经典的语句,判断是否为数字。后来调试才证实是注册码的20-24位必须为数字。
关键call<sub_4262FC>里对20-24位没有交代。这个软件的巧妙就在于:在程序的
两处分别进行判断,迷惑了一些人。那些以注册码的获得为目的的人可能会蒙对,
虽然错误地理解为20-24位为任意字符,却没有输入字母,而是运气地输入数字。
但写注册机时,这种理解的粗心是致命的。因此将注册机的编写作为比算法分析(并追出
注册码)层次更高的境界是有理由的。
00428010|.E>call<System::AnsiString::c_str(void)>
00428015|.0>movsxedx,byteptr[eax+17]
00428019|.8>cmpedx,30
0042801C|.7>jlshort<loc_428034>
0042801E|.8>moveax,dwordptr[ebp-5C]
00428021|.0>addeax,320
00428026|.E>call<System::AnsiString::c_str(void)>
0042802B|.0>movsxedx,byteptr[eax+17]
0042802F|.8>cmpedx,39
00428032|.7>jleshort<loc_428043>
00428034>|>8>movecx,dwordptr[52E328];001._IconConverter
0042803A|.8>moveax,dwordptr[ecx]
0042803C|.C>movbyteptr[eax+3E4],0
00428043>|>B>movdl,1
4.将注册信息写入注册表,形式:
WindowsRegistryEditorVersion5.00
[HKEY_CURRENT_USER\Software\XTZY\Pic2Ico]
"NO"="520NBA2005YH*QH*UK*12345C*AN*PD*MO*OAD*RP2I3"
"Name"="NBA2005"
其中NO就是注册码。
0042804A|.E>call<Registry::TRegistry::TRegistry(>
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-32335-17.html
学术界和网上众说纷纭
我们该怎么办呀