Dieses Informationsfenster platziere ich freiwillig und unentgeldlich zur Unterstützung meiner Schwester bei ihrem Jobwechsel. Es wird nur für eine begrenzte Zeit angezeigt und kann ausgeblendet werden. Ich hoffe, dass die Aktion keinen meiner Leser zu sehr stört. Zum Ausblenden werden Cookies benutzt, diese müssen aktiviert und für diese Seite erlaubt werden. Werden die Cookies gelöscht oder die Seite auf einem anderen Gerät betrachtet, erscheint das Informationsfenster wieder und muss erneut geschlossen werden.

Information

Katja Schurig sucht neue berufliche Herausforderungen!

Liebe Leser, ich habe hier einen Geheimtipp für euch:
Katja Schurig
Katja Schurig, berufserfahren und kampferprobt in den Bereichen Veranstaltungsmanagement und -verkauf, Personalwesen, Sales & Marketing sowie Tourismus, will sich neuen beruflichen Herausforderungen stellen. Wer mit viel Energie umgehen kann und auf der Suche nach einer professionellen Fachkraft ist (oder jemanden kennt, der jemanden kennt), der findet ihr Profil nebst Kontaktdaten auf: Xing
Edit Comment
IT-Stuff, Tutorials, Software, Internet, Unterhaltung Willkommen auf IMA

Ausführbare Dateien mit pestudio untersuchen

Letztens hat ein Leser in meinem Artikel Skype Werbung entfernen einen guten Kommentar hinterlassen, hier zu sehen. Es ging darum, dass es doch sicherheitstechnisch sehr bedenklich sei, von mir entwickelte, ausführbare Dateien (seien es .exe oder .bat) zu starten. Diese gesunde Skepsis begrüße ich und versuche in meinen Artikeln doch den offenen Code und viel Hintergrundinformationen die nötige Transparenz zu schaffen, um diese Sorgen zu reduzieren.
Ausführbare Dateien bleiben jedoch immer ein Risiko für Computersysteme und sollten immer mit Vorsicht behandelt werden. In meiner Kommentar-Antwort hatte ich ein paar generelle Tipps dazu gegeben:

  • immer kritisch und skeptisch sein (vor allem bei Downloads im Netz)
  • immer Virenscanner seperat (per Rechtsklick meistens) über jeden Download schicken, obwohl sie auch im Hintergrund immer aktiv aufpassen
  • immer Dateigrößen prüfen, ob sie zu den erwarteten Inhalten passen (Musikdateien sind selten kleiner als 1MB)
  • immer den kompletten Dateinamen mit all seinen Dateiendungen überprüfen (Explorer Einstellungen setzen, dass Dateiendungen angezeigt werden) und prüfen, ob die Dateiendungen zum erwarteten Dateityp passen (Bilder haben selten .exe als Dateiende)
  • Vorsicht vor typischen Malware-Dateitypen: .exe, .dot, .dotm (sowieso alle Office Dateitypen mit einem „m“ am Ende), .vbs und weitere
  • im Verdachtsfall bei Online-Diensten wie VirusTotal hochladen und schauen, was diese analysieren

Diese Liste möchte ich heute noch um ein Tool ergänzen, dass an dieser Stelle ansetzt: pestudio. pestudio ist eine Analysesoftware, die ausführbare Dateien auf Binärcode-Ebene untersuchen und alle Erkentnisse „leicht lesbar“ und übersichtlich auflisten. Dabei wird die Datei nicht ausgeführt, der Vorgang ist also gefahrenfrei.
Besonders praktisch ist die Schnittstelle zum VirusTotal Dienst, die in der Software verbaut ist, sodass jede analysierte Datei auch an diesen Dienst geschickt und dort bewertet wird. Das kann auch für PC-Ottonormalnutzer besonders hilfreich sein, weil dafür nicht extra der Browser geöffnet und die VirusTotal Homepage geöffnet werden muss. pestudio kann sogar in das Rechtsklick-Kontextmenü integriert werden, eine entsprechende .reg-Datei liegt bei. (Leider haben die Entwickler hier gepfuscht: in der Reg-Datei ist der feste Pfad „C:/pestudio/pestudio.exe“ verbaut, der Weg über das Rechtsklick funktioniert also nur, wenn das Programm dort liegt oder man den Pfad der .reg vor dem Import anpasst.)
Davon abgesehen eignet sich die Software jedoch eher für fortgeschrittenere PC-Anwender, da die Informationen nur mit etwas Hintergrundwissen eingeschätzt werden können.

Im folgenden habe ich mal die Dateien des Skype Posts analysiert: disableSkypeAds.bat und disarmSkypeConfigs.ps1.
analyse-executable-files-pestudio-skype2analyse-executable-files-pestudio-skype1

Sieht erwartungsgemäßig unspannend aus – sind schließlich auch keine ausführbaren Dateien und somit werden die einzelnen Codezeilen fast fehlerfrei als Strings erkannt.

