Fehler im Programm BlueMaho

Plattformunabhängige GUIs mit wxWidgets.
Antworten
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Hi,

vielleicht kann mir jemand helfen?

Ich setze mich zur Zeit beruflich mit dem Thema Bluetooth Pentesting auseinander,
ich habe in diesem Zusammenhang ein sehr interessantes Programm entdeckt: BlueMaho (http://wiki.thc.org/BlueMaho)

Doch leider gibt dieses an der entscheidenden Operation einen Fehler aus. Dies geschieht immer dann wenn das Programm ein externes Script mit ein paar Variablen aufrufen möchte:

Ich wäre also über jede Hilfe sehr Dankbar.

Hier die Fehlermeldung:

wxPython: stdout/stderr

Traceback (most recent call last):
File "/home/jars/BlueMaho/bluemaho.py", line 444, in OnResult
self.OnNewDevFound(dev[2])
File "/home/jars/BlueMaho/bluemaho.py", line 384, in OnNewDevFound
cmd = self.cmd_onnewdev.replace('@bt_addr@', dev)
AttributeError: 'Frame_Main' object has no attribute 'cmd_onnewdev'

Hier der Inhalt des aufgerufenen Scripts(onnewdev.cmd):

#when new device found command (olny one line) executed

#@bt_addr@ = bt_addr

#@hci@ = hciN

#@hci_num@ = 0,1,2,..N

Eterm -e ./plugins/ussp-push/ussp-push --dev @hci_num@ @bt_addr@@9 ./plugins/ed__s.gif nya.gif



Hier das Prog selbst(bluemaho.py):

[Edit (Leonidas): Code ausgelagert.]
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Ich habe das Programm bereits unter verschiedenen Umgebungen ausgeführt (Ubuntu, Etch etc.), überall der selbe Fehler.....
Es muss ein Fehler im Programm-Code sein, ich hoffe ein erfahrener Programmierer kann mal ein Auge auf den Code werfen?

Ich bedanke mich im Vorraus.

Jannis
BlackJack

Naja die Meldung sagt's ja schon, es gibt auf dem `Frame_Main`-Objekt kein Attribut `cmd_onnewdev`, es wird aber versucht darauf zuzugreifen.

In der `OnCheckNewDev()`-Methode sollte das wahrscheinlich mal gesetzt werden, da wird nämlich die Rückgabe vom Einlesen der Datei einfach ignoriert.

Grunssätzlich sollte man Attribute alle in der `__init__()` schon an etwas sinnvolles binden, so dass das Objekt benutzbar ist. Attribute die nur bei bestimmten Aktionen entstehen, in anderen aber verwendet werden, fallen einem sonst manchmal sehr "interessant" auf die Füsse. :-)

Das ist jedenfalls eindeutig ein Bug im Programm, den man dem Autor melden sollte.
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Ich danke dir auf jeden Fall für den Hinweis :D

Doch leider bin ich absoluter Laie was das Programmieren in Python angeht und da es schwierig bis unmöglich ist dem Author des Programmes den BUG zu melden (kein WIKI, kein Bug-Tracking), muss ich das irgendwie selber fixen.....

und da kommt ihr ins Spiel :lol:

Also es wäre echt cool wenn du mir eine Idioten-kompatibele Anleitung geben könntest in welcher Zeile ich was ändern muß damit es funktioniert :oops:

Am besten wäre natürlich wenn du mir sagen könntest wie ich den Code ändern muß damit es "sauber" läuft also wie ich das Attriebut bereits im `__init__()` an etwas binde. Aber sollte das zu aufwändig sein wäre es schon ein Anfang wenn du mir das mit der `OnCheckNewDev()`-Methode genau erklärst.

Im 2. Schritt wäre es noch gut wenn mann mehr als eine Zeile Code in der onnwedev.cmd ausführen könnte.. aber nur wenn meine erste Anfrage nicht schon zu viele Umstände macht.

Jannis
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Der Author hat sicher eine Email Adresse angegeben, oder? Vllt gibt es die ja wirklich...
BlackJack

