• HyperFilter | DoS Protection | DDoS Protection | DoS Mitigation | DDoS Mitigation | AntiDoS | AntiDDoS | Proxy Shielding

[2100] OTP ile login altyapısı

  • Konbuyu başlatan Konbuyu başlatan ReaL
  • Başlangıç tarihi Başlangıç tarihi
Katılım
8 Mart 2012
Mesajlar
22,070
OTP(One Time Password) sanırım google ın yazdığı bir algoritma olarak biliyorum yanlış bilmiyorsam. Mantığı bir key anahtarı ile her iki tarafın bildiği Server ve telefon uygulamanızda otp üretmek için kullandığınız program. Normal login olduğunuzda eğer accontun otp özelliği açıldı ise WIZ_LOGIN de 0x10(16) değeri döndürüyor. Bu değer dönünce login olmak yerine direk bir kutucuk çıkıyor ve oraya telefonunuzda uygulamadan(Google Authenticator) gösterdiği kodu giriyoruz. Bu kodu 2 şekilde üretiyor biri zaman ile diğeri de bölgesel olarak sizin belirlediğiniz keyi baz alarak. Sonra OTP kodunu yazdıktan sonra servera yeniden bir login packeti gidiyor bunun opcodeside 0xFA(250) bu packetin içerisinde sırayla 2 bytelık string uzunluğu şeklinde AccountID + Password + OTP olarak geliyor OTP string şeklinde geliyor. Buradan gelen veriyi alıyoruz ve sizin db account için ürettiğiniz key ile OTP algoritmasını kullanarak OTP üretiyoruz ve karşılaştırıyoruz eğer eşit ise giriş için packeti gönderiyoruz değil ise giriş başarısız packeti gönderiyoruz.





ylbpg.jpg






kS8up5H.png




Kod:
[HIDE]

enum LogonOpcodes

{

    LS_VERSION_REQ                = 0x01,

    LS_DOWNLOADINFO_REQ            = 0x02,

    LS_CRYPTION                    = 0xF2,

    LS_LOGIN_REQ                = 0xF3,

    LS_MGAME_LOGIN                = 0xF4,

    LS_SERVERLIST                = 0xF5,

    LS_NEWS                        = 0xF6,

    LS_UNKF7                    = 0xF7,

    LS_OTP_LOGIN                = 0xFA,

    LS_UNKFD                    = 0xFD,





    NUM_LS_OPCODES

};

[/HIDE]





Kod:
[HIDE]

PacketHandlers[LS_OTP_LOGIN] = &LoginSession::HandleOTPLogin;

[/HIDE]





Kod:
[HIDE]

void LoginSession::HandleOTPLogin(Packet & pkt)

{

    Packet result(pkt.GetOpcode());





    string AccountName, Password, OTPCode;

    // Database üzerinden otp kontrolü yapılacak ve giriş sağlanacak.

    pkt >> AccountName >> Password >> OTPCode;

   

    pkt.SByte();

    result << uint16(1) << OTPCode;

    Send(&result);

}

[/HIDE]





Kontrol mekanizması OTP kodu oluşturmak için gerekli algoritmaları daha oluşturmadım. Tamamladıktan sonra konuyu güncellerim ama ben tamamlayana kadar kendi sistemlerinizi de oluşturabilirsiniz. Bu arada opt logindeki return opcodesini denemedim 1 başarılı demek diğerlerini de deneye deneye 1 2 3 4 5 diye bakarsınız. Kalın sağlıcakla. :heart:
 
Geri
Üst