【破文标题】:HR 人事管理系统5.8 算法分析
【破文作者】:KuNgBiM[DFCG]
【作者邮箱】:gb_1227@163.com
【软件名称】:企业通人事管理系统5.8
【软件大小】:8000 KB
【软件类别】:国外软件/共享版/商业管理
【下载地址】:http://www.soft101.com/Downloads/HR_RSGL.rar
【整理日期】:2005-9-11
【软件简介】:HR 人事管理系统,包括现代企业员工档案管理、人事管理、人事异动、奖惩管理、培训管理、证照管理、职称管理、系统管理等八大模块。C/S架构设计,具有强大的数据安全保障,并支持远程移动办公功能。
主要功能特点:
★界面美观易用:大图标图形导航,方便调用各功能组件。
★功能全面:包括现代企业员工档案管理、人事管理、人事异动、奖惩管理、培训管理、证照管理、职称管理、系统管理等八大模块。
★人事管理:对员工就职、员工调职、员工离职、员工复职等等都有全面的管理与明细的分析报表。
★数据查询:查询操作简单,系统内任何报表都具有查询、打印功能。
★生日管理:可以分多种方式查询、统计员工生日情况。
★安全保障:系统提供全面的数据备份、数据还原功能,数据安全得到全面保障。
★管理功能:系统每一个功能都可以分权限管理,方便多级别管理模式。
【保护方式】:注册码 + 启动NAG + 用户功能限制
【编译语言】:PowerBuilder 7.0
【调试环境】:WinXP、PEiD、PBKiller
【破解日期】:2005-09-18
【破解目的】:研究算法分析
【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
―――――――――――――――――――――――――――――――――
【破解过程】:
1
、PEiD查壳,无壳,显示为 Microsoft Visual C++ 5.0 [Overlay] 编译,但目录下发现有 PBVM80.DLL,当即判断为PowerBuilder编译。
2
、打开PBKiller,载入目录下的 rsgl.pbd 反编译后进行分析:
=============
反编译 rsgl.pbd 后,找到w_sys_zc窗口中定义的控件cb_3的clicked()事件响应代码段 ==============
string ls_zch
string ls_zch_1
decimal li_v_1 = 544 /*
单机版标识 */
decimal li_v_2 = 560 /*
网络版标识 */
decimal li_zcshu_t /*
声明注册数量变量 */ call super::clicked
;
if parent.rb_1.checked =
true then /*
默认的注册单机版的点击事件 */
ls_edition =
"4829" /*
单机版内部识别号 */
ls_zch = string(
dec (parent.sle_1.text) *
dec (ls_edition) + ls_dj,
"##########################" )
/*
装sle_1,ls_edition,ls_dj的值转换为decimal相加后再转换成指定格式的string */
ls_zch_1 = parent.em_1.text + parent.em_2.text + parent.em_3.text + parent.em_4.text
/*
连接以上控件中的字符串 */
if ls_zch_1 = left(ls_zch,4) + right(ls_zch,4) + left(right(ls_zch,8),4) + right(left(ls_zch,8),4) then
/*
从左边取四个字符 + 从右边取四个字符 + 从右面取八字在此基础上从左边取出四个 + 从左边取八个在此基础中从右取四个 */
/*
以上取出的字符相连判断看是否等于ls_zch_1 */
update user_base set slhao =
' ' , zchao =
' ' , lei =0 using sqlca
; /* 条件成立更新user_base这个表 */
/* SQL Parameters List
0-> :parent.sle_1.text
1-> :ls_zch_1
2-> :li_v_1
*/
if sqlca.sqlcode = 0 then
messagebox (parent.title,
"注册成功 !" )
update user_base set shu =0 using sqlca
;
halt
else
messagebox (parent.title,
"注册号正确但注册失败 !" )
end if
else
messagebox (parent.title,
"注册失败 !" )
end if
end if
if parent.rb_2.checked =
true and dec (parent.em_5.text) > 1 then /*
引发注册网络版的点击事件 */
ls_edition =
"2518" /*
网络版内部识别号 */
ls_zch = string((
dec (parent.sle_1.text) /
dec (parent.em_5.text)) *
dec (ls_edition) + ls_wl,
"##########################" ) /*
装sle_1,em_5,ls_edition,ls_wl的值转换为decimal相加后再转换成指定格式的string */
ls_zch_1 = parent.em_1.text + parent.em_2.text + parent.em_3.text + parent.em_4.text
/*
连接以上控件中的字符串 */
if ls_zch_1 = left(ls_zch,4) + right(ls_zch,4) + left(right(ls_zch,8),4) + right(left(ls_zch,8),4) then
/*
从左边取四个字符 + 从右边取四个字符 + 从右面取八字在此基础上从左边取出四个 + 从左边取八个在此基础中从右取四个 */
/*
以上取出的字符相连判断看是否等于ls_zch_1 */
update user_base set slhao =
' ' , zchao =
' ' , lei =0 using sqlca
; /* 条件成立更新user_base这个表 */
/* SQL Parameters List
0-> :parent.sle_1.text
1-> :ls_zch_1
2-> :li_v_2
*/
if sqlca.sqlcode = 0 then
messagebox (parent.title,
"注册成功 !" )
li_zcshu_t =
dec (parent.em_5.text)
update user_base set shu =0 using sqlca
;
/* SQL Parameters List
0-> :li_zcshu_t
*/
halt
else
messagebox (parent.title,
"注册号正确但注册失败 !" )
end if
else
messagebox (parent.title,
"注册失败 !" )
end if
end if
return
/*****************************************************************************************************
这个软件注册有个奇怪的问题就是在w_sys_zcj窗口中定义的控件cb_1的clicked()事件响应代码段中有这样的东东:
*****************************************************************************************************/
=============
反编译 rsgl.pbd 后,找到w_sys_zcj窗口中定义的控件cb_1的clicked()事件响应代码段 ==============
string ls_zch
call super::clicked
;
if parent.rb_1.checked =
true then
ls_edition =
"4829" /*
单机版内部识别号 */
ls_zch = string(
dec (parent.sle_1.text) *
dec (ls_edition) + ls_dj,
"##########################" )
parent.em_1.text = left(ls_zch,4)
parent.em_2.text = right(ls_zch,4)
parent.em_3.text = left(right(ls_zch,8),4)
parent.em_4.text = right(left(ls_zch,8),4)
else
ls_edition =
"2518" /*
网络版内部识别号 */
ls_zch = string((
dec (parent.sle_1.text) /
dec (parent.em_5.text)) *
dec (ls_edition) + ls_wl,
"##########################" )
parent.em_1.text = left(ls_zch,4)
parent.em_2.text = right(ls_zch,4)
parent.em_3.text = left(right(ls_zch,8),4)
parent.em_4.text = right(left(ls_zch,8),4)
end if
return
/*
看来上面是该软件的注册机哦~作者怎么会把这个也一起编译进去啊?!?! */
-------------------------------------------------------------------------------------------------------------------------
【算法总结】
由于反编译后的代码是PowerBuilder使用的可读性极强的PowerScript原代码,算法也很简单,所以应该看到我上面加的注释后,不难理解它的
算法,所以就不写什么算法总结了。
--------------------------------------------------------------------------------------------
版权所有(C)2005 KuNgBiM[DFCG] Copyright (C) 2005 KuNgBiM[DFCG] --------------------------------------------------------------------------------------------
Cracked By KuNgBiM[DFCG]
2005-09-18
0:33:33 AM
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)