Board logo

標題: 求saac 跟 gmsv之間的密碼驗證修改方法 [打印本頁]

作者: hongbbn    時間: 2013-5-4 23:37     標題: 求saac 跟 gmsv之間的密碼驗證修改方法

在saac方面
目前只知道修改 main.c內的

#ifndef _VIP
                char buff[50];
                sprintf(buff,"longzoro-%s-%d",svpass,123);
    if( strcmp( svpas , buff ) == 0 ){
#else
--------------------------------------------------------------
和gmsv里的init.c

#ifdef _VIP_ALL
            saacproto_ACServerLogin_send(acfd, getGameservername(), getAccountserverpasswd(), getCheckVip()*2);
#else
                        char buff[50];
                        sprintf(buff,"longzoro-%s-%d",getAccountserverpasswd(),123);
                        saacproto_ACServerLogin_send(acfd, getGameservername(), buff);
#endif

==========
net.c里的

      }else if (strcmp(Connect[ sockfd ].cdkey, "longzoro")!=0 || strcmp(Connect[ sockfd ].cdkey, "zengweimin")!=0) {


=-=========
還有npc_sysinfo.c里的

#define                NPC_SYSINFO_PASSWD_DEFAULT                "longzoro"


-------------------------------------

但我修改了以上地方都不能一至登入

網路上某些端可以登入,但某些源碼無法登入

請求各位大大還有其他地方要修改嗎?


還有一點...在linux上,我是用redhat的,如何編譯saac??有教學嗎??
想架個編個2.5玩玩,但總是無法完整打開, 網上有的教學說可以關掉saac的vip驗證,但我關了後,saac可以打開,但gmsv一連上後,兩秒就斷線
求解
作者: hongbbn    時間: 2013-5-4 23:41

這個是跳vip檢測

aac/main.c:
找到if(checkvip==0 || checkvip!=123456 * 2)
改为if(1==0)
这样gmsvjt不会出现[failed][duplicate login]错误(绕过vip检查)

但修改了後,連上去好快就掉線了



因為不知如何在linux編譯saac,現只能在windows編,但也不能通過saac咎gmsv之間的密碼驗證

這問題困擾了我好久

認真求解
作者: hongbbn    時間: 2013-5-6 01:35

最後也關上了 saac 里的verion.h  vip驗證,但運行一會後,出現

ACCharList 或 ACShowFMList

這兩個錯誤而斷線

求解
作者: wty4321    時間: 2013-5-6 12:53

我也遇到了這個問題,我是替換了原有的檢測使saac可以通用

首先,打開\saac\include\version.h,找到#define _VIP,將其註釋掉

//#define _VIP              //會員版本認證

然後,打開\saac\main.c,找到gmsv gs[MAXCONNECTION];,將其後跟著的#ifdef _VIP、#ifndef _VIP、#ifdef _VIP全註釋掉,然後加上正常檢測代碼(就是只檢測兩個.cf文件裏面服務器密碼是否相同)

Step1.使用 /* */ 註釋多行代碼(或者你也可以將其整個刪掉)
複製內容到剪貼板
代碼:
gmsv gs[MAXCONNECTION];
/*#ifdef _VIP
int login_game_server( int ti , char *svname , char *svpas , int checkvip,
               char *result , int resultlen ,
               char *retdata , int retdatalen )
#else
int login_game_server( int ti , char *svname , char *svpas ,
               char *result , int resultlen ,
               char *retdata , int retdatalen )
#endif
{
#ifndef _VIP
                char buff[50];
                sprintf(buff,"longzoro-%s-%d",svpass,123);
    if( strcmp( svpas , buff ) == 0 ){
#else
                if( strcmp( svpas , svpass ) == 0 ){
#endif
        log( "服務器密碼正確 %s\n" , svname );
    } else {
        log( "服務器密碼錯誤 %s\n" , svname );
        snprintf( result , resultlen , "失敗" );
        snprintf( retdata , retdatalen , "密碼錯誤" );
        return 0;
    }
#ifdef _VIP
    if(checkvip==0 || checkvip!=6302 * 2)
    {
            snprintf( result , resultlen , "failed" );
      snprintf( retdata , retdatalen , "duplicate login" );
      return 0;
    }
#endif
    {
        int i;
        for(i=0;i<MAXCONNECTION;i++){
            if( gs[i].use &&
                strcmp( gs[i].name , svname ) == 0 ){
                snprintf( result, resultlen, "failed" );
                snprintf( retdata , retdatalen, "duplicate login" );
                return 0;
            }
        }
    }
    snprintf( gs[ti].name , sizeof(gs[ti].name), "%s" , svname );
          gs[ti].fd = ti;
    snprintf( result , resultlen ,SUCCESSFUL );
    snprintf( retdata , retdatalen , "Nothing special" );
    DeleteMemLockServer(svname);        // Arminius 7.31 unlock server
    return 0;
}*/
Step2.在gmsv gs[MAXCONNECTION];后加上正常檢測代碼,顯示如下(注意直接換行后粘貼到gmsv gs[MAXCONNECTION];那行下面就行)
複製內容到剪貼板
代碼:
int login_game_server( int ti , char *svname , char *svpas ,
               char *result , int resultlen ,
               char *retdata , int retdatalen )
{
    if( strcmp( svpas , svpass ) == 0 ){
        log( "服务器密码正确 %s\n" , svname );
    } else {
        log( "服务器密码错误 %s\n" , svname );
        snprintf( result , resultlen , FAILED );
        snprintf( retdata , retdatalen , "bad passwd" );
        return 0;
    }
    {
        int i;
        for(i=0;i<MAXCONNECTION;i++){
            if( gs[i].use &&
                strcmp( gs[i].name , svname ) == 0 ){
                snprintf( result, resultlen, FAILED );
                snprintf( retdata , retdatalen, "duplicate login" );
                return 0;
            }
        }
    }
    snprintf( gs[ti].name , sizeof(gs[ti].name), "%s" , svname );
        gs[ti].fd = ti;
    snprintf( result , resultlen ,SUCCESSFUL );
    snprintf( retdata , retdatalen , "Nothing special" );
    DeleteMemLockServer(svname);        // Arminius 7.31 unlock server
    return 0;
}
[ 本帖最後由 wty4321 於 2013-5-7 10:27 編輯 ]
作者: hongbbn    時間: 2013-5-6 21:00

成功了,但又出現另一個情況

..............................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0042]
NT:[0.0042] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0032]
NT:[0.0032] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0036]
NT:[0.0035] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0033]
NT:[0.0033] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0041]
NT:[0.0041] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0034]
NT:[0.0034] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0029]
NT:[0.0029] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0032]
NT:[0.0032] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0044]
NT:[0.0044] NG:[0.0000] BT:[0.0000] CH:[0.0000]
.....................................
Íæ¼Ò=0 ³èÎï=0 ÎïÆ·=0 Óʼþ:0 Õ½¶·:0 Sys:[0.0035]
NT:[0.0035] NG:[0.0000] BT:[0.0000] CH:[0.0000]
............................
=========ÒÔÏÂÊÇ·þÎñÆ÷³ö´íÔ­Òò=========
±ê×¼ÐÅÏ¢: 11
ÔÚÏßÈËÊý: 0
×î¸ßÔÚÏß: 0
SAACº¯Êý: ACShowFMList
=========ÒÔÉÏÊÇ·þÎñÆ÷³ö´íÔ­Òò=========

