Это архив блога mr.The Блог больше не обновляется. статьи сохранены в ознакомительных целях.

Взлом расширений chrome

2012-01-29

Понадобилось сделать скриншот содержимого браузера. Делать это через принтскрин не самый оптимальный выбор, учитывая сколько у Chrome(Chromium) расширений.
Было найдено отличное расширение Explain and Send Screenshots.

.

Оно минималистично, удобно, да ещё и может отправить скриншот на imgur или другой замечательный хосниг картинок, что является огромным плюсом.
Но есть у него один минус: расширение добавляет на картинку своё название и ссылку на страницу на которой мы делаем сриншот:

И если название ещё можно пережить, то ссылка обычно не нужна вообще. К тому же, если делаешь скриншот небольшого куска текста, то эти надписи мешают его читать.

.

Само приложение просит доната хотя бы в 1$. Не много, но проблема в том, что после удаления и повторной установки приложение снова просит донат, а это уже как-то обидно.

.

Рассмотрим способ взлома и получения всех функций на примере этого расширения:

1) Сначала, нужно найти где находится приложение:
В каталоге приложений ссылка выглядит как

https://chrome.google.com/webstore/detail/mdddabjhelpilpnpgondfmehhcplpiin/details

где mdddabjhelpilpnpgondfmehhcplpiin - уникальный id. Он-то нам и нужен.

.

Итого, приложение находится:

Linux:
/home/YourUserName/.config/chromium/Default/Extensions/mdddabjhelpilpnpgondfmehhcplpiin

Mac:
/Users/YourUserName/Library/Application Support/Google/Chrome/Default/Extensions/mdddabjhelpilpnpgondfmehhcplpiin

Windows 7:
C:\Users\YourUserName\AppData\Local\Google\Chrome\User Data\Default\Extensions\mdddabjhelpilpnpgondfmehhcplpiin

Windows XP:
C:\Documents and Settings\YourUserName\Local Settings\Application Data\Google\Chrome\User Data\Default\mdddabjhelpilpnpgondfmehhcplpiin

В этой папке, обычно, есть подпапка с именем версии или чем-то подобным. В ней уже лежит само приложение, которое представляет из себя набор обычных js\html\css файлов.

.

Стоит туда зайти и в глаза тут же бросается файл с именем "donate.html".

В нём находится вот такой таймер:

        setInterval(function() {            
            if (location.href.match(/paypalInline=fail|paypalInline=success/)) {
                var success = location.href.match("success");               
                history.replaceState({}, 'After paypayInline', location.href.replace(/#.*/, "#paypayInline=acknowledged"));
                if (dg && dg.isOpen()) {
                    dg.closeFlow();
                }
                if (success) {
                    showSuccessfulPayment();
                    sendGA(['_trackEvent', "paypal", "success"]);
                } else {
                    $("#paymentFailure").text(chrome.i18n.getMessage("failureWithPayPalPurchase")).slideDown("slow").delay(6000).slideUp("slow");
                    sendGA(['_trackEvent', "paypal", "cancel?"]);
                }
            }
        }, 500);

В котором видно код, который срабатывает при успешной оплате пейпалом:

showSuccessfulPayment();
sendGA(['_trackEvent', "paypal", "success"]);

Остаётся вставить его в любое понравившееся место, например чуть выше есть функция setPayPayInlineParam, которая срабатывает при клике на кнопку оплаты через пейпал. В самое её начало вставим наш код активации:

showSuccessfulPayment();
sendGA(['_trackEvent', "paypal", "success"]);
return 1;

Остаётся сохранить файл, перезапустить браузер и нажать на эту самую кнопку в приложени. Вуаля, получаем сообщение об успешном донате и видим, что теперь можно отлючить добавление этих надписей:

Метод не универсальный, но общий алгоритм ясен: найти методы вызывающиеся при успешной оплате и вызвать их.
.
Напоминаю, что всё описанное выше применимо только после оплаты всех возможностей приложения, так как нужно поддерживать автора, но нет смысла отвлекать его от работы, если мы всего-лишь переустановили браузер и приложение "забыло" что было оплачено.
.