Seite 3 von 5

Verfasst: Montag 7. April 2008, 17:45
von Leonidas
sechsrad hat geschrieben:aha, bei "from ctypes import *" wird dieses "ctypes" automatisch angenommen und es kommt dann die fehlermeldung wenn ich es davor setze und bei "import ctypes" muss ich es jedesmal davorschreiben.
Ja, daher sollte man es eben nicht machen. Um die Übersicht zu bewahren.

Verfasst: Montag 7. April 2008, 18:01
von ne0h
Lies mal den Artikel "Mifare-Funkchip geknackt" in c't 8/2008 (das ist die aktuelle) auf S. 80 durch (kann ich übrigens auch allen anderen empfehlen). Der ist super gemacht und zeigt wie sie Hardware-Reverse-Engineering gemacht haben. Natürlich, das war sicherlich mehr Aufwand als wie das im Artikel klingt, aber trotzdem - mit genügend Motivation (und die kann durchaus gegeben sein, wenn man sieht, wo die Mifare Classic überall eigesetzt wird) ist so etwas durchaus zu schaffen. Klar dass das schon einiges an Vorwissen benötigt, aber das ist nun mal mit allem so
Den Artikel habe ich auch zuletzt gelesen, wirklich schön, wie die Jungs dort das Ganze auseinandergenommen haben.


@sechsrad

Sorry, aber Deine ganzen Begriffe sind einfach nur zusammengewürfelt, ich habe auch danach gegoogelt und nichts sinnvolles dazu gefunden.

Des weiteren würde mich mal interessieren, wie Du die Leistung deines Pythoncodes analysiert hast und wie Du feststellst, dass Dein Pythoncode langsamer ist als Deine C-Implementierung ?

Wo genau macht Python denn bei Deinem Projekt schlapp? Hast Du NumPy und andere Möglichkeiten eingesetzt, die auch schon hier gepostet wurden?

Hast Du schon versucht, Deinen Pythoncode zu optimieren?


ne0h

Verfasst: Montag 7. April 2008, 18:32
von sechsrad
Ja, daher sollte man es eben nicht machen. Um die Übersicht zu bewahren.
also mit "import ctypes"

mfg

Verfasst: Montag 7. April 2008, 18:36
von Leonidas
sechsrad hat geschrieben:
Ja, daher sollte man es eben nicht machen. Um die Übersicht zu bewahren.
also mit "import ctypes"
Richtig. Du kannst dem zwar einen Alias geben, aber mir fällt kein brauchenares Kürzel ein. Alternativ kannst du auch die Namen die du benötigst einzeln importieren, das ist im Fall von ctypes wohl auch ein brauchbarer Ansatz. Also mit ``from ctypes import pointer, cdll`` usw.

Verfasst: Montag 7. April 2008, 18:58
von lunar
Leonidas hat geschrieben:
lunar hat geschrieben:Ich bestreite ja nicht, dass Reverse Engineering möglich ist, aber ich bestreite, dass es einfach ist und "recht gut" funktioniert ;) In solche Keygeneratoren und Cracks steckt nämlich verdammt viel Arbeit, und oft braucht es ein paar Monate intensiver Arbeit, bis solche Algorithmen gebrochen sind.
Lies mal den Artikel "Mifare-Funkchip geknackt" in c't 8/2008 (das ist die aktuelle) auf S. 80 durch (kann ich übrigens auch allen anderen empfehlen). Der ist super gemacht und zeigt wie sie Hardware-Reverse-Engineering gemacht haben. Natürlich, das war sicherlich mehr Aufwand als wie das im Artikel klingt, aber trotzdem - mit genügend Motivation (und die kann durchaus gegeben sein, wenn man sieht, wo die Mifare Classic überall eigesetzt wird) ist so etwas durchaus zu schaffen. Klar dass das schon einiges an Vorwissen benötigt, aber das ist nun mal mit allem so :)
Was anderes habe ich ja auch gar nicht gesagt ;) Allerdings sind Vorwissen und Motivation für viele ausreichend große Hürden, vor allem, wenn das benötigte Vorwissen sehr umfangreich ist, und die Motivation lang anhalten muss ;) Beides ist beim Reverse Engineering eher Regel denn Ausnahme... insofern kann man schon davon sprechen, dass Reverse Engineering von Binärkompilaten wesentlich aufwendiger ist als das von Byte-Code. Nichts anderes wollte ich sagen ;)

Also lassen wir das jetzt, dass ist eh OT ;)

Verfasst: Montag 7. April 2008, 19:23
von sechsrad
ctypes
wie kann ich die namen von ctypes oder auch anderen modulen zb auflisten um sie mal kennenzulernen?
mfg

Verfasst: Montag 7. April 2008, 19:37
von Leonidas
``dir(ctypes)``.