So auf die Schnelle habe ich keinen Autor entdecken können. Der will vielleicht nicht mit den Skriptkiddies in Verbindung gebracht werden, die dieses "Hackertool" verwenden. :-)
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Ja der Author hat offenbar kein Interesse daran kontaktiert zu werden.

Allerdings schreibt er auf der Internetseite des Programms :

8. ToDo (needed)

/!\ review all code by expert programmer (sorry, but python is not my motherlanguage)
/!\ fight threads.. or try to better understand them

Ich fasse das als Aufforderung auf den Code selbst zu überarbeiten und möchte euch deshalb um eure Mithilfe bitten.

Jannis
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Könnte klappen, ist ungetestet:
http://paste.pocoo.org/show/111568/

Code: Alles auswählen

373c373,374
< 	if defconf.flag_onnewdev: self.ReadCmdForOnNewDeviceFound(defconf.file_on_new_dev_found)
---
> 	if defconf.flag_onnewdev:
>             self.cmd_onnewdev = self.ReadCmdForOnNewDeviceFound(defconf.file_on_new_dev_found)
931c932
< app.MainLoop()
\ No newline at end of file
---
> app.MainLoop()
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Jannis PM an mich hat geschrieben:Hallo,

du scheinst viel erfahrung mit python zu haben deshalb wollte ich dich auf meinen Thread aufmerksam machen:
http://www.python-forum.de/post-131683.html

Ich wäre über jede Hilfe sehr dankbar.

Jannis
Danke, das ist zuviel der Ehre. Aber im Allgemeinen entscheiden die Forenteilnehmer eines Forums auf welche Threads sie antworten. Und ich - für meinen Teil - möchte nicht knapp 1000 Zeilen seltsamen Code eines zweifelhaften Tools durchforsten, in dem ich schon in den ersten 100 Zeilen auf Ungereimtheiten im Code stoße, die ich durch größere Umorganisation lösen würde. Die anderen hier scheinen auch wenig Lust zu haben in die Pflege des Codes anderer tiefer einzusteigen - kann mich aber auch irren ;-).

Außerdem versucht man Dir zu helfen und etwas Geduld solltest Du schon mitbringen.

Und ich mag es auch nicht, wenn man mir "Private Nachtrichten" zu öffentlichen Angelegenheiten schickt. Der Grund warum ich nicht direkt auf die PN anworte, ist dass ich vermute, dass Du das mehrfach gemacht hast / machen wirst und das solltest Du vielleicht nochmal überdenken ;-).

Gruß,
Christian
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

*meld* Mich auch :D

Aber da der Fehler schon genannt wurde, hab ich mal eine Zeile geändert, auch wenn er eindeutig gegen Netiquette verstoßen hat.
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

@Christian

Vielen Dank das du meinen umgang mit den "Privaten Nachrichten" auch sogleich "öffentlich anprangerst"

Ich habe sonst keinen großen Umgang mit Foren, ich dachte einfach das ich so noch ein paar Leute für den thread interessieren kann.

Sollte das in irgendeiner weise nicht korrekt gewesen sein möchte ich mich dafür entschuldigen.

Du schreibst das du den Fehler im Code durch "größere Umorganisation lösen würdest" , an deinen Vorschlägen währe ich sehr interessiert.

Aber da du ja wenig Lust hast dich mit dem Programm zu beschäftigen, ist wohl leider jede weitere Anfrage an Dich überflüssig.

Ich danke dir trotzdem für deinen Beitrag.


@audax

Vielen Dank, ich werde deinen Vorschlag sogleich ausprobieren und sobald wie möglich Bericht erstatten.

Jannis
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Ich habe die Änderungen getestet, es hat auch einmal funktioniert allerdings bekomme ich seit dem die Fehlermeldung:

Traceback (most recent call last):
File "./bluemaho.py", line 445, in OnResult
self.OnNewDevFound(dev[2])
File "./bluemaho.py", line 387, in OnNewDevFound
subprocess.Popen(cmd.split())
File "/usr/lib/python2.4/subprocess.py", line 543, in __init__
errread, errwrite)
File "/usr/lib/python2.4/subprocess.py", line 894, in _execute_child
executable = args[0]
IndexError: list index out of range

