جوجل كروم - الفحص الأبجدي الرقمي لتحديد الملحقات

StackOverflow https://stackoverflow.com/questions/1882981

  •  19-09-2019
  •  | 
  •  

سؤال

يستخدم Google Chrome Hales رقمي ألفا مع وجود معرفات لملحقات Chrome. على سبيل المثال. "AJPGKPECKEBDHOFMMJFCJJIIEJPODLA" هو المعرف ل Xmarks. ملحق مزامنة المرجعية.

أي خوارزمية قيد الاستخدام هنا لتوليد هذه السلاسل؟ كيف يضمنون التفرد؟

هل كانت مفيدة؟

المحلول

يولد الكروم المعرف عبر المفتاح العام. إذا كنت تستخدم معرض الملحق، فإنها تتعامل مع كل ذلك من أجلك.

من مصدر:

bool Extension::GenerateId(const std::string& input, std::string* output) {
  CHECK(output);
  if (input.length() == 0)
    return false;

  const uint8* ubuf = reinterpret_cast<const unsigned char*>(input.data());
  SHA256Context ctx;
  SHA256_Begin(&ctx);
  SHA256_Update(&ctx, ubuf, input.length());
  uint8 hash[Extension::kIdSize];
  SHA256_End(&ctx, hash, NULL, sizeof(hash));
  *output = StringToLowerASCII(HexEncode(hash, sizeof(hash)));
  ConvertHexadecimalToIDAlphabet(output);

  return true;
}

إلقاء نظرة على ملف Extension.cc، لديه معلومات أكثر تفصيلا مثل إنشاء ملف .pem Exncoding / فك التشفير، إلخ.

نصائح أخرى

لتكون دقيقة، إنها أول 128 بت من SHA256 من المفتاح العام RSA المشفرة في قاعدة 16.

عدد عشوائي آخر من التوافه هو أن الترميز يستخدم AP بدلا من 0-9A-F. والسبب هو أن الأحرف الرقمية الرائدة في مجال المضيف من أصل يمكن أن ينتهي التعامل معها كعاولات IP المحتملة بواسطة Chrome. نشير إليها داخليا بأنها "mpdecimal" بعد الرجل الذي جاء به.

إليك بطانة Linux One:

cat FILE.PEM | openssl rsa -pubout -outform DER | openssl dgst -sha256 | awk '{print $2}' | cut -c 1-32 | tr '0-9a-f' 'a-p'

مهيأة بشكل جيد للقراءة

cat FILE.PEM | \
openssl rsa -pubout -outform DER | \
openssl dgst -sha256 | \
awk '{print $2}' | \
cut -c 1-32 | \
tr '0-9a-f' 'a-p'

لقد قمت بنشر برنامج نصي قصير روبي لحساب معرف التمديد من المفتاح الخاص: http://supercollider.dk حتى الانتقام/01/calculating-chrome-extension-id-from-your-private-key-233.. وبعد هذا إلى حد كبير يتبع وصف إريك كاي للتنسيق.

سيناريو باش صغير لطيف لطريقة "إثباتي" لمعرفة معرف الملحقات الخاصة بك. بفضل Tuin لأمر Oneliner.

#!/bin/bash
txtred=$(tput setaf 1) # Red

echo "Script to generate extension id from your extensions .pem file"
sleep 2
while true; do
read -e -p "Enter local file path for your pem file " PEMFILE
if [[ $PEMFILE != *.pem ]]; then
        echo "That is not a .pem file. Please enter a correct .pem file"
        sleep 2
else
        break
fi
done
PEMFILEGEN=`cat $PEMFILE | openssl rsa -pubout -outform DER | openssl dgst -sha256 | awk '{print $2}' | cut -c 1-32 | tr '0-9a-f' 'a-p'`
echo "Your extension id is:${txtred} $PEMFILEGEN${textred}"
tput sgr0
exit 0

لقد صنعت crx_appid. جوهرة لحساب appid بسهولة.

https://rubygems.org/gems/crx_appid.

$ gem install crx_appid
$ crx_appid extension.pem

لتكون أكثر دقة، فإن المدخلات إلى Hash SHA256 هي X.509 Mossepublickeyinfo بلوك، der-langoded. هذا هو الحقل الخامس في رأس CRX كما هو موضح في تنسيق حزمة CRX.. وبعد إنه أيضا تسلسل البايت الذي تحصل عليه إذا كنت تأخذ قيمة "المفتاح" في الفوضى وبرنامج Base-64 فك شفرة ذلك.

فيما يلي طريقة سهلة في Bash (و Openssl) للحصول على X.509 Mossepublickeyinfo، der-langoded:

openssl rsa -pubout -outform DER < "$pem" > "$pub" 2>/dev/null

أين $pem هو ملف المفتاح الخاص، ترميز RSA.

للحصول على DHA256 Digest، تحتاج إلى تشغيل ما يلي على الملف الناتج عن السطر السابق:

openssl dgst -sha256 $pub | awk '{print $2}' | cut -c 0-32

كل ما تبقى هو أخذ سلسلة 32 سحر الناتجة وتغييرها من عرافة منتظمة (0-9] [AF]) إلى ([AP) أين a اعواد الكبريت 0 و p اعواد الكبريت f.

مع القليل من الجهد، أنا متأكد من أن هذه الخطوتين يمكن أن يتم في بطانة واحدة. أتمنى أن تجد أنها مفيدة وإذا كان الأمر كذلك، فيرجى إخبارنا بذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top