Pokazywanie postów oznaczonych etykietą Firefox. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Firefox. Pokaż wszystkie posty

22 grudnia 2013

Digital certificate

Rozglądam się w temacie certyfikatów cyfrowych podpisujących strony. Kilka linków i prost zabawa z OpenSSL.
Informacje o certyfikacie i sprawdzenie czy jest wystawiony przez zaufane źródło
# Informacje na temat certyfikatu wyeksportowanego z Firefox-a
$ openssl x509 -text -in A-Trust-nQual-03.pem

$ openssl verify A-Trust-nQual-03.pem 
A-Trust-nQual-03.pem: OK

3 września 2013

Lista pomocnych wtyczek do Firefoxa

Aby mi nie wyparowało, postanowiłem stworzyć sobie małą listę przydatnych wtyczek, które może nie ułatwiają codziennej pracy, ale na pewno są pomocne, w szczególnych zastosowaniach.

Dodatek pozwalający oszukać/ustawić wartość, document.referrer (JavaScript).
  • https://addons.mozilla.org/pl/firefox/addon/refcontrol/

  • Bardzo popularny dodatek. Pozwala testować JavaScript, przekopać się w poszukiwaniu interesujących treści na stronie itd.
  • https://addons.mozilla.org/pl/firefox/addon/firebug/

  • Jedna z kilku wtyczek, którą testowałem, ale tylko w tej doszedłem do tego jak można zaciągnąć film z Facebook-a.
  • https://addons.mozilla.org/pl/firefox/addon/netvideohunter-video-downloade/
  • 27 lipca 2013

    Firefox - plugin na bazie FireBreath

    Szukam sposobu, na podpięcie się do przeglądarki i dobranie się do źródła wyświetlanej strony - co w konsekwencji jeszcze nie całkiem mi się nie udało. Padło na stworzenie rozszerzenia do przeglądarki. Firefox oferuje interfejs NPAPI (http://en.wikipedia.org/wiki/NPAPI) do takie celów. Projekt FireBreath, umożliwia tworzenie rozszerzeń na różne przeglądarki pod różne systemy. Instalacja frameworka jest bardzo przyjemna.
    #wymagana jest wcześniejsza instalacja libgtk
    sudo apt-get install libgtk2.0-dev
    
    git clone git://github.com/firebreath/FireBreath.git -b firebreath-1.7 firebreath-1.7
    cd firebreath-1.7
    # zaciągane są potrzebne biblioteki np. boost
    git submodule update --recursive --init
    
    # budowanie przykładów dostarczonych z projektem
    ./prepmake.sh examples
    cd buildex/
    make
    
    Autorzy dostarczają także kilka wideo tutoriali, który szybciej pozwalają zapoznać się z architekturą całego projektu.
    Mamy też do dyspozycji odpowiednie skrypty, umożliwiające stworzenie szkieletu pod nasz projekt. Autor nawet zaleca, by nie by tworzyć go zupełnie na zewnątrz, a firebreath podpiąć jako submoduł.
    cd firebreath-1.7
    ./fbgen.py
    # Plugin Name []: BeruPlugin
    # Plugin Identifier [BeruPlugin]: 
    # Plugin Prefix [BPL]: 
    # Plugin MIME type [application/x-beruplugin]: 
    # Plugin Description []: Beru Testing Plugin
    # Plugin has no UI [false]: 
    # Company Name []: NiegodziwyBeru
    # Company Identifier [NiegodziwyBeru]: 
    # Company Domain [niegodziwyberu.com]: nberu.blogspot.com         
    
    # Dobrą praktyk jest rozpoczęcie pracy od stworzenia repozytorium
    mv projects/BeruPlugin/ ../
    cd ../BeruPlugin/
    git init .
    git add .
    git commit -m"Beru Plugin first commit"
    
    # ustawiamy firebreath jako submodułu
    git submodule add git://github.com/firebreath/FireBreath.git firebreath
    git submodule update --init --recursive
    git commit -m"Added firebreath as submodule"
    
    # Budowanie
    ./firebreath/prepmake.sh . build/
    cd build
    make
    
    # Kopiowanie naszego rozszerzenie stamtąd zostanie 
    # automatycznie zaczytany przez Firefoxa
    cp bin/BeruPlugin/npBeruPlugin.so ~/.mozilla/plugins/
    
    Wciąż nie wiem, czy możliwe jest dobranie się całego źródła strony. Poniżej mały eksperyment pokazujący możliwości rozszerzenia , czyli pobranie adresu strony, z której został zawołany (http://www.firebreath.org/display/documentation/Tips+and+Tricks#TipsandTricks-GettingtheURLofthecurrentpage).
    void BeruPlugin::onPluginReady()
    {
        // When this is called, the BrowserHost is attached, the JSAPI object is
        // created, and we are ready to interact with the page and such.  The
        // PluginWindow may or may not have already fire the AttachedEvent at
        // this point.
        const std::string current_url = m_host->getDOMWindow()->getLocation();
        const std::string page_html = m_host->getDOMElement()->getInnerHTML();
    
        std::ofstream f;
        f.open("/home/beru/BeruPluginLog.txt", std::ios_base::out | std::ios_base::app);
        f << current_url << std::endl;
        if (page_html.empty())
            f << "Empty content " << std::endl;
        else
            f << "Content: " << page_html << std::endl;
        f << "-------------------------" << std::endl;
        f.close();
    }
    
    Ładowania rozszerzenia.
    <html>
    <head>
    <title>Test page for object beruplugin</title>
    </head>
    <object id="player" type="application/x-beruplugin" width="300" height="200">
    aaa<i>iii</i></object>
    <br/>
    <b>Hello world application/x-beruplugin</b>
    </html>
    
    I wynik działania:
    file:///home/beru/test.html
    Content: aaa<i>iii</i>
    -------------------------
    

    29 kwietnia 2013

    Firefox addon - run calc.exe

    Przydatna rzecz - wtyczka dla Firefox-a, choć praca nad nią była dość niewygodna. W planach miałem, zbudowanie czegoś podobnego do wtyczki RefControl, która kontroluje co jest wysyłane jako HTTP Referer do strony. Na razie jednak, zacząłem od czegoś prostszego. Do zbudowania wtyczki, posłużył mi Add-on builder:
    Poniższy przykład nie robi nic użytecznego. Dopisuje do każdej strony "Hello world" (na jej początku), zapisuje w konsoli vendor-a, a po naciśnięciu ikony widgetu otwiera w nowej zakładce stronkę dupa.pl i uruchamia kalkulator (to jest wersja pod Windows). Poniżej przydatne linki, z dokumentacją do wykorzystanych bibliotek:
    Dość często miała problemy ze zdiagnozowanie przyczyny, dlaczego wtyczka się nie "kompiluje". A gdy "kompilacja" już się powiodła, często znikała ikona mojego widget-u. Rozwiązaniem drugiego problemu, było częste zmienianie jego identyfikatora. Bez wątpienia, potrzebna jest pewna wprawa, żeby pisanie następnych mogło odbywać się sprawniej.
    // The main module of the niegodziwyberu Add-on.
    
    // Modules needed are `require`d, similar to CommonJS modules.
    // In this case, creating a Widget that opens a new tab needs both the
    // `widget` and the `tabs` modules.
    var Widget = require("widget").Widget;
    var tabs = require('tabs');
    var { Cc, Ci } = require('chrome');
    
    exports.main = function() {
        // https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/system.html#vendor
        var system = require("sdk/system");
        console.log("Console print, vendor = " + system.vendor);
    
        // https://addons.mozilla.org/en-US/developers/docs/sdk/latest/dev-guide/tutorials/modifying-web-pages-url.html
        // Import the page-mod API
        var pageMod = require("sdk/page-mod");
    
        // Create a page mod
        // It will run a script whenever a ".pl" URL is loaded
        // The script replaces the page contents with a message
        pageMod.PageMod({
            include: "*.pl",
            contentScript: 'content.document.body.innerHTML = ' +
                           '"<h1>Hello World</h1>" + content.document.body.innerHTML;'
        });
    
        // https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIProcess#See_also
        // ZACZEŁO DZIAŁAĆ, PO PRZENIESIENIU TUTAJ
        // create an nsIFile for the executable
        var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
    
        // create an nsIProcess
        var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
    
        // https://addons.mozilla.org/en-US/developers/docs/sdk/latest/modules/sdk/widget.html
        new Widget({
            // Mandatory string used to identify your widget in order to
            // save its location when the user moves it in the browser.
            // This string has to be unique and must not be changed over time.
            // DA SIĘ COŚ ZROBIĆ, ŻEBY TEGO CAŁY CZAS NIE POPRAWIAĆ?
            id: "niegodziwier-widget-7",
    
            // A required string description of the widget used for
            // accessibility, title bars, and error reporting.
            label: "NiegodziwyBeru Widget",
    
            // An optional string URL to content to load into the widget.
            // This can be local content or remote content, an image or
            // web content. Widgets must have either the content property
            // or the contentURL property set.
            //
            // If the content is an image, it is automatically scaled to
            // be 16x16 pixels.
            contentURL: "http://www.mozilla.org/favicon.ico",
    
            // Add a function to trigger when the Widget is clicked.
            onClick: function(event) {
                // Open a new tab in the currently active window.
                tabs.open("http://dupa.pl");
    
                // Open calc application
                file.initWithPath("c:\\windows\\system32\\calc.exe");
                process.init(file);
                var args = [];
                process.run(false, args, args.length);
            }
        });
    
    };
    

    21 kwietnia 2013

    Ataki "na" i "z" JavaScript

    Dwie bardzo fajne prezentacje, które udało mi się ostatnio obejrzeć. Pierwsza, dotyczy ataków na kompilatory JIT, np. JavaScript-owy silnik w przeglądarce.
    Druga pokazuje, kto tak naprawdę korzysta z "anonimowych proxy" ;) i jak wstrzykiwać złośliwi kod JavaScript do stron, która przez taki serwer przechodzą.
    Przy okazji, dowiedziałem się o ciekawym projekcie. Może kiedyś będzie szansa się w to zagłębić: