Як зламати Trivia Crack за допомогою Trivia Cracker

Як зламати Trivia Crack за допомогою Trivia Cracker

BY ДЖО ЛЕВІ


optad_b

Під час курортного сезону я почав помічати, що новий додаток, Дрібниці Крек , став популярним серед моїх друзів. Для тих, хто не знає, Trivia Crack - це нова гра для Android, iPhone та Facebook . Передумова гри проста і дуже схожа на інший популярний додаток минулого року, QuizUp. По суті, ви відповідаєте на дрібниці на різні категорії, змагаючись проти своїх друзів за хвастощі. Незважаючи на простоту (або, можливо, завдяки їй), Trivia Crack останнім часом став дуже популярним - набравши 5,3 мільйона вподобань у Facebook і стати найкращим безкоштовним додатком у магазині Google Play (Android).

Можна подумати, що розробники такої полірованої та успішної гри могли витратити час, щоб реалізувати її таким чином, щоб захистити від обману, але виявляється, написання програми для обману на Trivia Crack насправді досить просте. Протягом вихідних я зміг написати і випустити розширення для Chrome, Дрібниці Зломщик , Що перетворило мене з посереднього в кращому випадку гравця «Трівіа Крек» у, здавалося б, геніального напівбога. Ви можете побачити Trivia Cracker в дії нижче:



То що не так із реалізацією Trivia Crack, яка дозволила мені так легко створити інструмент, який дозволяє кожному обдурити? Коротше кажучи - коли клієнт Trivia Crack запитує від сервера Trivia Crack наступне запитання, яке задає користувачеві, сервер відповідає не лише питанням та можливими відповідями, але також надсилає, яка відповідь є правильною. Подробиці вразливості, як я її знайшов і як я створив розширення Chrome, щоб скористатися ним, наведено нижче.

1) Пошук вразливості

Занадто багато разів програвши своїм друзям у Trivia Crack, я вирішив, що хочу побачити, чи зможу я перемогти своїм, особливим чином. Хоча я не дуже хороший у випадкових дрібницях, я досить добре маю зворотне проектування. Я підозрював, що можу скористатися пересиланням власних запитів на сервери Trivia Crack або використанням деяких даних у відповідях із серверів Trivia Crack, щоб отримати перевагу в грі. Отже, я розпочав з дослідження того, які типи даних клієнт і сервер Trivia Crack передають туди-сюди.

Щоб перевірити ці дані, я відтворив Trivia Crack у своєму браузері на Фейсбуці , під час запису та перевірки запитів та відповідей, надісланих між клієнтом і сервером Trivia Crack, за допомогою інструменту, який я створив раніше Gargl . Так, я знаю, що я міг скористатися Fiddler або Chrome Developer Tools, щоб зробити те саме. Я вирішив використовувати замість цього Gargl, оскільки окрім дозволу переглядати запити / відповіді клієнта / сервера, Gargl також дозволяє вам змінювати та параметризувати ці запити, а потім автоматично генерує модулі на обрану вами мову програмування, щоб ви могли робити ці самі запити. без написання рядка коду. Про це далі.



У всякому разі, після розповіді Gargl щоб розпочати запис і перейти до Trivia Crack на Фейсбуці у моєму браузері першим кроком було з’ясувати, який із багатьох запитів, надісланих на цій сторінці у Facebook, пов’язаний із Trivia Crack проти самого Facebook. Перевірка HTML-коду на сторінці показала, що вміст Trivia Crack вбудований у Facebook через iframe. Елемент прямо над цим iframe був формою, призначеною для розміщення на певній URL-адресі: https://preguntados.com/game .

Дрібниці Крек

Моє обмежене знання іспанської мови нагадало мені, що «pregunta» означає «питання», яке, схоже, пов’язане з дрібницями, тому я підозрював, що це домен, де розміщується Trivia Crack. Перехід до https://preguntados.com/game URL підтвердив цю підозру:

Дрібниці Крек



Наступним кроком було просто почати програвати Trivia Crack, і коли я грав, подивіться на запити, які Гаргл виявляє, що сторінка робить будь-яку URL-адресу, що містить “preguntados.com”:

Дрібниці Крек

Коли я відповідав на запитання Trivia Crack, я помітив, що на кожне запитання видається новий запит. Власне, запит видався ще до того, як я навіть «закрутив крутильник» у Trivia Crack, щоб визначити, якою категорією буде наступне запитання:

Дрібниці Крек

Це змусило мене думати, що, можливо, питання були визначені заздалегідь, і „випадковий спінінг” насправді був визначений, щоб потрапити в певну категорію (і задати певне питання) на основі відповіді сервера на „api.preguntados.com/api / user // games / ”запит, надісланий перед тим, як натиснути кнопку“ Відкрутити ”. Для мене це означало, що я міг би, напевно, попередити користувача про питання, яке їм збираються задати заздалегідь, тож у них буде стільки часу, скільки вони хочуть про це подумати або знайти його. Це було б перевагою, оскільки у Trivia Crack ви отримуєте лише 30 секунд, щоб відповісти на запитання, як тільки питання буде показано, щоб користувач не шукав відповіді. Крім того, в деяких ігрових режимах не тільки кількість запитань, які ви отримуєте правильно, але і кількість часу, який ви витрачаєте на відповідь, визначає, чи виграєте ви. Якби я міг показати користувачеві питання заздалегідь, вони, очевидно, могли б відповісти на нього набагато швидше, як тільки Trivia Crack покаже питання.