Ich hoffe Ihr könnt noch einmal einen Blick drauf werfen?

Vielen Dank

Jannis
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

janni09 hat geschrieben:Hallo,

du scheinst viel erfahrung mit python zu haben deshalb wollte ich dich auf meinen Thread aufmerksam machen:
http://www.python-forum.de/post-131683.html

Ich wäre über jede Hilfe sehr dankbar.

Jannis
Hallo Jannis!

Wenn mich ein Thema interessiert und ich genug Zeit dafür habe, dann versuche ich zu helfen. Das ist diesmal nicht der Fall.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Ja kann man nix machen, ich danke dir trotzdem
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

janni09 hat geschrieben: ich dachte einfach das ich so noch ein paar Leute für den thread interessieren kann.
Redest du auch einfach Leute auf der Straße an und fragst sie, ob sie dir mal eben beim Einkaufen helfen wollen?!
lunar

Dauerbaustelle hat geschrieben:
janni09 hat geschrieben: ich dachte einfach das ich so noch ein paar Leute für den thread interessieren kann.
Redest du auch einfach Leute auf der Straße an und fragst sie, ob sie dir mal eben beim Einkaufen helfen wollen?!
Es reicht ... zweimal wurde er bereits auf diese "Verfehlung" angesprochen und hat sich gleich beim erstmal glaubhaft dafür entschuldigt. Diesen Fehler jetzt so dumm breitzutreten, ist alles andere als fair ... :roll:
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Sehe ich auch so.

Zur Analyse des Tracebacks: Offenbar wird an subprocess etwas übergeben, was es nicht versteht. Entspricht cmd, dem, was Du erwartest? (So etwas kann man zur Not mit eingeschmuggelten Print-Befehlen testen.)

HTH,
Christian
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Das merkwürdige ist ja das ich nach den Änderungen von audax zwei erfolgreiche Tests durchgeführt habe und erst ab dem dritten Versuch dieser Fehler dauerhaft auftritt.

Im Grunde soll der Ablauf ja folgendermassen sein:

1. Das tool macht einen loop scan nach geräten mit dem ersten Bluetooth Adapter (hci0) - funktioniert
3. Wird ein neues Gerät (bspw. ein Handy) gefunden, soll ein Script auf dem zweiten BT-Adapter(hci1) ausgeführt werden (onnewdev.cmd) - wird zwar gestartet aber mit Fehlern (siehe vorheriger post)
4. An dieses Script sollen ein paar Variablen übergeben werden, die innerhalb des Scriptes genutzt werden können:
#@bt_addr@ = bt_addr
#@hci@ = hciN
#@hci_num@ = 0,1,2,..N

Die einzig wirklich wichtige ist hierbei "@bt_addr@" wobei es sich um die Bluetooth Geräte Adresse handelt (ähnlich einer MAC-Adresse).

Eigentlich ein relativ simpler Vorgang oder doch nicht?

Ich arbeite bereits eine ganze Weile mit den Kommandozeilen Tools, für die BlueMaho lediglich eine GUI darstellen soll und würde mich über eine Automatisierung des Vorganges sehr freuen, denn im Gegensatz zu den bekannten Sicherheits-Anwendungen im WLAN-Bereich braucht man beim Bluetooth extrem kurze reaktionszeiten.

MFG

Jannis
janni09
User
Beiträge: 9
Registriert: Dienstag 7. April 2009, 16:09

Da ich wie gesagt absoluter Laie in Sachen Python bin, kann ich selbst gut gemeinte Ratschläge nicht ohne weitere Hilfe bzw. genaue Anweisungen was zu tuen ist umsetzen.

Falls sich Jemand bereit erklärt den Programm Code zu überarbeiten, würde ich, falls die Arbeiten daran sehr umfangreich werden, diesem auch eine Aufwandtsentschädigung zahlen wollen.

Jannis
Antworten