list($token,$secret,$openid,$time) = explode("",qqmd5($_GET[qq_api],"DE",$webdb[QQ_QBappkey]));
if(!$openid){
showerr('ÐÅÏ¢²»È«,³ö´íÁË!!');
}elseif($timestamp-$time>60){
showerr('³¬Ê±ÁË!!');
}
set_cookie('token_secret',mymd5($token."".$secret."".$openid),3600);
if($rs=$db->get_one("SELECT * FROM {$pre}memberdata WHERE `qq_api`='$openid'")){
可以先看见通过提交的qq_api进入QQmd5 decode出来切割为token secret openid time赋值,我们跟进
if($action=="DE"){ //+ºÅÔÚURLµÄ´«µÝ»á³öÎÊÌâ
$code=str_replace('QIBOSOFT','+',$code);
}
$secret_string = $rand.'9=-)~.,/|(5*j,.^&;?.%#@!'; //ÕâÀï²»¿ÉÒÔÔÙÐÞ¸Ä
if(!is_string($string)){
$string=strval($string);
}
if($string==="") return "";
if($action=="EN") $md5code=substr(md5($string),8,10);
else{
$md5code=substr($string,-10);
$string=substr($string,0,strlen($string)-10);
}
//$key = md5($md5code.$_SERVER["HTTP_USER_AGENT"].$secret_string);
$key = md5($md5code.$secret_string);
$string = ($action=="EN"?$string:base64_decode($string));
$len = strlen($key);
$code = "";
for($i=0; $i<strlen($string); $i++){
$k = $i%$len;
$code .= $string[$i]^$key[$k];
}
$code = ($action == "DE" ? (substr(md5($code),8,10)==$md5code?$code:NULL) : base64_encode($code)."$md5code");
if($action=="EN"){ //+ºÅÔÚURLµÄ´«µÝ»á³öÎÊÌâ
$code=str_replace('+','QIBOSOFT',$code);
}
return $code;
}
我们不看加密过程,我只需要确定在整个加密过程是否还存在除QQ_QBappkey以外的key值(确定是不存在其他的)那现在我们需要看看QQ_QBappkey的值是多少并且怎么来的
QQ_QBappkey是内置在config文件中的一处值并非install时生成,那么现在看进入点
if(!$webdb[QQ_login]){
showerr('该功能已关闭');
}
if(!table_field("{$pre}memberdata",'qq_api')){
$db->query("ALTER TABLE `{$pre}memberdata` ADD `qq_api` VARCHAR( 32 ) NOT NULL AFTER `username`;");
$db->query("ALTER TABLE `{$pre}memberdata` ADD INDEX ( `qq_api` );");
}
if($webdb[QQ_login]==2){
首先判断功能是否开启(默认是开启),其次是否开启公共接口(默认开启)