تحديث آخر نسخة 1.8.37

تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[جاهز للتحميل]فكرة دمج منتدى من نوع vbulletin الى منتدى mybb
#21
بالنسبه للاكواد التي تثبت مقصدي واللي علي اساسها وضعت لك هذا التحليل 

اولا عمليه سحب المعلومات من جدول اعضاء الفي بي

كود :
    function import()
    {
        global $import_session;

        // Get members
        $query = $this->old_db->simple_select("user", "*", "", array('order_by' => 'userid', 'order_dir' => 'asc', 'limit_start' => $this->trackers['start_users'], 'limit' => $import_session['users_per_screen']));
        while($user = $this->old_db->fetch_array($query))
        {
            $this->insert($user);
        }
    }



 بعد ما قام بسحب المعلومات يذهب ليسجل كل حقل من الفي بي الي الحقل المشابه له في الماي بي بي ( لاحظ الخطوه دي )


كود :
function convert_data($data)
    {
        $insert_data = array();

        // vBulletin 3 values
        $insert_data['usergroup'] = $this->board->get_group_id($data['usergroupid'], array("not_multiple" => true));
        $insert_data['additionalgroups'] = str_replace($insert_data['usergroup'], '', $this->board->get_group_id($data['usergroupid']));
        $insert_data['displaygroup'] = $this->board->get_group_id($data['usergroupid'], array("not_multiple" => true));
        $insert_data['import_usergroup'] = $this->board->get_group_id($data['usergroupid'], array("original" => true));
        $insert_data['import_additionalgroups'] = $this->board->get_group_id($data['usergroupid'], array("original" => true));
        $insert_data['import_displaygroup'] = $data['displaygroupid'];
        $insert_data['import_uid'] = $data['userid'];
        $insert_data['username'] = encode_to_utf8($data['username'], "user", "users");
        $insert_data['email'] = $data['email'];
        $insert_data['regdate'] = $data['joindate'];
        $insert_data['lastactive'] = $data['lastactivity'];
        $insert_data['lastvisit'] = $data['lastvisit'];
        $insert_data['website'] = $data['homepage'];
        $avatar = $this->get_avatar($data['avatarid']);
        if(!$avatar)
        {
            $customavatar = $this->get_custom_avatar($data['userid']);
            if(!$customavatar)
            {
                $insert_data['avatardimensions'] = '';
                $insert_data['avatar'] = '';
                $insert_data['avatartype'] = '';
            }
        }
        else
        {
            list($width, $height) = @getimagesize($avatar['avatarpath']);
            $insert_data['avatardimensions'] = $width.'|'.$height;
            $insert_data['avatar'] = $avatar['avatarpath'];
            $insert_data['avatartype'] = 'remote';
        }
        $insert_data['lastpost'] = $data['lastpost'];
        $data['birthday'] = trim($data['birthday']);
        if(!empty($data['birthday']))
        {
            $insert_data['birthday'] = $data['birthday'];
        }
        $insert_data['icq'] = $data['icq'];
        $insert_data['aim'] = $data['aim'];
        $insert_data['yahoo'] = $data['yahoo'];
        $insert_data['msn'] = $data['msn'];
        $insert_data['timezone'] = str_replace(array('.0', '.00'), array('', ''), $insert_data['timezone']);
        $insert_data['style'] = 0;
        $insert_data['referrer'] = $data['referrerid'];
        $insert_data['regip'] = $data['ipaddress'];
        $insert_data['totalpms'] = $data['pmtotal'];
        $insert_data['unreadpms'] = $data['pmunread'];
        $insert_data['passwordconvert'] = $data['password'];
        $insert_data['passwordconverttype'] = 'vb3';
        $insert_data['passwordconvertsalt'] = $data['salt'];
        $insert_data['signature'] = encode_to_utf8($this->bbcode_parser->convert($this->get_signature($data['userid'])), "user", "users");

        return $insert_data;
    }


دي المعلومات اللي سحبها ووضعها بمصفوفه ليتم سحب المطلوب واللي يهمني هنا ان نري انه اضاف ثلاث حقول كما قلت وهما 

كود :
        $insert_data['passwordconvert'] = $data['password'];
        $insert_data['passwordconverttype'] = 'vb3';
        $insert_data['passwordconvertsalt'] = $data['salt'];

اخذ محتوي حقل الباسورد من الفي بي ووضعه داخل حقل passwordconvert واخذ محتوي حقل salt ووضعه في حقل passwordconvertsalt

والحقل الثالث اضع كلمه ثابته لكي يعلم علي اسكربت سوف يتم التحويل 

ونري ايضا انه لم يقم بتسجيل شي في حقل password + salt وتركهم فارغين لحين التحويل ثم حيعيد تعبئتهم 

نري طريقة التحويل : ( هناك بعض الاكواد خاصه بالتأكد من وجود محتوي وعدم وجود اخطاء وما الي ذلك فلم اذكره فقط حذكر المفيد لكي تضح لك الفكره )

