Edytor tekstowy - pierwszy projekt

0

Witam. Chciałabym poprosić o ocenę pierwszego mojego "większego" projektu ;) - edytora tekstowego: http://www.sendspace.pl/file/e2b530ce3d522871c30d888. Napisany w Pythonie z użyciem wx :)

0

To jest na linuxa ; / .tar.bz a nie na windowsa ja nie mam aktualnie linuxa także nie ocenię tego... ; /

Przepraszam za pomyłkę jest to spakowane w .tar.bz jednak po rozpakowaniu jest plik .exe

0

no super, okrojony notatnik po angielsku na 17 MB
próba zmiany rozmiaru okna zwiększa je na sztywno

dałabyś chociaż kod źródłowy bo za bardzo nie ma czego oceniać...

0

Prawdę mówiąc - tutaj nie ma co oceniać.
Wrzucone jakieś pole tekstowe i menu.
No i dodatkowo nie można rozszerzać okna :|
Jedyne co mi się podobało to ikonki menu...


Nazywanie tego "większym projektem" to nawet dla newbie za dużo...
0

Ojej, no dobra, trochę na wyrost to "większy" -.- chodziło mi może bardziej o to, że to mój pierwszy program w wx pythonie, wcześniej w sumie nie pisałam za dużo w żadnym języku w ogóle, żadnych projektów ... jak oceniacie przez pryzmat tego, to coś zmienia?:P

9

Fajny ten notatnik.

1

Czy mi się zdaje, czy wyczuwam ironię?:P

1

@dziewczyna2: w jakim IDE to robiłaś, że masz taką fajnie wszystko zapakowane? Active Python? Czy może sama generowałaś to z użyciem cxfreeze, pyinstaller, py2exe itp.?

0

No to dzięki, miło mi, że jednak się komuś podoba, fajnie:) (Tylko nie wiem co znaczy jedynka przy moim poście, czy to jednak była ironia?)

@Spine: Robiłam to z użyciem py2exe, napisałam sobie setup.py :P - mogę udostępnić do tego programu jak chcesz;)

A pisałam to wszystko w zwykłym IDLE :P

A dałam wersję na Win, bo nie chciałam udostępniać kodu ... potem ktoś sobie weźmie i będzie się chwalił, że to on to napisał:P chyba, że znacie sposób jak to udostępnić bez kodu na linuksie, to nie ma problemu i tak na co dzień jestem na Kubuntu

0
dziewczyna2 napisał(a):

@Spine: Robiłam to z użyciem py2exe, napisałam sobie setup.py :P - mogę udostępnić do tego programu jak chcesz;)

Dzięki za info, nie trzeba mi pliku, tylko chciałem wiedzieć ;) Ja dotychczas paczki robiłem w PyInstaller, np. tą grę w wersji dla Win http://www.jason.gd/str/pokaz/Too_Many_Troopers_2 .

A pisałam to wszystko w zwykłym IDLE :P

Jako IDE używam Wing IDE - ma dobre code completion, ogólnie łatwiej ogarnąć kod Python'owy, przyjemnie mi się pracuje z tym środowiskiem :)

A dałam wersję na Win, bo nie chciałam udostępniać kodu ... potem ktoś sobie weźmie i będzie się chwalił, że to on to napisał:P chyba, że znacie sposób jak to udostępnić bez kodu na linuksie, to nie ma problemu i tak na co dzień jestem na Kubuntu

Bez kodu na Linuksie możesz udostępnić same pliki *.pyc i napisać jakie biblioteki i jaką wersję Python'a wymaga (2.6, 2.7, 3.1 itd.), a paczka, którą zrobiłaś chodzi pod Wine :)

0

A dałam wersję na Win, bo nie chciałam udostępniać kodu ... potem ktoś sobie weźmie i będzie się chwalił, że to on to napisał:P