Ausführbare Dateien sind jedoch wesentlich komplexer und enthalten viel mehr Funktionalitäten, die vom Programm vielleicht auch gar nicht genutzt werden. Die .exe Datei aus meinem letzten Beitrag, dem Swords and Souls Bot, sieht beispielsweise verhältnismäßig gruselig aus:
analyse-executable-files-pestudio-bot-exe
Das liegt hauptsächlich daran, wie ich mit AutoIt ausführbaren Dateien kompiliere. Beispielsweise lasse ich den Code von benötigten Bibliotheken in die .exe Datei mergen, damit ich meine Programme nicht mit zusätzlichen .dll (oder anderen) Dateien ausliefern muss. Das bläht natürlich die .exe Datei auf und plötzlich hätte diese, laut pestudio, sogar die Fähigkeit, FTP Verbindungen aufzubauen 😀

Für mich trotzdem ein spannendes Tool, mit dem ich bestimmt gerne mal ein paar fremde Dateien analysiere, die man im Netz manchmal so zugespielt bekommt 😉
Also halten wir fest: Immer schön skeptisch und vorsichtig bleiben.


Worum geht’s?

swords-and-souls-iconIch stelle kurz und knackig meinen in AutoIt 3 programmierten aktiven Bot für das Browserspiel Swords and Souls vor. Dieser ist hauptsächlich dafür da, Arena-Stages zu farmen. Außerdem nutzt er aktiv (und clever) alle Skills, leert regelmäßig die Bank, tauscht Kleeblätter ein, kauft EXP und speichert zwischendurch. Er könnte also ohne Probleme über Stunden durchlaufen und den Charakter damit verbessern.

Funktionen

Steuerung durch Shortcuts:

  • Shift+Alt+A – In der Arena kämpfen
  • Shift+Alt+M – Bank leeren und Kleeblätter eintauschen
  • Shift+Alt+O – Zurück zur Übersicht gehen, um andere Funktionen zu nutzen
  • Shift+Alt+H – Diese Hilfe noch einmal zeigen
  • Shift+Alt+X / ESC – Programm beenden

Farmingpausen mit:

  • Speichern
  • Gold von der Bank einsammeln
  • Kleeblätter eintauschen
  • Erfahrung für Gold kaufen (erst nach dem Besiegen des Endgegners möglich)

Cleveres Skillsystem:

  • Priorität 1: Heilen (Skill 5): nur wenn HP unter 40%
  • Priorität 2: Schildschlag (Skill 2): in Bosskämpfen immer benutzen, bei normalen Gegnern nur wenn dessen HP > 25%
  • Priorität 3: Schutzschild (Skill 4): immer wenn möglich
  • Priorität 4: Gift (Skill 3): in Bosskämpfen immer benutzen, bei normalen Gegnern nur wenn dessen HP > 50%
  • Priorität 5: Hack’n’Slay (Skill 6): in Bosskämpfen immer benutzen, bei normalen Gegnern nur wenn dessen HP > 50%
  • Priorität 6: Doppelangriff (Skill 1): in Bosskämpfen immer benutzen, bei normalen Gegnern nur wenn dessen HP > 25%

Screenshots

Die Einrichtung muss direkt nach dem Start geschehen und erfolgt durch einen Klick auf den obersten linkesten Pixel des Spielfensters:
swords-and-souls-bot-start-prepare-topleft-corner-pixel
Das Browserfenster muss so groß sein, dass das Spiel komplett angezeigt wird. Am Anfang werden in einem Hilfedialog alle Funktionen gelistet:
swords-and-souls-bot-start-help
In der Arena wird zuerst das Level für das Farming gewählt, anschließend noch ob das Pausenfeature genutzt werden soll und schon legt der Bot los:
swords-and-souls-bot-arena-start
swords-and-souls-bot-arena-fight

Video

YouTube Preview Image

Download und Code

Hier gibts den Bot als Download für 32/64bit Windows und, falls jemand den Bot weiterentwickeln oder anpassen möchte, den kompletten Code 1:1.

Download section
swords-and-souls-bot.exe (32bit)
swords-and-souls-bot_x64.exe (64bit)

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=swords-and-souls-bot.ico
#AutoIt3Wrapper_Compile_Both=y
#AutoIt3Wrapper_Res_Description=AutoIt Bot for the browsergame "Swords and Souls", developed by Hannes Schurig in 2016
#AutoIt3Wrapper_Res_Fileversion=1.0
#AutoIt3Wrapper_Res_LegalCopyright=Hannes Schurig
#AutoIt3Wrapper_Res_Language=1031
#AutoIt3Wrapper_Add_Constants=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <Misc.au3>
#include <Array.au3>
#include <MsgBoxConstants.au3>

AutoItSetOption("SendKeyDelay", 40)
AutoItSetOption("SendKeyDownDelay", 40)
AutoItSetOption("MouseClickDelay", 40)
AutoItSetOption("WinTitleMatchMode", 2)
AutoItSetOption("MouseCoordMode", 1)

$noCoords = True
Local $ol[2]
$i = 0 ; fight counter
$survival = False
Local $levelcoords[2] = [0,0]
$clickCriticals = True
$pauseFarming = True
$pauseFarmingAfterXMatches = 2

HotKeySet("{Esc}", "exitnow") ; ESC
HotKeySet("+!x", "exitnow") ; Shift+Alt+X
HotKeySet("+!a", "arenaFight") ; Shift+Alt+A
HotKeySet("+!m", "museum") ; Shift+Alt+M
HotKeySet("+!o", "overview") ; Shift+Alt+O
HotKeySet("+!h", "help") ; Shift+Alt+H