Verfasst: Montag 7. April 2008, 19:38
von Sr4l
sechsrad hat geschrieben:
ctypes
wie kann ich die namen von ctypes oder auch anderen modulen zb auflisten um sie mal kennenzulernen?
mfg
Das Python Tutorial schadet nie.
( http://docs.python.org/tut/tut.html )

Aber ich verrate es dir ausnahmsweise mal direkt:

Code: Alles auswählen

>>> dir(ctypes)
['ARRAY', 'ArgumentError', 'Array', 'BigEndianStructure', 'CDLL', 'CFUNCTYPE', 'DEFAULT_MODE', 'DllCanUnloadNow', 'DllGetClassObject', 'FormatError', 'GetLastError', 'HRESULT', 'LibraryLoader', 'LittleEndianStructure', 'OleDLL', 'POINTER', 'PYFUNCTYPE', 'PyDLL', 'RTLD_GLOBAL', 'RTLD_LOCAL', 'SetPointerType', 'Structure', 'Union', 'WINFUNCTYPE', 'WinDLL', 'WinError', '_CFuncPtr', '_FUNCFLAG_CDECL', '_FUNCFLAG_PYTHONAPI', '_FUNCFLAG_STDCALL', '_Pointer', '_SimpleCData', '__builtins__', '__doc__', '__file__', '__name__', '__path__', '__version__', '_c_functype_cache', '_calcsize', '_cast', '_cast_addr', '_check_HRESULT', '_check_size', '_ctypes_version', '_dlopen',  ........]
>>> x = "lol"
>>> dir(x)
[ ..... 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', ..... ]
>>> 
PS: hätte ich noch einmal mehr in diesem Thread das Wort "(nicht)fachleuten" gelesen, hätte ich nicht geantwortet.

Verfasst: Montag 7. April 2008, 19:58
von sechsrad
also ich progge mit dem editor "drpython"

wenn ich den befehl dort eingebe und mit "run" starten möchte, passiert nichts.
wie kann ich es dort auflisten?


mfg

Verfasst: Montag 7. April 2008, 20:00
von Sr4l
die Ausgabe kommt natürlich nur im interaktiven Interpreter.
Wenn du es in einer .py Datei schreibst muß ein ``print`` davor.

Ist das die Lösung?

Verfasst: Montag 7. April 2008, 20:01
von ne0h
Du musst in der Shell Python starten (also in den interaktiven Modus wechseln) und dort dir(ctypes) eingeben.


ne0h

Verfasst: Montag 7. April 2008, 20:09
von audax
So ist das eben mit Nichtfachleuten...

Verfasst: Montag 7. April 2008, 20:14
von sechsrad
werde für so etwas den "idle" nehmen.

mfg

Verfasst: Montag 7. April 2008, 20:25
von EyDu
na siehste, geht doch. das kommt davon wenn man mit nichtfachleuten redet. ;-)

Sorry, aber den konnte ich mir jetzt nicht verkneifen.

Verfasst: Montag 7. April 2008, 20:25
von sechsrad
also geht auch nicht.

wenn ich dir() eingebe werden 3 namen aufgelistet.
bei dir(ctypes) kommt "NameError: name 'ctypes' is not defined"
obwohl ich ja eben mit der "ctypes" gearbeitet habe.
bei "dir(math)" kommt die gleiche fehlermeldung, obwohl ich eben gerade sinus getestet hatte mit import math.

hmmm.

mfg

Verfasst: Montag 7. April 2008, 20:28
von EyDu
Wahrscheinlich hast du vorher einfach nur ein "import ctypes" vergessen.

Verfasst: Montag 7. April 2008, 20:29
von ne0h
Du musst die Module auch erstmal importieren, damit sie bekannt sind.

Also zuerst:

Code: Alles auswählen

import math
und dann

Code: Alles auswählen

dir(irgendwas)


ne0h

Verfasst: Montag 7. April 2008, 20:30
von ne0h
Warum bin ich immer zu langsam... :?

Verfasst: Montag 7. April 2008, 20:34
von gerold
sechsrad hat geschrieben:bei dir(ctypes) kommt "NameError: name 'ctypes' is not defined"
Man muss ``ctypes`` vorher importieren, bevor man es mit ``dir`` analysieren kann.

EDIT:
ne0h hat geschrieben:Warum bin ich immer zu langsam... :?
Und du glaubst, du bist langsam? ;-)

Verfasst: Montag 7. April 2008, 21:22
von HWK
Masaru hat geschrieben:So wie du das da versuchst sechsrad, funktioniert es bei mir auch nicht ...
Eine andere, meines Erachtens einfachere Variante, da die C-Funktionen nicht umständlich angepasst werden müssen, wäre mit restype:

Code: Alles auswählen

import ctypes

f = ctypes.cdll.LoadLibrary('test.dll')
f.mult.restype = ctypes.c_float
print f.mult(ctypes.c_float(34.3))
print 3.7 * 34.3
Hierbei kann dann sechsrads Original-DLL

Code: Alles auswählen

#include <math.h>

float mult(float n) {
float a;
a = n * 3.7;
return a;
}
verwendet werden.
MfG
HWK