±£´æÔËÐÐÖеÄÊý¾Ý
¹Ø±ÕSAACÁ¬½Ó:0
¹Ø±Õ°ó¶¨¶Ë¿Ú:0
[root@localhost gmsv]#



運行十行之後,就斷了
什麼": ACShowFMList"

查了好多資料,都不知怎麼回事
同樣的data,網上下載的端就沒出現此問題


請問有遇過這問題嗎?
作者: aoron    時間: 2013-5-7 05:23

我也遇到这个问题,弄了几个小时,请问你是怎么解决的、
作者: wty4321    時間: 2013-5-7 10:47

我沒有遇到你所提到的問題

=========以下是服务器出错原因=========
标准信息: 11
?: 0
?: 0
SAAC函数: ACShowFMList;
=========以上是服务器出错原因=========
這大約是你得到出錯信息,那就是提示SAAC程式的ACShowFMList函數(顯示家族列表)有問題

我這邊涉及ACShowFMList函數的有以下文件,你可以嘗試將他們用其他源碼的同名文件替換,看看是否能解決問題
(也許你那邊有其他文件也涉及此函數,請用文本編輯程式對源碼搜索“ACShowFMList”)
(說實話我沒學過C++,如果你會的話,你可以自行檢查一下哪裡出錯)
acfamily.h saacproto_serv.h
acfamily.c saacproto_serv.c recv.c
作者: hongbbn    時間: 2013-5-7 13:25

先謝謝哦                                         




歡迎光臨 We Love SA 石器時代研討中心 (http://lab.welovesa.com/) Powered by Discuz! 6.0.0