Func exitnow()
	Exit
EndFunc

; prepare
WinActivate("Swords")
Sleep(300)
MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONINFORMATION + $MB_OK,"Ecke oben links anklicken","Klicke in den obersten linkesten Pixel des Spiels.")
While $noCoords
		If _IsPressed("01") Then
		$ol = MouseGetPos()
		ConsoleWrite("####### Koords: " & $ol[0] & " " & $ol[1] & @CRLF)
		$noCoords = False
		EndIf
WEnd

If checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52) Then
		ConsoleWrite("####### Location: Map Overview" & @CRLF)
		MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONINFORMATION + $MB_OK, "Deine Position", "Du befindest dich in der Übersichtskarte.")
EndIf

If checkSingleCoordWithColor($ol[0]+394, $ol[1]+460, 0x745818) Then
		ConsoleWrite("####### Location: Museum" & @CRLF)
		MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONINFORMATION + $MB_OK, "Deine Position", "Du befindest dich im Museum.")
EndIf

If checkSingleCoordWithColor($ol[0]+66, $ol[1]+64, 0xC8B05E) Then
		ConsoleWrite("####### Location: Arena" & @CRLF)
		MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONINFORMATION + $MB_OK, "Deine Position", "Du befindest dich in der Arena.")
EndIf

help()

Func help()
	MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONINFORMATION + $MB_OK, "Hilfe", "Du kannst folgende Shortcuts nutzen:" & @CRLF & _
	"Shift+Alt+A - In der Arena kämpfen" & @CRLF & _
	"Shift+Alt+M - Bank leeren und Kleeblätter eintauschen" & @CRLF & _
	"Shift+Alt+O - Zurück zur Übersicht gehen, um andere Funktionen zu nutzen" & @CRLF & _
	"Shift+Alt+H - Diese Hilfe noch einmal zeigen" & @CRLF & _
	"Shift+Alt+X / ESC - Programm beenden" & @CRLF & _
	"Dies ist ein Maus/Tastatur-Bot. Der PC ist, während der Bot läuft, nicht direkt benutzbar.")
EndFunc

Func overview()
	; force-go to overview map
	While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
		MouseClick("left", $ol[0]+25, $ol[1]+20,1)
		Sleep(800)
	WEnd
EndFunc

Func arenaFight()
	; check for overview map
	If checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52) Then
		; go to arena
		MouseClick("left",$ol[0]+235, $ol[1]+165,1)
	; check for arena
	ElseIf checkSingleCoordWithColor($ol[0]+66, $ol[1]+64, 0xC8B05E) Then
		; continue
	Else
		; force-go to overview map
		While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
			MouseClick("left", $ol[0]+25, $ol[1]+20,1)
			Sleep(800)
		WEnd
		; go to arena
		MouseClick("left",$ol[0]+235, $ol[1]+165,1)
	EndIf

	; level input
	$level = InputBox("Welches Level?", "Bitte gib das Level ein, dass gefarmt werden soll." & @CRLF & _
	"Möglich Eingaben sind '1' - '30', 'survival' und 'final'", "", " M", 280, 150)

	If $level > 0 And $level <= 10 Then
		$levelcoords[0] = $ol[0] + 119 + (($level - 1)*62)
		$levelcoords[1] = $ol[1] + 292
	ElseIf $level > 10 And $level <= 20 Then
		$levelcoords[0] = $ol[0] + 97 + (($level - 11)*66)
		$levelcoords[1] = $ol[1] + 334
	ElseIf $level > 20 And $level <= 30 Then
		$levelcoords[0] = $ol[0] + 75 + (($level - 21)*71)
		$levelcoords[1] = $ol[1] + 392
	ElseIf $level = "final" Then
		$levelcoords[0] = $ol[0] + 489
		$levelcoords[1] = $ol[1] + 482
	ElseIf $level = "survival" Then
		$levelcoords[0] = $ol[0] + 339
		$levelcoords[1] = $ol[1] + 456
		$survival = True
	Else
		MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONERROR + $MB_OK, "Falsche Eingabe", "Die Eingabe konnte nicht verwertet werden." & @CRLF & _
		"Der Bot setzt sich zurück, anschließend kannst Du erneut den Arena-Modus starten.")
		; force-go to overview map
		While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
			MouseClick("left", $ol[0]+25, $ol[1]+20,1)
			Sleep(800)
		WEnd
		Sleep(1000)
		Return
	EndIf

	If $levelcoords[0] == 0 Then
		MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONERROR + $MB_OK, "Unerwarteter Fehler", "Der Bot setzt sich zurück, anschließend kannst Du erneut den Arena-Modus starten.")
		; force-go to overview map
		While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
			MouseClick("left", $ol[0]+25, $ol[1]+20,1)
			Sleep(800)
		WEnd
		Sleep(1000)
		Return
	EndIf

	; pause farming regulary after some matches - save, grab income, turn in cloverleafs frequently, get exp for gold?
	$save = MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONQUESTION + $MB_YESNO, "Farming mit Pausen?", "Soll der Bot während des Farmens weitere hilfreiche Aufgaben übernehmen? Folgende Aufgaben würde der Bot alle " & $pauseFarmingAfterXMatches & " Matches ebenfalls übernehmen:" & @CRLF & _
	"- Speichern" & @CRLF & _
	"- Gold von der Bank einsammeln" & @CRLF & _
	"- Kleeblätter eintauschen" & @CRLF & _
	"- Erfahrung für Gold kaufen (erst nach dem Besiegen des Endgegners möglich)", "", " M")
	If $save = $IDYES Then
		$pauseFarming = True
	Else
		$pauseFarming = False
	EndIf

	; arena:
	while 1
		WinActivate("Swords")
		Sleep(1200)

