কিংবদন্তি দর্শকের স্ট্রিম ফর্ম্যাট লীগ League


12

ইন্ট্রো

বিশ্লেষণের জন্য শেষ পর্যন্ত স্ট্রিমগুলি থেকে ডেটা স্ক্র্যাপ করা এবং এটির সাথে একটি ডেটাসেট তৈরির প্রত্যাশায় আমি এলওএলটির জন্য দর্শকের সিস্টেমটি ঘুরে বেড়াচ্ছি। আমি বুঝতে পেরেছি যে এরই মধ্যে কয়েকটি বেসরকারি এপিআই এবং কৌশল রয়েছে তবে আমি সত্যিই নির্দিষ্ট গেম ইভেন্টগুলি (চ্যাম্পিয়ন কিলস, ট্যারিট কিলস, আইটেম পুচেসস, জঙ্গল মব কিলস, বিশেষ ইভেন্টগুলির জন্য চ্যাম্পিয়ন কো-অর্ডস ইত্যাদি) খুঁজছি।

আমি এতক্ষণ যা বের করেছিলাম

আপনি যখন কোনও খেলা দেখানো শুরু করেন (এনএ তে), আপনার ক্লায়েন্টটি নিম্নলিখিত হোস্টের সাথে সংযুক্ত রয়েছে:

spectator.na.lol.riotgames.com:8088

আমি ধরে নিই যে এই হোস্টটি অ্যামাজন এডাব্লুএস বা অনুরূপ দ্বারা সমর্থিত। যাইহোক, পরবর্তী যেটি ঘটে তা হ'ল ক্লায়েন্টটি দর্শনীয় সার্ভারে একটি সংস্করণ অনুরোধ প্রেরণ করে:

জিইটি / পর্যবেক্ষক-মোড / বিশ্রাম / গ্রাহক / সংস্করণ

এটি বর্তমান দর্শকের সার্ভার সংস্করণ যাই হোক না কেন ফেরত দেয়। উদা: '1.80.54'

এর পরে, ক্লায়েন্ট গেম মেটাডেটার জন্য একটি অনুরোধ প্রেরণ করে:

জিইটি / পর্যবেক্ষক-মোড / বিশ্রাম / গ্রাহক / গেমমেটাডেটা / এনএ 1 / [গেমিড] / [কিছু কিছু এলোমেলো নন] / টোকেন

এটি গেমটি সম্পর্কে মেটাডেটা ফিরিয়ে দেয়। এই ডেটার একটি উদাহরণ: http://pastebin.com/3N4qs0hx

ক্লায়েন্ট এখন প্যারামিটারগুলি জানে যার মাধ্যমে দর্শনীয় সেশনের অগ্রগতি হওয়া উচিত। এটি কল করে সর্বশেষতম ডেটা অংশ সনাক্ত করার চেষ্টা করে:

GET / পর্যবেক্ষক-মোড / বিশ্রাম / গ্রাহক / getLastChunkInfo / NA1 / [গেমিড] / 30000 / টোকেন

এই ডেটার নমুনা: http://pastebin.com/Cj7dEAr9

একবার ডেটা খণ্ডগুলি চিহ্নিত হয়ে গেলে, তাদের অনুরোধ করা হয়:

জিইটি / পর্যবেক্ষক-মোড / বিশ্রাম / গ্রাহক / গেমডেটাঙ্কাঙ্ক / এনএ 1 / [গেমিড] / [টোকেন #] / টোকেন

একটি টোকেনের ডেটার নমুনা (বাইনারি হেক্সে রূপান্তরিত হয়েছে): HTTP: // পেস্টবিন.কম / জিকিআরপিআরপি 5 জ

রিপ্লে স্ট্রিম থেকে ডেটা উপলভ্য হওয়ার সাথে সাথে getLastChunkInfo এবং getGameDataChunk কল করার মধ্যে গেম চক্র রয়েছে। এখানে একটি কল আসে যা প্রায় 5 টি অংশ অনুসরণ করার পরে নিম্নলিখিতটিতে আসে:

জিইটি / পর্যবেক্ষক-মোড / বিশ্রাম / গ্রাহক / গেটকি ফ্রেম / এনএ 1 / [গেমিড] / [সামচুনকিড] / টোকেন

আমি বিশ্বাস করি যে এই কলটি কেবল পুনরায় খেলতে শুরু করার সময় এবং যখনই ব্যবহারকারী অন্য সময়ের জন্য অনুসন্ধান করে তখনই ঘটে।

আমি জানি গেমটি কোনও স্তরের এনক্রিপশন ব্যবহার করে। কমান্ড লাইনে নির্দিষ্ট প্রকৃত কী সহ আমি এটি ব্লোফিশ ইসিবি হিসাবে বিশ্বাস করি। আমি এই টোকেনগুলি সেশনটির কী ব্যবহার করে ডিক্রিপ্ট করার চেষ্টা করেছি, তবে এগুলি এখনও বেশ এলোমেলো দেখাচ্ছে।

3/23/2013 সম্পাদনা করুন

  • আমি নির্ধারণ করেছি যে টোকেনগুলি সম্ভবত কমান্ড লাইন যুক্তিটি কীটি ধারণ করে এবং ডিবাগার থেকে গেমটি পুনরায় চালু করে (এটি রিপ্লেটি সঠিকভাবে লোড করেছে) সম্ভবত এনক্রিপ্ট করা হয়নি।
  • টোকেনগুলি সংকুচিত বলে মনে হচ্ছে। একটি সাবরুটিনের কাছে একটি কল রয়েছে যা শূন্য-শূন্য পূর্ণসংখ্যাকে প্রদান করলে নিম্নলিখিতটি ট্রিগার হবে:

    if ( sub_B71120(v21, v15, (int *)&Size, *(_DWORD *)(v6 + 108)) )
    {
    sub_BAD700(
    (int)"!\"Error Decompressing data chunk.\"",
    (int)"D:\\jenkins\\workspace\\Code-CI-Releases-Public\\code\\HeroWars_clientServer\\Sources\\ReplaySystem\\ReplayServerConnection.cpp",
    6,
    (int)"Riot::Replay::ReplayServerConnection::GetChunk",
    (int)"Assert occurred, game may crash.");
    sub_9BB750("ReplayServerConnection GetChunk error. Error decompressing chunk data. Error: %d\n");
    }
    
  • সাব_বি 71120 তদন্তের পরে আমি একটি কল পেয়েছি যা শেষ পর্যন্ত মোটামুটি বড় কার্যক্রমে প্রবেশ করে। এই ফাংশনটিতে স্ট্রিং রয়েছে:

    • "ভুল শিরোনাম পরীক্ষা"
    • "অজানা সংক্ষেপণ পদ্ধতি"
    • "অবৈধ উইন্ডো আকার"
  • এই স্ট্রিংগুলির একটি দ্রুত গুগল অনুসন্ধান নিম্নলিখিত বিষয়গুলি প্রকাশ করে: http://www.opensource.apple.com/source/zlib/zlib-22/zlib/inflate.c

  • আমি inflate.c পদ্ধতিতে কল করার ঠিক আগে একটি ফাংশন কলের স্ট্রিং রেফারেন্স "1.2.3" পেয়েছি, পাশাপাশি অন্য একটি রেফারেন্স "1.2.3 কপিরাইট 1995-2005 মার্ক অ্যাডলার" স্ফীত করে। এটিকে অবশ্যই স্পষ্ট মনে হচ্ছে যে তারা টোকেনগুলির ডিকম্প্রেশনটির জন্য Zlib সংস্করণ 1.2.3 ব্যবহার করছে। আমি যে ফাইলটি অফসেটে শুরু করব তা নির্বিশেষে আমি তাদের সংক্ষেপণ করতে পারি না।

আমার প্রশ্নগুলো)

