Shengqu api fixes

Signed-off-by: Yuan Si <do4suki@gmail.com>
This commit is contained in:
2023-04-11 20:06:35 +08:00
parent 569c84175e
commit 93cac9e6f6
+88 -52
View File
@@ -5,6 +5,7 @@ import (
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"fmt" "fmt"
"honoka-chan/database"
"honoka-chan/encrypt" "honoka-chan/encrypt"
"honoka-chan/utils" "honoka-chan/utils"
"io" "io"
@@ -19,10 +20,6 @@ import (
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
) )
var (
randKey string
)
type LoginResp struct { type LoginResp struct {
Activation int `json:"activation"` Activation int `json:"activation"`
Autokey string `json:"autokey"` Autokey string `json:"autokey"`
@@ -57,7 +54,46 @@ type LoginAutoResp struct {
Ticket string `json:"ticket"` Ticket string `json:"ticket"`
} }
type InitializeResp struct {
BrandLogo string `json:"brand_logo"`
BrandName string `json:"brand_name"`
DaoyuClientid string `json:"daoyu_clientid"`
DaoyuDownloadURL string `json:"daoyu_download_url"`
DeviceFeature string `json:"device_feature"`
DisplayThirdaccout int `json:"display_thirdaccout"`
ForceShowAgreement int `json:"force_show_agreement"`
GreportLogLevel string `json:"greport_log_level"`
GuestEnable int `json:"guest_enable"`
IsMatch int `json:"is_match"`
LogLevel string `json:"log_level"`
LoginButton []string `json:"login_button"`
LoginIcon []interface{} `json:"login_icon"`
LoginLimitEnable int `json:"login_limit_enable"`
NeedFloatWindowPermission int `json:"need_float_window_permission"`
NewDeviceIDServer string `json:"new_device_id_server"`
QqAppID string `json:"qq_appId"`
QqKey string `json:"qq_key"`
ShowGuestConfirm int `json:"show_guest_confirm"`
VoicetipButton int `json:"voicetip_button"`
VoicetipOne string `json:"voicetip_one"`
VoicetipTwo string `json:"voicetip_two"`
WegameAppid string `json:"wegame_appid"`
WegameAppkey string `json:"wegame_appkey"`
WegameClientid string `json:"wegame_clientid"`
WegameCompanyID string `json:"wegame_companyId"`
WegameLoginURL string `json:"wegame_loginUrl"`
WeiboAppKey string `json:"weibo_appKey"`
WeiboRedirectURL string `json:"weibo_redirectUrl"`
WeixinAppID string `json:"weixin_appId"`
WeixinKey string `json:"weixin_key"`
}
func ActiveHandler(ctx *gin.Context) { func ActiveHandler(ctx *gin.Context) {
// body, err := io.ReadAll(ctx.Request.Body)
// CheckErr(err)
// defer ctx.Request.Body.Close()
// fmt.Println(string(body))
ctx.Header("Content-Type", "text/html;charset=utf-8") ctx.Header("Content-Type", "text/html;charset=utf-8")
ctx.String(http.StatusOK, `{ "code": 0, "msg": "ok", "data": { "message": "ok", "result": 0 } }`) ctx.String(http.StatusOK, `{ "code": 0, "msg": "ok", "data": { "message": "ok", "result": 0 } }`)
} }
@@ -88,8 +124,13 @@ func HandshakeHandler(ctx *gin.Context) {
params, err := url.ParseQuery(string(decryptedBody)) params, err := url.ParseQuery(string(decryptedBody))
CheckErr(err) CheckErr(err)
randKey = params.Get("randkey") randKey := params.Get("randkey")
deviceId := params.Get("deviceid")
// fmt.Println(randKey) // fmt.Println(randKey)
// fmt.Println(deviceId)
err = database.LevelDb.Put([]byte(deviceId), []byte(randKey))
CheckErr(err)
token := strings.ToUpper(utils.RandomStr(33)) token := strings.ToUpper(utils.RandomStr(33))
token = fmt.Sprintf(`{"message":"ok","result":0,"token":"%s"}`, token) token = fmt.Sprintf(`{"message":"ok","result":0,"token":"%s"}`, token)
@@ -114,51 +155,34 @@ func InitializeHandler(ctx *gin.Context) {
// CheckErr(err) // CheckErr(err)
// fmt.Println(string(body64)) // fmt.Println(string(body64))
// decryptedBody, err := openssl.Des3ECBDecrypt(body64, []byte(randKey)[0:24], openssl.PKCS7_PADDING) deviceId := ctx.Request.Header.Get("X-DEVICEID")
randKey, err := database.LevelDb.Get([]byte(deviceId))
CheckErr(err)
// decryptedBody, err := openssl.Des3ECBDecrypt(body64, randKey[0:24], openssl.PKCS7_PADDING)
// CheckErr(err) // CheckErr(err)
// fmt.Println(string(decryptedBody)) // fmt.Println(string(decryptedBody))
data := `{ initResp := InitializeResp{
"brand_logo":"http://gskd.sdo.com/ghome/ztc/logo/og/logo_xhdpi.png", BrandLogo: "http://gskd.sdo.com/ghome/ztc/logo/og/logo_xhdpi.png",
"brand_name":"盛趣游戏", BrandName: "盛趣游戏",
"daoyu_clientid":"", ForceShowAgreement: 1,
"daoyu_download_url":"http://a.sdo.com/u8000", GreportLogLevel: "off",
"device_feature":"", LogLevel: "off",
"display_thirdaccout":0, LoginButton: []string{"official"},
"force_show_agreement":1, LoginIcon: []interface{}{},
"greport_log_level":"off", NeedFloatWindowPermission: 1,
"guest_enable":0, NewDeviceIDServer: strings.ToUpper(openssl.Md5ToString(deviceId)),
"is_match":0, ShowGuestConfirm: 1,
"log_level":"off", VoicetipButton: 1,
"login_button":[ }
"official" data, err := json.Marshal(initResp)
],
"login_icon":[],
"login_limit_enable":0,
"need_float_window_permission":1,
"new_device_id_server":"6695A4085F5141A6A26B05A6BA5A0576",
"qq_appId":"",
"qq_key":"",
"show_guest_confirm":1,
"voicetip_button":1,
"voicetip_one":"",
"voicetip_two":"",
"wegame_appid":"",
"wegame_appkey":"",
"wegame_clientid":"",
"wegame_companyId":"",
"wegame_loginUrl":"",
"weibo_appKey":"",
"weibo_redirectUrl":"",
"weixin_appId":"",
"weixin_key":""
}`
encryptedToken, err := openssl.Des3ECBEncrypt([]byte(data), []byte(randKey)[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
encryptedToken64 := base64.StdEncoding.EncodeToString(encryptedToken) encryptedData, err := openssl.Des3ECBEncrypt([]byte(data), randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err)
encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData)
// fmt.Println(encryptedToken64) // fmt.Println(encryptedToken64)
resp := fmt.Sprintf(`{ "code": 0, "msg": "ok", "data": "%s" }`, encryptedToken64) resp := fmt.Sprintf(`{ "code": 0, "msg": "ok", "data": "%s" }`, encryptedData64)
ctx.Header("Content-Type", "text/html;charset=utf-8") ctx.Header("Content-Type", "text/html;charset=utf-8")
ctx.String(http.StatusOK, resp) ctx.String(http.StatusOK, resp)
@@ -180,10 +204,14 @@ func LoginAutoHandler(ctx *gin.Context) {
CheckErr(err) CheckErr(err)
// fmt.Println(string(body64)) // fmt.Println(string(body64))
decryptedBody, err := openssl.Des3ECBDecrypt(body64, []byte(randKey)[0:24], openssl.PKCS7_PADDING) deviceId := ctx.Request.Header.Get("X-DEVICEID")
randKey, err := database.LevelDb.Get([]byte(deviceId))
CheckErr(err)
decryptedBody, err := openssl.Des3ECBDecrypt(body64, randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
queryStr := string(decryptedBody) queryStr := string(decryptedBody)
// fmt.Println(params) // fmt.Println(queryStr)
params, err := url.ParseQuery(queryStr) params, err := url.ParseQuery(queryStr)
CheckErr(err) CheckErr(err)
@@ -220,7 +248,7 @@ func LoginAutoHandler(ctx *gin.Context) {
data, err := json.Marshal(autoResp) data, err := json.Marshal(autoResp)
// fmt.Println(string(data)) // fmt.Println(string(data))
CheckErr(err) CheckErr(err)
encryptedData, err := openssl.Des3ECBEncrypt(data, []byte(randKey)[0:24], openssl.PKCS7_PADDING) encryptedData, err := openssl.Des3ECBEncrypt(data, randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData) encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData)
// fmt.Println(encryptedData64) // fmt.Println(encryptedData64)
@@ -228,7 +256,7 @@ func LoginAutoHandler(ctx *gin.Context) {
resp = fmt.Sprintf(`{ "code": 0, "msg": "ok", "data": "%s" }`, encryptedData64) resp = fmt.Sprintf(`{ "code": 0, "msg": "ok", "data": "%s" }`, encryptedData64)
} else { } else {
data := `{"message":"账号不存在或者登陆状态已过期!","result":31}` data := `{"message":"账号不存在或者登陆状态已过期!","result":31}`
encryptedData, err := openssl.Des3ECBEncrypt([]byte(data), []byte(randKey)[0:24], openssl.PKCS7_PADDING) encryptedData, err := openssl.Des3ECBEncrypt([]byte(data), randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData) encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData)
// fmt.Println(encryptedData64) // fmt.Println(encryptedData64)
@@ -260,7 +288,11 @@ func AccountLoginHandler(ctx *gin.Context) {
CheckErr(err) CheckErr(err)
// fmt.Println(string(body64)) // fmt.Println(string(body64))
decryptedBody, err := openssl.Des3ECBDecrypt(body64, []byte(randKey)[0:24], openssl.PKCS7_PADDING) deviceId := ctx.Request.Header.Get("X-DEVICEID")
randKey, err := database.LevelDb.Get([]byte(deviceId))
CheckErr(err)
decryptedBody, err := openssl.Des3ECBDecrypt(body64, randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
queryStr, err := url.QueryUnescape(string(decryptedBody)) queryStr, err := url.QueryUnescape(string(decryptedBody))
CheckErr(err) CheckErr(err)
@@ -385,7 +417,7 @@ func AccountLoginHandler(ctx *gin.Context) {
data, err := json.Marshal(loginResp) data, err := json.Marshal(loginResp)
CheckErr(err) CheckErr(err)
// fmt.Println(string(data)) // fmt.Println(string(data))
encryptedData, err := openssl.Des3ECBEncrypt(data, []byte(randKey)[0:24], openssl.PKCS7_PADDING) encryptedData, err := openssl.Des3ECBEncrypt(data, randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData) encryptedData64 := base64.StdEncoding.EncodeToString(encryptedData)
// fmt.Println(encryptedToken64) // fmt.Println(encryptedToken64)
@@ -406,7 +438,11 @@ func ReportRoleHandler(ctx *gin.Context) {
// CheckErr(err) // CheckErr(err)
// fmt.Println(string(body64)) // fmt.Println(string(body64))
// decryptedBody, err := openssl.Des3ECBDecrypt(body64, []byte(randKey)[0:24], openssl.PKCS7_PADDING) deviceId := ctx.Request.Header.Get("X-DEVICEID")
randKey, err := database.LevelDb.Get([]byte(deviceId))
CheckErr(err)
// decryptedBody, err := openssl.Des3ECBDecrypt(body64, randKey[0:24], openssl.PKCS7_PADDING)
// CheckErr(err) // CheckErr(err)
// fmt.Println(string(decryptedBody)) // fmt.Println(string(decryptedBody))
@@ -416,7 +452,7 @@ func ReportRoleHandler(ctx *gin.Context) {
// Unable to decrypt server data // Unable to decrypt server data
token := `{"message":"Hello, world!"}` token := `{"message":"Hello, world!"}`
encryptedToken, err := openssl.Des3ECBEncrypt([]byte(token), []byte(randKey)[0:24], openssl.PKCS7_PADDING) encryptedToken, err := openssl.Des3ECBEncrypt([]byte(token), randKey[0:24], openssl.PKCS7_PADDING)
CheckErr(err) CheckErr(err)
encryptedToken64 := base64.StdEncoding.EncodeToString(encryptedToken) encryptedToken64 := base64.StdEncoding.EncodeToString(encryptedToken)
// fmt.Println(encryptedToken64) // fmt.Println(encryptedToken64)