; ------------- MANAGING MATCHES --------------------------------------------------

		; lost/survival done, retry
		If checkSingleCoordWithColor($ol[0] + 351, $ol[1] + 326, 0x5A3D1D) Then
			MouseClick("left",$ol[0] + 351, $ol[1] + 326, 1)
			$i += 1
		EndIf

		; survival start
		If $survival And checkSingleCoordWithColor($ol[0]+292, $ol[1]+175, 0x938D6F) Then
			; click survival
			MouseClick("left", $levelcoords[0], $levelcoords[1], 1)
			Sleep(500)
			; click "start"
			MouseClick("left", $levelcoords[0], $levelcoords[1], 1)
			Sleep(1500)
		EndIf

		; survival ended, "ok"
		If $survival And checkSingleCoordWithColor($ol[0] + 426, $ol[1] + 448, 0x5D3F1D) Then
			MouseClick("left", $ol[0] + 426, $ol[1] + 448, 1)
			Sleep(1000)
		EndIf

		; final ended, scarecrow talk
		If checkSingleCoordWithColor($ol[0] + 360, $ol[1] + 511, 0xE6DFC7) Then
			MouseClick("left", $ol[0] + 360, $ol[1] + 511, 1)
			Sleep(1000)
		EndIf

		; normal match start
		If checkSingleCoordWithColor($ol[0]+292, $ol[1]+175, 0x938D6F) Then
			MouseClick("left", $levelcoords[0], $levelcoords[1], 1)
		EndIf

		; normal match finished, continue
		If checkSingleCoordWithColor($ol[0]+378, $ol[1]+454, 0xFFFFFF) Then
			MouseClick("left", $ol[0]+378, $ol[1]+454, 1)
			$i += 1
		EndIf

; ------------- FIGHTING --------------------------------------------------

		; Skill 5 - Healing
		; check if available
		If checkSingleCoordWithColor($ol[0]+490, $ol[1]+560, 0xFFE7C1) Then
			; just use if u're below 50% health
			If checkSingleCoordWithColor($ol[0]+284, $ol[1]+453, 0x730520) Then
				; enough health
			Else
				Send("5")
			EndIf
		EndIf

		; Skill 2
		; check if available
		If checkSingleCoordWithColor($ol[0]+306, $ol[1]+565, 0xFFE7C1) Then
			; if in boss battle - use it anytime
			If checkCoordRangeWithColor($ol[0]+404, $ol[1]+451, $ol[0]+442, $ol[1]+469, 0xFFD23E) Then
				Send("2")
			Else
				; if not: only if enemy health 25% or more
				If checkSingleCoordWithColor($ol[0]+485, $ol[1]+453, 0x730520) Then
				Send("2")
				EndIf
			EndIf
		EndIf

		; Skill 4
		; if available
		If checkSingleCoordWithColor($ol[0]+430, $ol[1]+560, 0xFFE7C1) Then
			Send("4")
		EndIf

		; Skill 3 - Poison
		If checkSingleCoordWithColor($ol[0]+369, $ol[1]+552, 0xFFE7C1) Then
			; if in boss battle - use it anytime
			If checkCoordRangeWithColor($ol[0]+404, $ol[1]+451, $ol[0]+442, $ol[1]+469, 0xFFD23E) Then
				Send("3")
			Else
				; if not: only if enemy health 50% or more
				If checkSingleCoordWithColor($ol[0]+515, $ol[1]+453, 0x730520) Then
				Send("3")
				EndIf
			EndIf
		EndIf

		; Skill 6 - Slashing
		If checkSingleCoordWithColor($ol[0]+548, $ol[1]+561, 0xFFE7C1) Then
			; if in boss battle - use it anytime
			If checkCoordRangeWithColor($ol[0]+404, $ol[1]+451, $ol[0]+442, $ol[1]+469, 0xFFD23E) Then
				Send("6")
			Else
				; if not: only if enemy health 50% or more
				If checkSingleCoordWithColor($ol[0]+515, $ol[1]+453, 0x730520) Then
				Send("6")
				EndIf
			EndIf
		EndIf

		; Skill 1
		; if available
		If checkSingleCoordWithColor($ol[0]+249, $ol[1]+559, 0xFFE7C1) Then
			; if in boss battle - use it anytime
			If checkCoordRangeWithColor($ol[0]+404, $ol[1]+451, $ol[0]+442, $ol[1]+469, 0xFFD23E) Then
				Send("1")
			Else
				; if not: only if enemy health 25% or more
				If checkSingleCoordWithColor($ol[0]+485, $ol[1]+453, 0x730520) Then
				Send("1")
				EndIf
			EndIf
		EndIf