كود :
    // The password was correct, so use MyBB's method the next time (even if the captcha was wrong we can update the password)
            $salt = generate_salt();
            $update = array(
                "salt"                    => $salt,
                "password"                => salt_password(md5($login->data['password']), $salt),
                "loginkey"                => generate_loginkey(),
                "passwordconverttype"    => "",
                "passwordconvert"        => "",
                "passwordconvertsalt"    => "",
            );

            $db->update_query("users", $update, "uid='{$user['uid']}'");


هنا قام بعمل salt عشوائي من خلال الداله اللي ذكرنها من قبل بالموضوع والموقع الرسمي وبالنسبه للباس قام بتحديثه هنا ووضع ال salt ثم الباس

والثلاث حقول تركهم فارغين  وعمل امر update للقاعده كما نري بالاخير وبعدها بيتم حذف الثلاث حقول 

هذا اللي توصلت له بشكل سريع لتحليل عمليه التحويل 
الرد
شكر من طرف :
#22
بارك الله فيك
ماقصرت
اريد اقول لك الجزئية اللي فهمتها من مشاركتك..
وهي ان السكريبت اضاف اعمدة جديدة لكلمة المرور واالـ salt
وعبأهم ببيانات من جدول vbulletin
ثم قام بتوليد salt جديد لكي يحفظ بالقاعدة الخاصة بـ Mybb
الان اظن نصف المهمة فهمتها بقيت النقطتان الاتيتان:
كود :
salt_password(md5($login->data['password']), $salt),
كلمة $login ماهي؟
النقطة الاخرى هي:
كود :
generate_loginkey()
هل يتم التوليد بناء على اسم المستخدم او كلمة المرور واين اجد هذه الدالة وهل هذه الدالة فقط في سكريبت التحويل؟
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :
#23
وجدت هذه الدالة
generate_loginkey()
كود :
function generate_loginkey()
{
    return random_str(50);
}
هل معناها توليد 50 حرف؟ ام لا؟
ام هل
random_str(50)
هي دالة ايضا؟؟؟
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :
#24
نعم وجدتها دالة ايضا
طريقتهم ملفوفة ومعقدة دالة تجيب دالة
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :
#25
نعم random_str هي داله تقوم بانشاء رقم عشوائي وتحدد العدد الذي تريده كما رايت 50 حرف

$login هذا متغير يجلب محتوي الخانه باسورد
الرد
شكر من طرف :
#26
ياليت تركبون هاك شكر!
احيانا الواحد يستحي يقول شكرا لكن الزر يفي بشيء من الغرضSmile
بارك الله فيك.
بعد اذنك سابدا بتطبيق - (بشكل منفصل عن الفكرة الاساسية)- جلب مستخدم وضبط البيانات لكي يعمل من دون تغيير لكلمة المرور.
الى اللقاء.
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :
#27
تدري كم دالة وجدتها متداخلة؟
اول دالة هي
:
كود :
function generate_salt()
{
   return random_str(8);
}

وهذي تؤدي الى
كود :
function random_str($length="8")
{
    $set = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
    $str = '';

    for($i = 1; $i <= $length; ++$i)
    {
        $ch = my_rand(0, count($set)-1);
        $str .= $set[$ch];
    }

    return $str;
}

وهذي تؤدي الى
كود :
function my_rand($min=null, $max=null, $force_seed=false)
{
    static $seeded = false;
    static $obfuscator = 0;

    if($seeded == false || $force_seed == true)
    {
        mt_srand(secure_seed_rng());
        $seeded = true;

        $obfuscator = abs((int) secure_seed_rng());

        // Ensure that $obfuscator is <= mt_getrandmax() for 64 bit systems.
        if($obfuscator > mt_getrandmax())
        {
            $obfuscator -= mt_getrandmax();
        }
    }

    if($min !== null && $max !== null)
    {
        $distance = $max - $min;
        if($distance > 0)
        {
            return $min + (int)((float)($distance + 1) * (float)(mt_rand() ^ $obfuscator) / (mt_getrandmax() + 1));
        }
        else
        {
            return mt_rand($min, $max);
        }
    }
    else
    {
        $val = mt_rand() ^ $obfuscator;
        return $val;
    }
}

اول كود كتبته بفيجوال بيسك ووقفت مدهوش من التعقيدSad
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :
#28
فيه رموز لا افهمها مثل || ببرمجة php مثل هذي
if($seeded == false || $force_seed == true)
{
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :
#29
طبيعي تجد اشياء معقده فامور التحويل ليست بالشي السهل وتختلف من برمجيه الي برمجيه

بالنسبه للرمز || يقصد به أو

مثل بالانجليزيه OR
الرد
شكر من طرف :
#30
بارك الله فيك اخي support
[صورة: avatar_229590.gif?dateline=1412525966]
الرد
شكر من طرف :


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم