【软件名称】人事档案管理系统V5.0(网络版)
【应用平台】Win9x/NT/2000/XP
【软件大小】19m
【软件限制】未注册时,会不定期跳出要求注册的穸口。
【保护方式】注册码
【破解说明】只是为了爱好,没有别。
【分析工具】Olldbg,PBKILLER
【破解作者】LRLZZGS
【软件简介】人事档案管理系统采用了现在非常流行的可视化编程语言PowerBuilder 6.5及其配套的本地数据库系统Sybase SQL Anywhere Database进行开发,根据人事档案管理的实际需要及其个性化需求,实现了人事档案综合管理的功能;一方面给档案管理人员提供了一个直观方便、易于操作的界面,大大提高地原有的工作效率;另一方面又大大丰富了原有人事档案管理的职能,增加分离了职称评定、联系方式、户籍党籍、个人简历和集体户档案五块内容,使其更加适应新的人事档案管理的需要。并且由于采用了专用数据库操作系统,使大批量的数据操作(包括浏览、查询、统计)变得非常方便和快捷。
下载后,用PEID查无壳,PowerBuilder写的,直接用OD 跟,进入注册界面输入假码1234567812345678并下断点LSTRCMPA直接断在10C7210A处同时在EAX处出现真码,嘿嘿,明码比对。
然后用PBKILLER反编找到它的识别码和注册码的生成过程。就如此了,注册机我就不做了。免得侵权
10C720F4 50 push eax
10C720F5 FF15 B811D610 call dword ptr ds:[<&USER32.CharLo>; USER32.CharLowerA
10C720FB C2 0800 retn 8
10C720FE 90 nop
10C720FF 90 nop
10C72100 P> 8B4424 0C mov eax,dword ptr ss:[esp+C]
10C72104 8B4C24 08 mov ecx,dword ptr ss:[esp+8]
10C72108 50 push eax
10C72109 51 push ecx
10C7210A FF15 000ED610 call dword ptr ds:[<&KERNEL32.lstr>; kernel32.lstrcmpA
EAX 0098A968 ASCII "88X88Q4I9I3A37Q6"
ECX 00983AE8 ASCII "1234567812345678"
10C72110 C2 0C00 retn 0C
10C72113 90 nop
10C72114 90 nop
识别码生成过程:
string ls_begin
string ls_end
string ls_char
integer li_length
integer li_index
long li_asc
ls_begin = fs_begin
li_length = len(ls_begin)
do while li_length < 8
ls_begin = ls_begin + ls_begin
li_length = len(ls_begin)
loop
for li_index = 1 to 4
ls_char = mid(ls_begin,li_index,li_index)
li_asc = asc(ls_char)
li_asc = (li_asc * li_asc) * li_asc
if mod(li_index,3) = 0 then
li_asc = mod(li_asc,58)
li_asc = mod(li_asc,10)
li_asc = li_asc + 48
else
li_asc = mod(li_asc,91)
li_asc = mod(li_asc,26)
li_asc = li_asc + 65
end if
ls_end = ls_end + char(li_asc)
next
for li_index = 5 to 8
ls_char = mid(ls_begin,li_index,li_index)
li_asc = asc(ls_char)
li_asc = li_asc * li_asc
if mod(li_index,3) = 0 then
li_asc = mod(li_asc,91)
li_asc = mod(li_asc,26)
li_asc = li_asc + 65
else
li_asc = mod(li_asc,58)
li_asc = mod(li_asc,10)
li_asc = li_asc + 48
end if
ls_end = ls_end + char(integer(li_asc))
next
return ls_end
注册码的生成过程:
string ls_begin
string ls_end
string ls_char
integer li_length
integer li_index
long li_asc
ls_begin = fs_begin
li_length = len(ls_begin)
do while li_length < 16
ls_begin = ls_begin + ls_begin
li_length = len(ls_begin)
loop
for li_index = 1 to 6
ls_char = mid(ls_begin,li_index,li_index)
li_asc = asc(ls_char)
li_asc = li_asc * li_asc
if mod(li_index,3) = 0 then
li_asc = mod(li_asc,91)
li_asc = mod(li_asc,26)
li_asc = li_asc + 65
else
li_asc = mod(li_asc,58)
li_asc = mod(li_asc,10)
li_asc = li_asc + 48
end if
ls_end = ls_end + char(integer(li_asc))
next
for li_index = 7 to 12
ls_char = mid(ls_begin,li_index,li_index)
li_asc = asc(ls_char)
li_asc = (li_asc * li_asc) * li_asc
if mod(li_index,2) = 0 then
li_asc = mod(li_asc,91)
li_asc = mod(li_asc,26)
li_asc = li_asc + 65
else
li_asc = mod(li_asc,58)
li_asc = mod(li_asc,10)
li_asc = li_asc + 48
end if
ls_end = ls_end + char(integer(li_asc))
next
for li_index = 13 to 16
ls_char = mid(ls_begin,li_index,li_index)
li_asc = asc(ls_char)
li_asc = ((li_asc * li_asc) * li_asc) * li_asc
if mod(li_index,3) = 0 then
li_asc = mod(li_asc,91)
li_asc = mod(li_asc,26)
li_asc = li_asc + 65
else
li_asc = mod(li_asc,58)
li_asc = mod(li_asc,10)
li_asc = li_asc + 48
end if
ls_end = ls_end + char(integer(li_asc))
next
return ls_end
有不当之处,请各位大大提出。
[课程]FART 脱壳王!加量不加价!FART作者讲授!