; ------------- REST --------------------------------------------------

		; save every 5th fight
		If $pauseFarming And $i >= $pauseFarmingAfterXMatches Then
			Sleep(1000)
			; force-go to overview map
			While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
				MouseClick("left", $ol[0]+25, $ol[1]+20,1)
				Sleep(800)
			WEnd

			museum()
			expForGold()

			; go to arena
			MouseClick("left",$ol[0]+235, $ol[1]+165,1)
			$i = 0
			Sleep(1000)
		EndIf

	WEnd
EndFunc

Func museum()
	; force-go to overview map
	While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
		MouseClick("left", $ol[0]+25, $ol[1]+20,1)
		Sleep(800)
	WEnd

	; go to museum
	MouseClick("left",$ol[0]+329, $ol[1]+459, 1)
	Sleep(1000)

	; get cash
	MouseClick("left",$ol[0]+479, $ol[1]+431, 1)
	Sleep(1000)

	; auto-invest clovers if u're in the room and have some
	While checkSingleCoordWithColor($ol[0]+651, $ol[1]+311, 0xE8E5C2)
		MouseClick("left",$ol[0]+651, $ol[1]+311,1)
		MouseMove($ol[0]+551, $ol[1]+211, 1)
		Sleep(2000)
	WEnd
	Sleep(1000)

	; get cash again
	MouseClick("left",$ol[0]+479, $ol[1]+431, 1)
	Sleep(1000)

	; force-go to overview map
	While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
		MouseClick("left", $ol[0]+25, $ol[1]+20,1)
		Sleep(800)
	WEnd
	Sleep(1000)
EndFunc

Func expForGold()
	; force-go to overview map
	While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
		MouseClick("left", $ol[0]+25, $ol[1]+20,1)
		Sleep(800)
	WEnd

	; go to shop
	MouseClick("left",$ol[0]+528, $ol[1]+213, 1)
	Sleep(1000)

	For $x = 1 To 30 Step +1
		MouseClick("left",$ol[0]+396, $ol[1]+548,1)
		Sleep(300)
	Next

	; force-go to overview map
	While Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52)
		MouseClick("left", $ol[0]+25, $ol[1]+20,1)
		Sleep(800)
	WEnd
	Sleep(1000)
EndFunc

Func training()

	; this feature is not ready yet
	Return

	; check for overview map
	If Not checkSingleCoordWithColor($ol[0]+578, $ol[1]+400, 0xB65D52) Then
		MsgBox($MB_TOPMOST + $MB_SETFOREGROUND + $MB_DEFBUTTON1 + $MB_ICONINFORMATION + $MB_OK, "Übersichtskarte", "Bitte gehe in die Übersichtskarte, um die Botfunktionen zu starten.")
		Return
	EndIf

	;training crit:
	While 1
		If checkSingleCoordWithColor(685, 382, 0xffffff) Then
			MouseClick("left")
			Sleep(700)
			MouseClick("left")
			$i +=1
			ContinueLoop
		EndIf
		If checkSingleCoordWithColor(789, 381, 0xffffff) Then
			MouseClick("left")
			Sleep(700)
			MouseClick("left")
			$i +=1
			ContinueLoop
		EndIf
		If $i>50 Then
			; quit crit training
			MouseClick("left", $ol[0]+25, $ol[1]+20, 1)
			Sleep(5000)
			; quit training room & go to map
			MouseClick("left", 298, 123, 1)
			Sleep(3000)
			; go to training room
			MouseClick("left", 673, 415, 1)
			Sleep(3000)
			$i = 0
			; start crit training
			MouseClick("left", 872, 147, 1)
			Sleep(3000)
		EndIf
	WEnd

	; training attack:
	While 1
		If Not checkSingleCoordWithColorV(326, 455, 0xCC9362, 3) Then
			Send("{LEFT}")
			ContinueLoop
		EndIf
		If Not checkSingleCoordWithColorV(560, 466, 0xAD794C, 4) Then
			Send("{RIGHT}")
			ContinueLoop
		EndIf
		If Not checkSingleCoordWithColorV(563, 541, 0x926743, 3) Then
			Send("{Down}")
			ContinueLoop
		EndIf
		If Not checkSingleCoordWithColorV(511, 373, 0xCF996B, 3) Then
			Send("{Up}")
			ContinueLoop
		EndIf
		If Not checkSingleCoordWithColorV(322, 424, 0xD4A57D, 3) Then
			Send("{LEFT}")
			ContinueLoop
		EndIf
	WEnd
EndFunc

Func checkSingleCoordWithColor($x, $y, $color)
		Return IsArray(PixelSearch($x-3, $y-3, $x+3, $y+3, $color, 3))
EndFunc

Func checkSingleCoordWithColorV($x, $y, $color, $variation)
		Return IsArray(PixelSearch($x-3, $y-3, $x+3, $y+3, $color, $variation))
EndFunc

Func checkCoordRangeWithColor($x1, $y1, $x2, $y2, $color)
		Return IsArray(PixelSearch($x1-3, $y1-3, $x2+3, $y2+3, $color, 3))
EndFunc

