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 :)
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
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ć...
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...
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
Fajny ten notatnik.
Czy mi się zdaje, czy wyczuwam ironię?:P
@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.?
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
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 :)
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ć.
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
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ć...