Что нового

Вычисление кода OAuth

angro

Новичок
Сообщения
31
Репутация
1
Нужно вычислить строку Verifier из строки Challenge, ниже рабочие строки.
Здесь можно вычислить обратно из Verifier Challenge

Код:
$Challenge = 'VOcMRbFL4zCPQc9I5x9nbyk8eBOWNp56TQeTayiQPbY'
$Verifier = '1GWEbbIP7oIVYhAB+BrMV845bbsG+Igs2pCCXUuNOkJfvcyD1lrhx5t7pybdwrewYZi3NH6EKoo9Xet3IOlYmg=='


Пример из исходников на С#

Код:
challengeCodeSource = Guid.NewGuid();
        challengeCode = Encoding.UTF8.GetBytes(challengeCodeSource.ToString().Replace("-", ""));
        challengeHash = Base64UrlEncoder.Encode(ISBoxerEVELauncher.Security.SHA256.GenerateHash(Base64UrlEncoder.Encode(challengeCode)));


Помогите реализовать это на автоит
 

idbehold

Новичок
Сообщения
42
Репутация
4
Обратно никак не вычислить, бро =)
verifer это случайно сгенерированная строка verifier = base64url(crypto.pseudoRandomBytes(32))
Можешь глянуть тут подробнее : strategy.js (on github)

Предположу, что тебе нужно проверить полученный challengeHash в своем приложении,
поэтому вот тебе код для проверки, а превратить Challenge обратно в Verifier никак не получится

Код:
#include <Crypt.au3>

$Challenge = 'VOcMRbFL4zCPQc9I5x9nbyk8eBOWNp56TQeTayiQPbY'
$Verifier = '1GWEbbIP7oIVYhAB+BrMV845bbsG+Igs2pCCXUuNOkJfvcyD1lrhx5t7pybdwrewYZi3NH6EKoo9Xet3IOlYmg=='

$encodedVerifier =  StringReplace(base64(_Crypt_HashData($Verifier,  $CALG_SHA_256), true),  "=", "")

ConsoleWrite('$Challenge       : ' &  $Challenge &  @CRLF)
ConsoleWrite('$encodedVerifier : ' &  $encodedVerifier &  @CRLF)

if $encodedVerifier ==  $Challenge Then 
    ConsoleWrite('OK' &  @CRLF)    
Else 
    ConsoleWrite('FAIL' &  @CRLF)    
EndIf


;==============================================================================================================================
; Author (s):       (Ghads on Wordpress.com), Ascer
;===============================================================================================================================
Func base64($vCode, $bEncode = True, $bUrl = False)

    Local $oDM = ObjCreate("Microsoft.XMLDOM")
    If Not IsObj($oDM) Then Return SetError(1, 0, 1)

    Local $oEL = $oDM.createElement("Tmp")
    $oEL.DataType = "bin.base64"

    If $bEncode then
        $oEL.NodeTypedValue = Binary($vCode)
        If Not $bUrl Then Return $oEL.Text
        Return StringReplace(StringReplace(StringReplace($oEL.Text, "+", "-"),"/", "_"), @LF, "")
    Else
        If $bUrl Then $vCode = StringReplace(StringReplace($vCode, "-", "+"), "_", "/")
        $oEL.Text = $vCode
        Return $oEL.NodeTypedValue
    EndIf

EndFunc ;==>base64

И поправьте кто-нибудь пост - при попытке выделить текст меня отправляет по ссылке с первого сообщения.
 
Автор
A

angro

Новичок
Сообщения
31
Репутация
1
Спасибо большое за код и оперативность ответа :good:
Нашёл здесь, генератор, понравилась реализация

Код:
$pwd = ""
Dim $aSpace[3]
$digits = 128
For $i = 1 To $digits
    $aSpace[0] = Chr(Random(65, 90, 1)) ;A-Z
    $aSpace[1] = Chr(Random(97, 122, 1)) ;a-z
    $aSpace[2] = Chr(Random(48, 57, 1)) ;0-9
    $pwd &= $aSpace[Random(0, 2, 1)]
Next
ConsoleWrite("Your password (" & $digits & " digits): " & $pwd & @CRLF)
 
Последнее редактирование:

idbehold

Новичок
Сообщения
42
Репутация
4
Спасибо большое за код и оперативность ответа :good:
idbehold подскажи как сгенерировать этот pseudoRandomBytes(32) в автоит
Пожалуй так:
Код:
#include <Crypt.au3>

$randomBytes = _PseudoRandomBytes(32)
$Verifier = base64(StringMid(_PseudoRandomBytes(32), 2, 64), true, true)
$Challenge = StringReplace(base64(_Crypt_HashData($Verifier,  $CALG_SHA_256), true, true),  "=", "")

ConsoleWrite('$Verifier : ' & $Verifier & @CRLF )
ConsoleWrite('$Challenge : ' & $Challenge & @CRLF )

; see https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
Func _PseudoRandomBytes($amount)
    Local $tBuff = DllStructCreate("byte[" & $amount & "]")
    _Crypt_GenRandom($tBuff, DllStructGetSize($tBuff))
    Return DllStructGetData($tBuff, 1)
EndFunc 

;==============================================================================================================================
; Author (s):       (Ghads on Wordpress.com), Ascer
;===============================================================================================================================
Func base64($vCode, $bEncode = True, $bUrl = False)

    Local $oDM = ObjCreate("Microsoft.XMLDOM")
    If Not IsObj($oDM) Then Return SetError(1, 0, 1)

    Local $oEL = $oDM.createElement("Tmp")
    $oEL.DataType = "bin.base64"

    If $bEncode then
        $oEL.NodeTypedValue = Binary($vCode)
        If Not $bUrl Then Return $oEL.Text
        Return StringReplace(StringReplace(StringReplace($oEL.Text, "+", "-"),"/", "_"), @LF, "")
    Else
        If $bUrl Then $vCode = StringReplace(StringReplace($vCode, "-", "+"), "_", "/")
        $oEL.Text = $vCode
        Return $oEL.NodeTypedValue
    EndIf

EndFunc ;==>base64


На самом деле - если ты пишешь свой сервер авторизации, то какой хочешь способ такой и выбирай (хоть 2 вызова md5 склей), но желательно, чтобы строка была максимально случайной.
И еще - я в первом ответе недосмотрел - там везде используй base64(..., true, true) - третий параметр $bUrl = true, иначе могут попадаться переносы строк в сгенерированном ключе
 
Автор
A

angro

Новичок
Сообщения
31
Репутация
1
Это для лаунчера eve, там теперь всё по фэншую. Спасибо огромное, сильно помог.
Заработало, спасибо.
 
Последнее редактирование:
Автор
A

angro

Новичок
Сообщения
31
Репутация
1
Это нужно для запуска клиентов евы без участия официального лаунчера, но если нет всего остального кода, то код обсуждаемый здесь не нужен.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 573
Репутация
933
Вы же понимаете что ваших ботов сразу же побанят если вы начнете взаимодействовать с игрой не через клаву и мышь а через код? :smile:
 
Автор
A

angro

Новичок
Сообщения
31
Репутация
1
Belfigor уж кто бы говорил, вроде образованный человек.
Вроде должен знать, что клава с мышью не имеют никакого отношения к взаимодействию с программным обеспечением.
Есть конечно решения блокирующие вызовы вин апи и работающие на уровне драйверов, но это не про еву.
И потом кто говорил про ботов, я на полном серьёзе не планирую их использовать.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3 573
Репутация
933
Моё дело лишь поделиться опытом :smile:
 
Верх