; keep-alive for shotcuts
while 1
	sleep(100000000)
WEnd

In verschiedensten Situationen kann es hilfreich sein, wenn man einzelne Internetseiten oder Internetdienste immer im Vordergrund, „always on top“, hätte. Web-Chats, Spiele, Seiten mit hochaktuellen Informationen – anstatt immer zwischen Browsertabs zu switchen oder direkt einen halben Bildschirm zu besetzen, könnte ein kleines Overlay hilfreicher sein.

Ich möchte kurz zwei Chrome Plugins zeigen, die das schnell und einfach können:
Always On Top (Panel) und Always On Top (App)


Anschließend bieten die Extensions zwei Arten von „Always-On-Top-Fenstern“: Panels und Apps. Diese sehen zwar fast gleich aus, verhalten sich aber anders.

Screenshots:
2 Panels:
chrome-internetseiten-always-on-top-immer-im-vordergrund-cmc-markets
chrome-internetseiten-always-on-top-immer-im-vordergrund-clicker-heroes-game

App:
chrome-internetseiten-always-on-top-immer-im-vordergrund-chat

Panels:
Die aufgerufene Internetseite wird immer dann im Vordergrund gehalten, wenn sie in der unteren rechten Ecke des Monitors angedockt wird. Wird das Panel von dort weggezogen, verhält es sich ähnlich wie ein normales Browserfenster (nur ohne die üblichen Steuerelemente und Symbolleisten). Damit dieses Panel so funktioniert, muss die Funktion „Steuerfelder aktivieren“ in chrome://flags aktiviert werden.
Vorteil ist, dass ihr flexibel zwischen always-on-top und normalem Verhalten wechseln könnt, allein durch das Verschieben des Panels. Außerdem sind alle installierten Chrome Extensions (wie z.B. der Werbeblocker) in einem Panel aktiv. Nachteil ist, dass das Panel keinen Zugriff auf an den PC angeschlossene Peripherie (Mikrofon, Webcam) hat, weder über Flash noch modernere Webtechnologien.

Apps:
Die zweite Art sind „Apps“, die genauso schlank aussehen wie Panels, allerdings immer im Vordergrund sind – unabhängig von ihrer Position. Außerdem haben sie gegenüber Panels den Vorteil, dass Mikrofon, Webcam und andere Technik genutzt werden kann. Nachteilig ist, dass installierte Extensions in diesem Fenster nicht benutzt werden.
Zusätzlich wird ein kleines Icon neben alle eingebetteten Frames und Medien angezeigt, welche dann direkt in einem App-Fenster im Vordergrund geöffnet werden.
chrome-internetseiten-always-on-top-immer-im-vordergrund-videopopup

Kurzfassung:

Typ Always-On-Top Peripherie Extensions Media-Popup
Panel Sowohl als auch red-x green-check red-x
App green-check green-check red-x green-check


Skype Werbung entfernen

Hintergrundwissen

Skype Werbung nervt. Wie lässt sie sich entfernen? Wer nur an der Lösung interessiert ist, schaut einfach zur nächsten Überschrift.
Die Werbung wird bei Skype über zwei zusammenhängende Mechanismen eingebaut und abgesichert. Sie zu entfernen erfordert, beide Mechanismen auszuhebeln.

Skype Konfigurationsdateien ändern:
Im Ordner %AppData%\Skype (Win7: C:\Users\[user]\AppData\Roaming\Skype) gibt es für jeden Nutzer, der sich schon einmal an dem PC über Skype eingeloggt hat, einen Ordner, der so heißt wie der Skype Benutzer. In diesem Ordner gibt es eine config.xml, die ein paar interessante Zeilen enthält:
<adverteastrailsenabled>1</adverteastrailsenabled>
<advertplaceholder>1</advertplaceholder>
<disablecookies>0</disablecookies>
<allowdebugdatacollection>1</allowdebugdatacollection>

Die enthaltenen Werte müssen natürlich nur umgekehrt werden.

Es reicht jedoch nicht, diese Datei zu ändern…

Skype Kontrollserver deaktivieren:
Microsoft hat eine weitere Absicherung eingebaut, die bei jedem Start von Skype die Konfigurationsdateien auf unerlaubte Änderungen prüft und diese rückgängig macht. Dafür verbindet sich Skype bei jedem Start mit zwei Skype Servern und ändert die werberelevanten Stellen der config.xml. Diese Server müssen blockiert werden.
Das geht entweder über die hosts-Datei des Windows-Systems oder – etwas sauberer – über das definieren dieser Server als nicht-vertrauenswürdige bzw. „eingeschränkte Sites“ in den Windows Internetoptionen:
http://apps.skype.com
https://apps.skype.com
http://g.msn.com
https://g.msn.com

skype-werbung-entfernen-server-domains
Das geht coolerweise auch relativ einfach über die Registry.
Die Kombination der geblockten Server und geänderten Konfigurationsdatei sollte die Werbung aus Skype verbannen.

Tracing deaktivieren:
In einem Internetpost habe ich gelesen, dass die Datei RtmPal.dll aus dem Skype-Verzeichnis hauptsächlich für das Tracing, also die Beobachtung und Analyse des Nutzers, verantwortlich sein soll. Diese kann man ohne Bedenken „deaktivieren“, also löschen bzw. umbenennen.

