schönes tool, dann mal ran an C++ / asm um die demos zu coden
Beiträge von WhiteLion
-
-
-
visu ? was ist das ? kann man das essen ?
-
gut,, gebe ich dir recht .... allerdings dürfte die variante von dir auch nicht funktionieren .... hmmm, böses dilemma
-
PainTain
Ich glaube nicht das deine variante funktioniert, da der Fehler ja aus der Zeile 1 (dein script) bereits entsteht und geworfen wird (siehe fehlermeldung und post 1).
da nützt es doch nichts, wenn ich danach eine abfrage mache, deswegen hab ich meine variante im post über deinem anders gestaltet,
bin mir aber nicht sicher dabei. -
Also evtl war es nicht so ganz deutlich ... das script ist hier nur auszugsweise gepostet, da viel zu lang .... es fordert natürlich per #RequireAdmin die entsprechenden rechte an. daran scheint es nicht zu liegen. leider trat das problem nur einmal/sich immer wiederholen bei jemanden auf. ich möchte natürlich verhindern das es erneut bei anderen passiert.
[autoit]
deshalb möchte ich den fehler möglichst abfangen, weiss aber nicht wie bzw ob es überhaupt geht die besagte fehlermeldung abzufangen.
wäre das eine mögliche lösung ?
[/autoit]
If Not IsObj("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") Then
;MsgBox(0, "FEHLER", "Ist kein Objekt.")
return 0
Else
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") ;hier cracht es!
....
EndIf -
hallo community!
Ich benutze die Funktion _GetRegValues von BugFix .... leider hab ich ein Problem, welches ich einfach nicht reproduzieren konnte, ausser auf dem Rechner eines Freundes per Teamviewer.
Ich habe keine ahnung warum er dort immer wieder mit folgender fehlermeldung crashte:
http://puu.sh/2FDJJ.jpg (Error: Variable must be type object)ich benötige tipps wie ich das ganze am glücklichsten abfange, da ich nicht erwarte, dass jemand einen fehler in dieser funktion bzw an dieser stelle ausmachen kann und andererseits auch keinen fehler beim
abfangen des fehlers machen möchte.
der Ursprung für dem Fehlermeldung liegt genau in der Zeile:
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")hier benutze ich die Funktion um _GetRegValues aufzurufen:
[autoit]Func _add_to_autostart_Taskplaner()
[/autoit][autoit][/autoit][autoit]
$taskname = StringReplace(@ScriptFullPath,"\","")
$taskname = StringReplace($taskname,":","")
$taskname = _Crypt_HashData($taskname, $CALG_MD5)
$regkeys = _GetRegSubKeys("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks")
for $z = 0 to UBound($regkeys) -1
$regvalues = _GetRegValues("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\"&$regkeys[$z])
$regentryfound = _ArraySearch($regvalues, "\"&$taskname)
if $regentryfound >= 0 Then Return 1
Next
$result000 = ShellExecute("schtasks.exe",'/create /sc ONLOGON /tn '&'"'&$taskname&'"'&' /rl HIGHEST /tr '&'"\"'&@ScriptFullPath&'\"',"","",@SW_HIDE)
EndFunc;========================================================================================
[/autoit]
; Function Name: _GetRegValues($HKEY)
; Description: Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array[0] = Name
; Array[1] = Typ
; Array[2] = Wert
; Fehler Leerstring (Schlüssel existiert nicht oder ist ohne Einträge)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegValues($HKEY)
Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") ;hier cracht es!
Local $arrValueNames, $arrValueTypes, $strValue
$oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
$OEvent = ObjEvent($oReg, "EnumValues")
If Not IsArray($arrValueNames) Then Return ''
Local $arOut[UBound($arrValueNames)][3]
For $i = 0 To UBound($arrValueNames) -1
$arOut[$i][0] = $arrValueNames[$i]
Switch $arrValueTypes[$i]
Case 1
$arOut[$i][1] = 'REG_SZ'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 2
$arOut[$i][1] = 'REG_EXPAND_SZ'
$oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 3
$arOut[$i][1] = 'REG_BINARY'
$oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 4
$arOut[$i][1] = 'REG_DWORD'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 7
$arOut[$i][1] = 'REG_MULTI_SZ'
$oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
EndSwitch
$arOut[$i][2] = $strValue
Next
Return $arOut
EndFunc ;==>_GetRegValues
Func MyErrFunc()
Return
Endfunc -
perfect! das LZMA packt mit ratio zwischen 75 und 85 % !
danke -
ich habe im speicher ein debuglog (string), was ich gerne zippen oder irgendwie packen möchte und zwar ohne selbiges auf die platte auszulagern.
(es das ergebnis (der gepackte string) wird dann direkt an den server geschickt)
PS: der string bzw das logfile hab ich auf 20 mb begrenzt.
habt ihr eine idee ?PS: um missverständnisse zu vermeiden: es geht nur um das packen ohne auf platte zu schreiben, der rest ist bereits fertig.
-
und wann wird die version veröffentlicht ?
-
Wir danken für die äußerst präzise Problemdarstellung und empfehlen den Kauf einer Kristallkugel.
lol
sorrygerade wollte ich eine fehlerbeschreibung liefern, da hab ich den versteckten "hallo" - knopf in Autoit window info entdeckt.
also nehme ich Inahlt des vorherigen kommentares (den es nicht gab) und beschwerde zurück -->> ES GEHT <<-- -
Also bei mir geht das bzw die verlinkten beispiele von dir nicht Andy,
-
Themida ist mit sicherheit nicht in Autoit geschrieben. es ist ein protector der eine VM um eine exe wrappt und somit besonders hohen schutz bietet. allerdings verstehen die meisten leute nicht, dass sie beim benutzen solcher programme nur den autoit-interpreter-teil ihrer kompilierten exe schützen und nicht ihr script. der schutz bringt also nichts.
-
bitte.... bedenke allerdings, dass dieses keines falls eine ideallösung ist.... die passwortdatay wird jedes mal neu geschrieben.
das liegt hauptsächlich daran wie du an die sache rangegangen bist ... du solltest bei ini dateien einfach mit iniread / iniwrite arbeiten.
das macht es nicht nur einfacher, sondern auch schneller, wenn die datei größer ist. -
ich glaube das sind deine freunde:
http://www.autoitscript.com/autoit3/docs/f…ileReadLine.htm
http://www.autoitscript.com/autoit3/docs/f…ringReplace.htmHier die Lösung...
[autoit]
Über Sinnhaftigkeit des Ganzen lässt sich streiten:#include <ButtonConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <ComboConstants.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <GuiTab.au3>
#include <File.au3>
#include <array.au3>$Form1 = GUICreate("Form1", 314, 254, -1, -1)
[/autoit][autoit][/autoit][autoit]
$Altes_PW = GUICtrlCreateInput("", 50, 40, 200, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
$Neues_PW = GUICtrlCreateInput("", 50, 104, 200, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
$Neues_PW_WDH = GUICtrlCreateInput("", 50, 160, 200, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL))
$Button1 = GUICtrlCreateButton("Passwort ändern", 50, 208, 200, 25, 0)
$Altes_Passwort = GUICtrlCreateLabel("Altes Passwort:", 50, 16, 76, 17)
$Neues_Passwort = GUICtrlCreateLabel("Neues Passwort:", 50, 80, 84, 17)
$Neues_Passwort_Wiederholen = GUICtrlCreateLabel("Neues Passwort wiederholen:", 50, 136, 144, 17)
GUISetState(@SW_SHOW)$Nutzer = "Jan" ; Ändert sich immer durch einen input
[/autoit][autoit][/autoit][autoit]While 1
[/autoit][autoit][/autoit][autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitCase $Button1
[/autoit][autoit][/autoit][autoit]
_PW()
EndSwitch
WEndFunc _PW()
[/autoit]
$Zaehlen = _FileCountLines(@ScriptDir & "\Test.txt")
For $i = 4 To $Zaehlen
$Zeile = FileReadLine(@ScriptDir & "\Test.txt", $i)
If StringInStr($Zeile, $Nutzer) Then
$PasswortZeile = FileReadLine(@ScriptDir & "\Test.txt", $i)
$Passwortdatei = StringSplit($PasswortZeile, " = ", 1)
$PW = $Passwortdatei[3]
$1 = GUICtrlRead($Altes_PW)
$2 = GUICtrlRead($Neues_PW)
$3 = GUICtrlRead($Neues_PW_WDH)
if $2 <> $3 Then MsgBox(0, "Fehler", "Die Wiederholung des neuen Passwortes ist falsch")
if $1 = $Passwortdatei[2] Then
$read = FileRead(@ScriptDir & "\Test.txt")
$read = StringReplace($read, $Nutzer&" = "&$1&" = ", $Nutzer&" = "&$2&" = ")
FileDelete(@ScriptDir & "\Test.txt")
$ret = FileWrite(@ScriptDir & "\Test.txt", $read)
if $ret = 1 MsgBox(0, "OK", "Neues Passwort wurde gesetzt")
Else
MsgBox(0, "Fehler", "Das alte Passwort wurde falsch eingegeben")
EndIf
Return
EndIf
Next
Return ""
EndFunc -
danke für die mühe. letztendlich hat es geholfen auf ein update ihrer UDF auf die version von´vor ein paar tagen, meine version war wohl älter, was man mangels einer versionsnummer der udf nicht erkennen konnte.
-
okay, dann meine ich sie
na ja, in 32 bit läuft es auch unter windows 8 ... allerdings brauche ich eine 64 bit kompilierung, und da crasht es an der besagten stelle.
ich hab versucht das handle per hand um 4 byte zu kürzen und habe gehofft, dass ich den fehler damit vermeiden könne, hat leider nicht funktioniert.... hmmmpf -
na ja, der hat geantwortet, dass autoit windows 8 nicht unterstützt... hilft mir leider nicht weiter.
-
Das problem ist das system
wenn ich versuche das untere script als 64bit variante auszuführen, dann funktioniert das ganze nicht (unter Win7 64 komischer weise schon)
und zwar ist das problem genau hier:
Local $hRequestWinHttp = _WinHttpOpenRequest($hConnectWinHttp, "POST", $target_URL)
wenn $hConnectWinHttp eine 64bit langer int ist, crasht es...
was soll ich nun tun ? den int einfach zurechtpharsen wäre wohl stümperhaft oder ?
_WinHttpOpenRequest ist keine von mir erstellte funktion. (UDF hängt an)Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#AutoIt3Wrapper_UseX64=y#include <WinHTTP.au3>
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <base64.au3>$crypted_file = FileOpenDialog("Select crypted logfile", @ScriptDir, "Logfiles (*.*)", 1)
[/autoit] [autoit][/autoit] [autoit]
$connect_to_server = "xxxxxxserver.de"
$target_URL = "upload-test.php"MsgBox(0, "ergebnis", _send_post_binary($connect_to_server, $target_URL, $crypted_file))
[/autoit] [autoit][/autoit] [autoit]func _send_post_binary($connect_to_server, $target_URL, $binaryfiledata, $file_send_to_server = "binary.exe", $sBoundary = "XXX", $encodebase64 = 1 )
[/autoit] [autoit][/autoit] [autoit];~ ; Initialize and get session handle
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
;~ Local $hOpenWinHttp = _WinHttpOpen()
;~ ; Get connection handle
;~ Local $hConnectWinHttp = _WinHttpConnect($hOpenWinHttp, $connect_to_server)
;~ ; Specify the reguest
;~ Local $hRequestWinHttp = _WinHttpOpenRequest($hConnectWinHttp, "POST", $target_URL); Initialize and get session handle
[/autoit] [autoit][/autoit] [autoit]
Local $hOpenWinHttp = _WinHttpOpen()
MsgBox(1,"$hOpenWinHttp",$hOpenWinHttp)
; Get connection handle
Local $hConnectWinHttp = _WinHttpConnect($hOpenWinHttp, $connect_to_server)
MsgBox(1,"$hConnectWinHttp",$hConnectWinHttp)
; Specify the reguest
Local $hRequestWinHttp = _WinHttpOpenRequest($hConnectWinHttp, "POST", $target_URL)
MsgBox(1,"$hRequestWinHttp",$hRequestWinHttp);~ --------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]
Local $base64Stuff, $sS
if $encodebase64 = 1 Then
$base64Stuff = _Base64Encode(FileRead($binaryfiledata))
Else
$base64Stuff = _Base64Encode(FileRead($binaryfiledata))
EndIf$sS = @CRLF & "--" & $sBoundary & @CRLF
[/autoit] [autoit][/autoit] [autoit]
$sS &= 'Content-Disposition: multipart/form-data; name="userfile"; filename="' & $file_send_to_server & '"' & @CRLF
$sS &= 'Content-Transfer-Encoding: base64' & @CRLF
$sS &= "Content-Type: text/plain" & @CRLF & @CRLF & $base64Stuff & @CRLF
$sS &= "--" & $sBoundary & "--" & @CRLF;MsgBox(0,"SS", $sS)
[/autoit] [autoit][/autoit] [autoit]; Send request
[/autoit] [autoit][/autoit] [autoit]
Local $hSendRequestWinHttp = _WinHttpSendRequest($hRequestWinHttp, "Content-Type: multipart/form-data; boundary=" & $sBoundary & @CRLF, $sS, StringLen($sS)); Wait for the response
[/autoit]
_WinHttpReceiveResponse($hRequestWinHttp)
Local $recieived_data = _WinHttpReadData($hRequestWinHttp)
; Close handles
_WinHttpCloseHandle($hRequestWinHttp)
_WinHttpCloseHandle($hConnectWinHttp)
_WinHttpCloseHandle($hOpenWinHttp)
; Check if there is data available...
If _WinHttpQueryDataAvailable($hRequestWinHttp) Then
Return $recieived_data
Else
Return $recieived_data
EndIf
EndFunc -
wo ist sie denn ?