Mój pierwszy plugin do Fiddlera

Stare przysłowie mówi, że potrzeba jest matką wynalazków. To prawda. Może wynalazek wielki to nie jest, ale na pewno potrzeba zmusiła mnie do przeproszenia się z C#. W wyniku napisałem swój pierwszy plugin do narzędzia Fiddler.

Jaka potrzeba?

W tym wypadku potrzebę wygenerował wynalazek o nazwie Google Web Toolkit, a konkretnie ewentualność testowania aplikacji internetowej w nim popełnionej.

Co specyficznego jest GWT? Testowanie aplikacji internetowej w znacznym stopniu polega na modyfikacji przesyłanych między klientem i serwerem. Zwykle są one przesyłane jako argumenty żądania GET lub POST. Ta metoda jest dobrze obsługiwana przez narzędzia typu WebScarab, Fiddler, czy TamperIE. Po przechwyceniu parametry mogą być łatwo modyfikowane... Oczywiście GWT jest inne. Całość przesyłana jest co prawda w metodzie POST, ale bynajmniej nie w postaci application/x-www-form-urlencoded (czyli w postaci par nazwaparametru1=wartoscparametru1 & ... &nazwaparametrun=wartoscparametrun. Zamiast tego poszczególne elementy żądania rozdzielone są ciągiem wartości 0xEF, 0xBF, 0xBF. Wygoda pracy w takim wypadku jest zerowa, a ja z natury jestem leniwy...

To jak to zrobić?

Zarówno WebScarab, jak i Fiddler wspierają skryptowanie i rozszerzanie swojej funkcjonalności. Na początku chciałem to zrobić w WebScarab, ale nie zauważyłem prostej metody zrobienia tego, co chciałem, a konkretnie:

W Fiddler natomiast coś takiego jest stosunkowo proste do zrealizowania. Wystarczy, by rozszerzenie implementowało interfejs IAutoTamper. Gdyby nie fakt, że w C# nie napisałem nawet linijki od lat kilku, to napisanie takiego dekodera zajęłoby dosłownie chwil kilka...

A Python jest lepszy!

Przyznam się, że najwięcej czasu zajęło mi zaimplementowanie banalnych operacji na stringach. W nieskończonej swej naiwności liczyłem na to, że funkcja Split w .NET będzie równie wygodna, jak w Pythonie. Niestety, nie jest... A separator, który wprowadziłem miał 3 znaki (najpierw po prostu przeglądałem tablicę bajtów i zamieniłem separatory na string postaci “|||”). W Pythonie rozbicie tych wartości jest trywialne, bo separator może być nie tylko znakiem, ale również ich ciągiem. Gdy już doszedłem do tego, dlaczego mnożą mi się parametry, było już z górki...

Aby było jasne, nie twierdzę, że .NET jest zły. Twierdzę, że Python jest wygodniejszy. Muszę sprawdzić, czy rozszerzenia do Fiddlera da się pisać w IronPython.

Oryginał tego wpisu dostępny jest pod adresem Mój pierwszy plugin do Fiddlera

Autor: Paweł Goleń