Mein Lösungsscript vereint alle drei Anpassungen und deaktiviert somit Werbung und Tracing in Skype:

Lösung

Ich habe eine Lösung programmiert, die Skype Werbung und Tracing per Doppelklick deaktiviert. Die Lösung funktioniert nur bei Windows, sollte sowohl bei 32 als auch 64bit laufen und Windows- sowie Skype-versionsunabhängig sein.

Download section
Download (.zip, 2MB)

Der Download enthält 3 Dateien:
disableSkypeAds.batWird per Doppelklick aufgerufen, beendet Skype, importiert setSkypeAdDomainsAsRestricted.reg, führt disarmSkypeConfigs.ps1 aus, benennt RtmPal.dll um
setSkypeAdDomainsAsRestricted.reg – definiert die Domains apps.skype.com und g.msn.com als nicht vertrauenswürdig in den Windows Internetoptionen und blockiert diese damit (sauberer als über die hosts Datei)
disarmSkypeConfigs.ps1 – durchsucht das Skype Programmverzeichnis nach allen „config.xml“ Konfigurationsdateien (es gibt eine pro Skype Nutzer) und entfernt die für Werbung relevanten Stellen

Ein Doppelklick auf disableSkypeAds.bat müsste in etwa folgendes Bild zeigen:
skype-werbung-entfernen-script

Skype vorher und nachher, wenn alles funktioniert:
skype-werbung-entfernen-entfernt


Whatsapp „Chat Heads“ mit Dashdow

whatsapp-chat-heads-facebookIch wurde letztens gefragt, ob es diese „Chat Heads“ des Facebook Messengers auch für Whatsapp gibt. Nach etwas Sucherei fand ich eine App, die kostenlos und ohne Root-Rechte vom Look & Feel trotzdem sehr nah an das Original kommt: Dashdow What App – leider ein ziemlich blöder App Name. Einmal installiert, wird die App jedoch unter dem korrekteren Titel „Dashdow für Whatsapp“ geführt.

Dashdow What App
Entwickler: Stallware
Preis: Kostenlos

Die App funktioniert sehr einfach: installieren, starten, der App die Zugriffsberechtigung auf die Benachrichtigungen geben und das wars – schon erscheinen die Profilbild-Köpfe bei eingehenden Nachrichten:
whatsapp-chat-heads-ingame-multiplewhatsapp-chat-heads-single-chathead

Wie auch von Facebook bekannt, lassen sich die Chat Heads verschieben (sind aber immer am Bildschirmrand angedockt) und durch Ziehen in einen Papierkorb, der beim Drag&Drop erscheint, entfernen. Sie funktionieren tadellos aus jeder App und Spielen heraus. Im Gegensatz zu normalen Benachrichtigungen zeigt eine Vorschau Nachrichtentext auch bei mehreren Nachrichten aus mehreren Chats. Statt „4 Nachrichten aus 2 Chats“ erfährt man nun also detaillierter, wer was wo geschrieben hat – und kann damit ggf. besser entscheiden, ob das Spielen unterbrochen werden sollte 😉


Android 6: System UI Tuner freischalten

Android 6.0 verbreitet sich weiter, wenn auch schleppend. Nexus Geräte und ein paar Modelle anderer Hersteller können „Marshmallow“ mittlerweile nutzen. Es gibt ein neues Feature, dass ich gerne kurz zeigen möchte:

System UI Tuner aktivieren

Wie das bei Android gerne so ist, muss man den versteckten Systembereich erst durch eine bestimmte Aktion freischalten. Dazu müsst ihr einfach nur eine längere Zeit (ca. 2-3 Sekunden) auf das Zahnradsymbol in eurem (ausgeklappten) Infobereich drücken. Das Bild zeigt das Android Zahnradsymbol, welches durch langes Drücken den System UI Tuner freigeschaltet hatDas Zahnrad beginnt sich dann zu drehen und zeigt dadurch, dass die Funktion freigeschaltet wurde. Anschließend befindet sich neben dem Symbol auch noch ein kleiner Schraubenschlüssel:

Was kann der System UI Tuner?

Das Bild zeigt den neuen Einstellungsmenüpunkt "System UI Tuner", der freigeschaltet wurde
In den Einstellungen gibt es jetzt einen neuen Menüpunkt „System UI Tuner“, der folgende Möglichkeiten bietet:

  1. Mit dem ersten Menüpunkt könnt ihr die Quick-Launch-Kacheln eurer Schnelleinstellungen anpassen. Die Funktion ist jedoch noch relativ unausgereift.
  2. Aus der Statusleiste können bestimmte Symbole ausgeblendet werden
  3. android-6-akku-quick-links-system-ui-tuner-features-battery-percentDie Anzeige des Akkustandes als Prozentzahl über dem Akkusymbol (Mein Favorit)
  4. Ein Android Demomodus, der bestimmte Anzeigen verändert, wenn er aktiviert wird

Links die Einstellungen der Statusleisten-Icons, rechts die Einstellungs-Widgets:
Android 6.0 System UI Tuner: Einstellungs-Widgets verändern Android 6.0 System UI Tuner: Statusicons verändern


