【文章标题】: 友信农资会员管理系统算法分析与注册机源码
【软件下载】: 自已搜索吧
【操作平台】: WINXP SP3
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
一、通过PEID查壳为无壳程序,编写语言为:Microsoft Visual C++ 5.0 [Overlay]
在安装目录下有很多PB*.dll文件,所以判断真正的编写训言为PB,因此我们使用shudepb来看看
二、打开软件,信息码为:WD-WCAPA0554239,此时输入注册码:12345678,点确定后有错误提示,“注册码不对,请重输!”
三、打开shudepb
文件-->读取EXE文件-->选择安装目录下的nzgl.exe-->打开
编辑-->展开所有项
编辑-->全局搜索-->“注册码不对,请重输!”
此时找到了这个信息
//clicked (none) returns long [pbm_bnclicked]
string r
string k
string k2
string sws
//Has been Shielded.
k2 = getid()
k = jmpass(k2)
k = trim(k)
PARENT.ii_count ++
IF PARENT.ii_count <= 5 THEN //5
IF PARENT.sle_1.text <> "" THEN //7
r = trim(PARENT.sle_1.text)
IF r = k THEN //10
insert into xxh ( bz , mc ) values ( :k2 , :k ) USING sqlca;
IF sqlca.sqlcode <> 0 THEN //13
ROLLBACK USING sqlca;
messagebox("失败","更新注册标志失败:" + sqlca.sqlerrtext)
RETURN
END IF //13
COMMIT USING sqlca;
registryset("HKEY_CURRENT_USER\software\友信软件","zjwxp888",regstring!,r)
messagebox("恭喜","软件已通过注册!")
close(PARENT)
open(w_login)
GOTO LABEL_KENSHU_31
END IF //10
messagebox("注意","注册码不对,请重输!")
PARENT.sle_1.setfocus()
GOTO LABEL_KENSHU_31
END IF //7
messagebox("注意","注册码不能为空!")
PARENT.sle_1.setfocus()
ELSE //5
messagebox("注意","五次输入不正确,系统将退出!")
HALT CLOSE
END IF //5
LABEL_KENSHU_31:
RETURN
继续搜索
编辑-->全局搜索-->jmpass
//Public function jmpass (string as_password) returns string
//string as_password
string ls_passwdc
string ls_passwd
string ls_pwd
integer i
integer li_len
long ll_passwda
//Has been Shielded.
li_len = len(as_password) //as_password就是我们的机器码
FOR i = 0 TO li_len - 1
ls_passwd = mid(as_password,i + 1,1) //取字符
IF mod(i,2) = 0 THEN //6 //用i来判断是奇偶数来决定如何处理
ll_passwda = asc(ls_passwd) - (i - 2) //i如果是偶数则取其对应字符的asc,然后-(i-2)后的值赋给ll_passwda
ELSE //6
ll_passwda = asc(ls_passwd) + (i + 2) //i如果是偶数则取其对应字符的asc,然后+(i+2)后的值赋给ll_passwda
END IF //6
ls_passwdc = char(ll_passwda) //把ll_passwda值转成对应的字符
ls_pwd = ls_pwd + ls_passwdc //字符进行连接形成注册码
NEXT
RETURN ls_pwd
此时找到了这个
这个就是我们的源码
注册机源码:
Private Sub Command1_Click()
li_len = Len(Text1.Text)
For i = 0 To li_len - 1
ls_passwd = Mid(Text1.Text, i + 1, 1)
If i Mod 2 = 0 Then
ll_passwda = Asc(ls_passwd) - (i - 2)
Else
ll_passwda = Asc(ls_passwd) + (i + 2)
End If
ls_passwdc = Chr(ll_passwda)
ls_pwd = ls_pwd + ls_passwdc
Next
Text2.Text = ls_pwd
End Sub