Nie popadaj w paranoje, jak temu komuś będzie zależało to i tak sobie skopiuje kod z jednej z miliardów implementacji prostych notepadów(http://code.google.com/p/verysimplenotepad/source/browse/trunk/src/MyNotepad.py). W końcu notepad to nie rocket-science. Pokazując kod źródłowy do oceny nic nie stracisz, możesz nawet zyskać.

3

Ok, minęło już trochę czasu od stworzenia wątku, aktorka prawdopodobnie nie zajrzy żeby mnie zrównać z ziemią...

A dałam wersję na Win, bo nie chciałam udostępniać kodu ... potem ktoś sobie weźmie i będzie się chwalił, że to on to napisał:P chyba, że znacie sposób jak to udostępnić bez kodu na linuksie, to nie ma problemu i tak na co dzień jestem na Kubuntu

Py2exe to żadne zabezpieczenie. Najlepsze co mogłabyś zrobić, i co przyniosłoby zauważalne rezultaty, to użyć jakiegoś obfuscatora. Jak dotąd, nie widziałem porządnego protektora do pythona (tak samo jak np do aplikacji .NET - po prostu bez obfuskacji każde zabezpieczenie można szybko mając trochę umiejętności złamać).

Nie przejmuj się jednak, nie ma programu którego się nie da złamać, nieważne czy jest napisany w Pythonie, C#, Visual-Basicu czy C++ - to po prostu kwestia czasu.

A jeśli mowa o czasie... Jest 4:30, wykonamy tutaj mały reversing.

Zaczynamy od pobrania pliku zapisania na dysku. Po rozpakowaniu, pojawia się pełno plików i folderów:

2012-08-08  05:18    <DIR>          .
2012-08-08  05:18    <DIR>          ..
2012-04-10  23:31            59 904 bz2.pyd
2012-08-08  05:18    <DIR>          images
2012-07-14  17:46            47 616 KaEmDitor.exe
2012-07-14  17:46         3 537 303 library.zip
2012-04-10  23:31         2 303 488 python27.dll
2012-04-10  23:31             9 728 select.pyd
2012-04-10  23:31           686 592 unicodedata.pyd
2012-04-10  23:31            49 664 w9xpopen.exe
2011-07-15  21:38           966 144 wx._controls_.pyd
2011-07-15  21:37           981 504 wx._core_.pyd
2011-07-15  21:38           746 496 wx._gdi_.pyd
2011-07-15  21:38           674 816 wx._misc_.pyd
2011-07-15  21:38           670 720 wx._windows_.pyd
2011-07-15  21:33           122 368 wxbase28uh_net_vc.dll
2011-07-15  21:33         1 300 992 wxbase28uh_vc.dll
2011-07-15  21:34           730 112 wxmsw28uh_adv_vc.dll
2011-07-15  21:34         3 165 184 wxmsw28uh_core_vc.dll
2011-07-15  21:34           479 744 wxmsw28uh_html_vc.dll
2012-04-10  23:31           285 184 _hashlib.pyd
              18 plik(ów)         16 817 559 bajtów
               3 katalog(ów)  163 922 464 768 bajtów wolnych

Najbardziej interesujący jest tutaj plik KaEmDitor.exe, w końcu w nim siedzi z założenia cała magia.

Tak naprawdę w pliku stworzonym przez py2exe jest dużo py a mało exe - nie będę tutaj cytował kodu asemblera, ale ten plik składa się przede wszystkim z loadera, uruchamiającego skompilowany kod pythona. No dobrze, ale skąd ten kod pythona się bierze?
Podejrzyjmy zasoby pliku KaEmDitor.exe
res.png

Tak, cały kod tam siedzi -musimy się tylko do niego dostać...

Użyjemy do tego latającego po sieci skryptu (nie mam niestety pojęcia kto go napisał...) nazwanego zwodniczo exe2py - tak naprawdę nie ma nic wspólnego z konwersją kodu do pythona, wykonuje jedynie ekstrakcję plików .pyc (tak, to one tam siedzą...) z zasobów pliku .exe.

Kopia kodu exe2py http://pastebin.com/KBnDSxVH

Odpalamy exe2py:

D:\Code\RE\dist>python exe2py.py KaEmDitor.exe
HEADER: 0x78563412 0 0 11112
ZipArchive: library.zip
Found code object: C:\Python27\lib\site-packages\py2exe\boot_common.py
        Extracting to: boot_common.pyc
Found code object: KaEmDitor.py
        Extracting to: KaEmDitor.pyc

Zgodnie z tym co napisano - pojawiają się dwa nowe pliki - boot_common.pyc (ten nas nie interesuje, sprawy wewnętrzne exe2py) oraz KaEmDitor.pyc (bingo).

W zasadzie jesteśmy o krok od rozwiązania zagadki. Najpierw zauważamy że w folderze znajduje się plik Python27.dll - chytrze wnioskujemy, że program jest napisany w wersji 2.7 pythona.

To się świetnie składa, teraz możemy użyć narzędzia takiego jak uncompyle (wspierającego pythona 2.7)
Ściągamy: https://github.com/wibiti/uncompyle2
Instalujemy: python setup.py install

No i co tu jeszcze dodać...

python "C:\Program Files (x86)\Python27\Scripts\uncompyle2" -o reversed_src.py KaEmDitor.pyc

Tworzy się w tym momencie piękny plik reversed_src.py, zawierający czysty i niczym nie skażony kod źródłowy... Pierwsze 30 linijek (na 192) żeby nie być gołosłownym (całego kodu nie wrzucę żeby być chociaż minimalnie miłym):

#Embedded file name: KaEmDitor.py
import wx
import os
import codecs

class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='KaEmDitor v0.1', pos=(400, 100))
        self.filename = ''
        self.dirname = ''
        self.SetMaxSize((500, 550))
        self.SetMinSize((500, 550))
        self.text = wx.TextCtrl(self, 1, style=wx.TE_MULTILINE)
        self.text.SetFocus()
        self.createMenus()
        self.connectItemsWithEvents()
        self.createKeyboardShortcuts()
        self.SetMenuBar(self.menuBar)
        favicon = wx.Icon('images/app-icon.ico', wx.BITMAP_TYPE_ICO, 16, 16)
        self.SetIcon(favicon)
        self.Show()

    def connectItemsWithEvents(self):
        self.Bind(wx.EVT_MENU, self.aboutEvent, self.aboutItem)
        self.Bind(wx.EVT_MENU, self.openEvent, self.openItem)
        self.Bind(wx.EVT_MENU, self.saveEvent, self.saveItem)
        self.Bind(wx.EVT_MENU, self.saveAsEvent, self.saveAsItem)
        self.Bind(wx.EVT_MENU, self.exitEvent, self.exitItem)
        self.Bind(wx.EVT_MENU, self.copyEvent, self.copyItem)

I... tyle. Program uruchamia się normalnie ze źródła.

Jak widać - nie jest to trudne jeśli wie się co zrobić - może 30 minut na pobieranie bibliotek i analizę, resztę czasu na pisanie posta (tak, tyle czasu to zajęło...), jest 5:40.

Jeszcze raz o najważniejszej rzeczy wynikającej z tego posta, którą warto zapamiętać żeby nie wpadać na różne głupie pomysły:
Py2exe nie służy do chronienia kodu przed analizą. Jeśli chcesz komuś unieprzyjemnić reversowanie swojego programu - użyj obfuscatora.

Dziękuję za uwagę, teraz się chyba niespecjalnie nawet opłaca iść spać...

0 użytkowników online, w tym zalogowanych: 0, gości: 0