কেউ কীভাবে জানেন যে কীভাবে এই 'টোকেনগুলি' ফর্ম্যাট করা যেতে পারে বা যদি এমন কোনও ধরণের সংক্ষেপণ / এনক্রিপশন থাকে যা সম্পর্কে আমি অজানা? আমার সন্দেহ আছে যে এগুলি লাইভ প্লে চলাকালীন ব্যবহৃত ইথারনেট প্যাকেটের কিছু সংকুচিত বা প্যাকড ফর্ম যা কেবল ক্লায়েন্টের অভ্যন্তরীণভাবে খেলে।

বিকল্পভাবে, কেউ কি অন্য কোনও পদ্ধতির কথা ভাবতে পারে যার দ্বারা প্রকৃত গেম ক্লায়েন্টটি চালিয়ে না দিয়ে এই ডেটা স্ক্র্যাপ করে? মনে রাখবেন আমি একই সাথে অনেকগুলি স্ট্রিম থেকে ডেটা ধরতে চাই।


1
আমি এটি সম্পর্কে যেভাবে যেতে চেয়েছিলাম তা হ'ল LOLReplay থেকে যতটা রিপ্লে ফাইল সম্ভব হিসাবে নেওয়া এবং কেবল সেগুলি ক্রাঞ্চ করা। আমি মনে করি, একটি উন্মুক্ত সংরক্ষণাগার যেখানে লোকেরা তাদের নিজস্ব গেমগুলি আপলোড করতে পারে এবং আমি মনে করি যে নতুন দর্শক মোড রিপ্লে ক্লায়েন্টকে তার আগের তুলনায় আরও তথ্য দখল করতে দেয়।
রবার্ট এস

আর কি এপিআই এবং কৌশল আছে? কেন আপনি মনে করেন এনক্রিপশন আছে? আমি এটি গেটগেমেটা ডেটাতে পেয়েছি: "এনক্রিপশনকি": "" এবং "ডিকোডড এনক্রিপশনকি": ""
নাথান গোয়িংস

বিভিন্ন এলএল ফোরামগুলি থেকে এই প্রশ্নটিতে অবতীর্ণ হওয়া লোকদের জন্য এফওয়াইআই হিসাবে, "সম্পাদিত" এর অধীনে পোস্টটিতে আমার নাম দেখে এবং বিষয়টি সম্পর্কে জিজ্ঞাসা করার জন্য আমাকে ইমেল করা হচ্ছে ... আমি এলওএল বা এর সম্পর্কে কিছুই জানি না এর স্রোতের বিন্যাস। এটি সম্পর্কে আমাকে ইমেল করবেন না দয়া করে।

উত্তর:


4

আমি একই জিনিসটি নিয়ে গবেষণা করে চলেছি এবং এই রেপোটি অত্যন্ত সহায়ক বলে মনে করেছি। ফাইলটি ডিক্রিপ্ট.আরবি উভয় অংশ এবং কীফ্রেমগুলি ডিক্রিপ্ট করে।

সম্পাদনা করুন: এই রেডডিট থ্রেডটিও দেখুন


চমৎকার। প্রথম লিঙ্কটি আমার প্রশ্নের সুনির্দিষ্ট উত্তর দেয়। দ্বিতীয় লিঙ্কটিও সত্যই সহায়ক। অসংখ্য ধন্যবাদ!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.