Тож я зрозумів, що маю провід і поглибив деталі цього запиту. Виявляється, цей запит насправді надав набагато більшу 'перевагу обманщика', ніж я думав ...

2) Уразливість в деталях

Використовуючи Gargl щоб детально розглянути запит / відповідь “api.preguntados.com/api/users//games/”, я зміг підтвердити, що він справді надає питання, яке потрібно поставити, а також можливі відповіді у відповідь. Однак я з подивом виявив, щоправильна відповідь на питання також закладена у відповіді!

Дрібниці Крек

Як ви можете бачити вище, відповідь на цей запит містить запитання, можливі відповіді та який індекс у масиві можливих відповідей є правильною відповіддю. Отже, якщо ці дані справді стосуються наступного питання, після того, як я натиснув кнопку «Закрутити», я повинен запитати: «У якої з перелічених африканських країн немає узбережжя?» а правильною відповіддю повинні бути відповіді [3] згори, тобто 'Всі вони роблять'. Натискання кнопки “Спин” підтвердило цю гіпотезу правильною:

Дрібниці Крек

Дрібниці Крек

Я також використовував свій браузер, щоб виявити, що повторні запити GET на “api.preguntados.com/api/users//games/” завжди дають однакову відповідь, доки ви не відповісте на запитання, яке він надає. Це означає, що я міг запросити цю URL-адресу у своєму власному інструменті, і при цьому отримуватиму те саме запитання, що й клієнт Trivia Crack у Facebook.

Відповідь, що містить правильну відповідь, коли метою є те, що користувач повинен визначити відповідь самостійно, знаходиться в прямому конфлікті з “ Оборонне програмування 'Практика програмування - особливо' ніколи не довіряйте клієнту ”Принцип веб-програмування. Оскільки сервер не має контролю над діями клієнта, він не може припустити, що клієнт не буде діяти зловмисно, і тому повинен захищатись. Правильний спосіб реалізації поведінки перевірки відповідей - це робити на стороні сервера. Не надсилайте клієнту правильної відповіді в будь-який момент, а замість цього змусіть клієнта надіслати відповідь користувача на сервер, де сервер потім перевірить її на правильність і зарахує користувача, якщо він правильний (і, звичайно, дозвольте лише один відповідь, що надсилається кожному користувачеві на запитання).

Однак Trivia Crack цього не робила, а натомість довіряє клієнту. Тепер мова йшла лише про створення зловмисного клієнта, щоб скористатися тим, що у відповіді надсилається правильна відповідь. В ідеалі такий, який непростим користувачам було б легко встановити та використовувати. Хм ... як щодо розширення Chrome, яке просто додає кнопку до гри Trivia Crack, коли грається на Фейсбуці , що при натисканні автоматично відповідає на поточне питання правильно ??

3) Користуючись вразливістю

Як я вже згадував вище, Gargl дозволяє приймати запити, у яких він був записаний, модифікувати та параметризувати їх за потребою, а потім автоматично генерувати модулі вибраною мовою програмування, щоб робити ці самі запити. Я не збираюся вдаватися в подробиці цього процесу, оскільки ви можете переглянути один із моїх Повідомлення в блозі Gargl щоб знайти цю інформацію, але по суті я створив файл Файл шаблону Gargl для Trivia Crack Різні запити API, використовуючи Розширення Gargl Chrome , а потім за допомогою генератора Gargl перетворив цей файл шаблону на файл Trivia Crack бібліотека JavaScript . Використання Gargl для цього дозволило мені створити бібліотеку JavaScript, яка розмовляє із серверами Trivia Crack, не вписуючи для цього рядка коду, а також мати файл шаблону на майбутнє, якщо я хочу зробити те ж саме пізніше для іншого мова програмування.

Після того, як я отримав цю бібліотеку JavaScript Trivia Crack, було просто створити розширення Chrome у JavaScript, яке працює на домені, завантаженому на ігровій сторінці Trivia Crack Facebook iframe (preguntados.com), додає кнопку до HTML для гри , а при натисканні на цю кнопку запитується URL-адреса “api.preguntados.com/api/users//games/”, аналізується відповідь для правильної відповіді, а потім клацається кнопка відповіді на сторінці, що представляє правильну відповідь.

Дрібниці Крек

І просто так, Дрібниці Зломщик народився! Цікаві точні подробиці того, як працює Trivia Cracker? Перевірте вихідний код на GitHub .

Цей твір спочатку був представлений на Блог Джо Леві , І зробив репост з дозволу.

Зображення через Trivia Crack