Kurz notiert:
Dank PowerShell lassen sich bei Microsoft Exchange – in meinem Fall Exchange Online, also ein hosted Exchange – Änderungen gleich für mehrere oder sogar alle Nutzer ausführen. Vor allem bei Änderungen, die normalerweise nicht über die Adminoberfläche administrierbar sind, sondern über den Nutzer direkt eingestellt werden müssen, lohnt sich das enorm.

Verbindung zu Exchange Online in PowerShell herstellen

In PowerShell folgende Befehle nacheinander eingeben:

$UserCredential = Get-Credential

An dieser Stelle dann die Mail-Credentials eines Exchange Admins eingeben.

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection

Speichert die Verbindung zu Exchange Online mit den Credentials in ein Objekt

Import-PSSession $Session

Lädt das Session Objekt

Anschließend könnt ihr auf dem Exchange Befehle ausführen, beispielsweise Get-Mailbox:
microsoft-exchange-online-changes-to-multiple-or-all-users-get-mailbox

In den folgenden Beispielen soll die Abwesenheitsmeldung bzw. Automatische Antwort eingestellt werden. Diese Einstellung eines Nutzers lässt sich mit folgenden Befehl abrufen:

Get-MailboxAutoReplyConfiguration -Identity hs@barketing.de

Änderungen für einzelne Benutzer

Aktivieren ohne zeitliche Einschränkung:

Set-MailboxAutoReplyConfiguration -Identity hs@barketing.de -AutoReplyState Enabled -ExternalAudience All -ExternalMessage "Guten Tag<br>Bla bla bla, Urlaub bla.<br>Mit freundlichen Grüßen"

Aktivieren mit Start- und Endzeitpunkt:

Set-MailboxAutoReplyConfiguration -Identity hs@barketing -AutoReplyState Scheduled -StartTime "11/11/2013 00:00" -EndTime "11/13/2013 18:00" -ExternalAudience All -InternalMessage "Guten Tag<br>Bla bla bla, Urlaub bla.<br>Mit freundlichen Grüßen"

(via)

microsoft-exchange-online-changes-to-multiple-or-all-users-set-mailboxautoreply

Änderungen für mehrere/alle Benutzer

Anhand des Pipe-Operators | können wieder Ausgaben eines Befehls an den nächsten Befehl zur Weiterverarbeitung übergeben werden.
Alle Benutzer:

Get-Mailbox | Set-MailboxAutoReplyConfiguration -AutoReplyState Enabled -ExternalAudience All -ExternalMessage "Guten Tag<br>Bla bla bla, Urlaub bla.<br>Mit freundlichen Grüßen"

Über Get-Mailbox werden alle Mailkonten geladen und an den Set-Befehl übergeben, der dadurch keinen Identity-Parameter mehr braucht.
Hinweis: Die Massenverarbeitung dauert natürlich entsprechend lange – für die 30 Nutzer bei uns hat der Befehl 4 Minuten gebraucht. Also nicht ungeduldig werden.

Mit Benutzervorauswahl:

Get-User | where {$_.Department -eq "Sales"} | Get-Mailbox | Set-MailboxAutoReplyConfiguration -AutoReplyState Enabled -ExternalAudience All -ExternalMessage [...]

Somit werden Nutzer erst durch den where-Befehl gefiltert, deren Postfächer geladen und weitergegeben. (via)

Typisches Problem – es funktioniert nicht

Wichtig:
Damit AutoReply-Regeln tatsächlich auch funktionieren, müssen in den Mailkonten auch wirklich E-Mails eingehen.
Bei Konten, die ihre E-Mails nur via SMTP weiterleiten und keine lokale Kopie der Mails in ihrem Postfach empfangen, funktioniert das Auto-Reply deswegen nicht.
Neben den AutoReply-Einstellungen muss demnach auch die Einstellung, dass beim Weiterleiten der Mails eine lokale Kopie behalten werden soll, gesetzt werden.
microsoft-exchange-online-changes-to-multiple-or-all-users-check-forwarding-settings

Einen Überblick über die Weiterleitungseinstellungen aller Nutzer bekommt ihr mit diesem Befehl:

Get-Mailbox | FL DeliverToMailboxAndForward, ForwardingAddress, ForwardingSmtpAddress

Mit diesem schnellen Überblick könnt ihr euch entweder selbst die Nutzer raussuchen, die eine Weiterleitung eingerichtet haben jedoch keine lokalen Kopien in ihr Postfach kriegen (und somit auch keine Automatische Antwort abschicken).
Oder ihr nutzt einfach folgenden Befehl. Dieser aktiviert diese Einstellung der lokalen Kopie für alle Benutzer, die eine Weiterleitung (intern sowie extern) eingerichtet haben:

Get-Mailbox | Where {$_.ForwardingSmtpAddress -ne $Null -OR $_.ForwardingAddress -ne $Null} | Set-Mailbox -DeliverToMailboxAndForward $True

(via)




Admin

Sie möchten hier werben oder Sponsor auf längere Zeit werden? Ich garantiere Ihnen unschlagbare Preise bei meinen Besucherzahlen. Egal ob Banner, Textlinks oder andere Werbeformen. Informieren Sie sich bei mir unter werbung@hannes-schurig.de