Εμφάνιση 1-7 από 7
  1. #1
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    Καλημέρα αγαπητό FORUM !

    Θέλω να δημιουργήσω ένα vbs αρχείο, το οποίο αν ο χρήστης που το τρέχει δεν έχει δικαιώματα διαχειριστή να τα ανακτά με το γνωστό prompt "Εκτέλεση ως..." και το παραθυράκι για την εισαγωγή των στοιχείων (όνομα, κωδικός) και να επανα-καλεί τον εαυτό του με δικαιώματα διαχειριστή πλέον.

    Μέχρι στιγμής το έχω κάνει με 2 ξεχωριστά vbs αρχεία, όπου το πρώτο ανακτά τα δικαιώματα διαχειριστή κ καλεί το δεύτερο για τη βασική λειτουργία που θέλω.

    * Υπάρχει τρόπος να γίνει μόνο με ένα vbs αρχείο;

    * Έχω βρει αυτό εδώ http://www.kellestine.com/self-elevate-vbscript/, αλλά το αρχείο θα τρέχει σε υπολογιστές με Windows XP όπου δεν υπάρχει διαθέσιμη η εντολή whoami.

    * Θέλω το αρχείο vbs να τρέχει out-of-the-box, χωρίς να απαιτείται η εκτέλεση κάποιου άλλου αρχείου που δεν υπάρχει ήδη από "μαμά-εγκατάσταση" των Windows XP.

  2. #2
    Εγγραφή
    02-11-2003
    Περιοχή
    Επαναπατρισθείς στην Αθήνα
    Ηλικία
    49
    Μηνύματα
    56.427
    Downloads
    64
    Uploads
    73
    Τύπος
    VDSL2
    Ταχύτητα
    102400/10240
    ISP
    Vodafone
    Path Level
    Fastpath
    Έχω την εντύπωση ότι αυτό που θες να κάνει απαιτεί το UAC.

    Το UAC υπάρχει από Vista και μετά, όχι XP.

    Άρα στα XP δεν μπορείς να το κάνεις.

    http://support.microsoft.com/kb/981778

    http://code.msdn.microsoft.com/windo...ation-644673d3

    http://blogs.msdn.com/b/codefx/archi...cess-in-c.aspx

  3. #3
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    Παράθεση Αρχικό μήνυμα από WAntilles Εμφάνιση μηνυμάτων
    Έχω την εντύπωση ότι αυτό που θες να κάνει απαιτεί το UAC.

    Το UAC υπάρχει από Vista και μετά, όχι XP.

    Άρα στα XP δεν μπορείς να το κάνεις.

    http://support.microsoft.com/kb/981778

    http://code.msdn.microsoft.com/windo...ation-644673d3

    http://blogs.msdn.com/b/codefx/archi...cess-in-c.aspx
    Ευχαριστώ για την απάντησή σου. Δεν εννοώ αυτό ακριβώς, αλλά το Script να ελέγχει αν ο χρήστης που το τρέχει έχει δικαιώματα διαχειριστή αλλιώς να εμφανίζει το γνωστό παραθυράκι που ζητάει την εισαγωγή στοιχείων...
    Να μην κάνεις δλδ εσύ κάθε φορά δεξί κλικ "Εκτέλεση ως...", αλλά από μόνο του το Script.
    Αυτό το έχω καταφέρει για ένα άλλο dos-script μέσω shell script (bat δλδ), οπού το ίδιο ξανακαλεί τον εαυτό του έχοντας τα "σωστά" δικαιώματα.

    Όταν το κάνω όμως αυτό με το VBScript, τότε το πρόγραμμα πέφτει σε loop ζητώντας κάθε φορά δικαιώματα διαχειριστή πετάγοντας το παραθυράκι "Εκτέλεση ως...".
    Αυτό σημαίνει ότι ή δεν περνάει τα δικαιώματα του διαχειριστή ή ότι πρέπει με κάποιο τρόπο να το κατευθύνω να μην ξεκινάει πάλι απ' την αρχή αλλά μετά από κάποιο σημείο για να μην ξαναελέγχει για δικαιώματα.
    Αν και έτσι πρέπει να γίνει για να είναι σίγουρο ότι έχουν περαστεί τα δικαιώματα διαχειριστή στο πρόγραμμα.

  4. #4
    Εγγραφή
    02-11-2003
    Περιοχή
    Επαναπατρισθείς στην Αθήνα
    Ηλικία
    49
    Μηνύματα
    56.427
    Downloads
    64
    Uploads
    73
    Τύπος
    VDSL2
    Ταχύτητα
    102400/10240
    ISP
    Vodafone
    Path Level
    Fastpath
    Παράθεση Αρχικό μήνυμα από djastral232 Εμφάνιση μηνυμάτων
    Ευχαριστώ για την απάντησή σου. Δεν εννοώ αυτό ακριβώς, αλλά το Script να ελέγχει αν ο χρήστης που το τρέχει έχει δικαιώματα διαχειριστή αλλιώς να εμφανίζει το γνωστό παραθυράκι που ζητάει την εισαγωγή στοιχείων...
    Να μην κάνεις δλδ εσύ κάθε φορά δεξί κλικ "Εκτέλεση ως...", αλλά από μόνο του το Script.
    Αυτό το έχω καταφέρει για ένα άλλο dos-script μέσω shell script (bat δλδ), οπού το ίδιο ξανακαλεί τον εαυτό του έχοντας τα "σωστά" δικαιώματα.
    Το ίδιο πράγμα λέμε, και σου εξήγησα ότι αυτό δεν γίνεται στα XP. Απαιτεί Vista ή μεταγενέστερο.

  5. #5
    Εγγραφή
    07-02-2005
    Ηλικία
    44
    Μηνύματα
    561
    Downloads
    0
    Uploads
    0
    Τύπος
    ADSL2+ Vivodi Full
    Ταχύτητα
    16384/1024
    ISP
    Vivodi
    DSLAM
    Vivodi - ΑΘΗΝΑΣ
    Router
    Speedtouch 780
    Έχεις λάθος τον αλγόριθμο, γι'αυτό πέφτει σε loop το vb script σου.
    Ο έλεγχος που κάνεια με το whoami είναι λάθος. Γι'αυτό επιστρέφει πάντα false.

    Αν θες πόσταρε εδώ τις πρώτες γραμμές από το script σου, για να σου πούμε πως ακριβώς να το κάνεις.
    Παράθεση Παράθεση Posted from Android app

  6. #6
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    AgentWolf o WAntilles έχει δίκιο νομίζω. Είχα βρει το λάθος στον κώδικα με το loop και το διόρθωσα, αλλά (αν δεν έχω και τώρα κάποιο λάθος) αυτό που γίνεται είναι να μην περνάει τα δικαιώματα διαχειριστή πίσω στο πρόγραμμα. To λέω γιατί στον κανονικό κώδικα μέσα στην Ιnitialize() υπάρχουν εντολές που απαιτούν δικαιώματα διαχειριστή κ το πρόγραμμα μου εμφανίζει σφάλμα λέγοντας ότι δεν έχω δικαιώματα διαχειριστή για την εκτέλεση αυτής της λειτουργίας.

    Να υπενθυμίσω AgentWolf ότι το δουλεύω σε WinXP, το αναφέρω επειδή λες για την εντολή whoami...

    Παραθέτω ενδεικτικά ένα κομμάτι κώδικα, όπου τρέχει το αρχείο με δικαιώματα διαχειριστή (με χρήση της εντολής runas) δίνοντας τα στοιχεία της σύνδεσης μέσα απ΄τον κώδικα. Καθώς δεν θέλω να εμφανίζεται το παραθυράκι κ να τα ζητάει απ΄τον χρήστη...

    Όπου, runme.exe είναι το ίδιο το vbs αρχείο (runme.vbs) compiled σε exe. Δλδ, καλεί τον εαυτό του.

    Στο vbs κώδικα κοιτάει τη registry για το αν ο συνδεδεμένος χρήστης είναι διαχειριστής ή όχι, ενώ στο bat αρχείο αν έχει πρόσβαση σε κάποιο φάκελο συστήματος.

    Ο λόγος που δουλεύει το bat αρχείο είναι ότι αρχικά προσπαθεί μέσω cmd να αποκτήσει πρόσβαση σε φάκελο συστήματος κ εφόσον δεν τρέχει με δικαιώματα διαχειριστή, τότε ξανατρέχει μέσω cmd και δικαιώματα διαχειριστή τον εαυτό του και επειδή οι εντολές εκτελούνται σε περιβάλλον cmd μπορούν και αποκτούν πρόσβαση.

    Εδώ είναι που κολλάω και δεν ξέρω πως κ αν μπορώ να κάνω την αντίστοιχη μετατροπή στο vbs αρχείο. Τι εντολή δλδ πρέπει να μπει μέσα στην IsAdmin() ώστε όταν το πρόγραμμα εκτελέιται με δικαιώματα διαχειριστή να οδηγεί το πρόγραμμα στην Ιnitialize().

    Μια άλλη σκέψη ήταν να βγάλω εκτός τον έλεγχο των δικαιωμάτων και να το κάνω να τρέχει πάντα ως διαχειριστής, να βγει δλδ η function IsAdmin() κ να βάλω μια παράμετρο κατι σαν flag όταν ξανακαλείται να πηγαίνει σε άλλο κομμάτι κωδικα για να μην πέσει σε loop...

    Κώδικας:
    REM  --> Check for permissions
    >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
    
    REM --> If error flag set, we do not have admin.
    if '%errorlevel%' NEQ '0' (
        echo Requesting administrative privileges...
        goto UACPrompt
    ) else (
    	goto gotAdmin 
    )

    Κώδικας:
    Option Explicit
    
    If IsAdmin Then Initialize
    If NOT IsAdmin Then SetAdmin
    
    Function IsAdmin()
      IsAdmin = False
      On Error Resume Next
      key = CreateObject("WScript.Shell").RegRead("HKEY_USERS\S-1-5-19\Environment\TEMP")
      If err.number = 0 Then IsAdmin = True
    End Function
    
    Function SetAdmin()
      Const USER = "admin"
      Const PASS = "pass"
      Const WSNAME = "\runme.exe"
    
      Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")
      Dim CurrentDirectory : CurrentDirectory = fso.GetAbsolutePathName(".\")
      Dim WSHShell : Set WshShell = CreateObject("WScript.Shell")
      Dim oProcessEnv : Set oProcessEnv = WshShell.Environment("PROCESS")
      Dim sPathToRunAs : sPathToRunAs = oProcessEnv("SystemRoot") & "\System32\runas.exe"
      Dim iReturnCode
    
      If Not fso.FileExists(sPathToRunAs) Then : WScript.Quit(1) 'Can't find RunAs
    
      'Msgbox "runas /user:" & USER & " " & CHR(34) & CurrentDirectory & WSNAME & CHR(34)
      iReturnCode = WshShell.Run("runas /user:" & USER & " " & CHR(34) & CurrentDirectory & WSNAME & CHR(34), 2, FALSE)
    
      Wscript.Sleep 40 ' Time for window to open.
      WshShell.AppActivate(sPathToRunAs) ' Activate the Window
      Wscript.Sleep 3
      WSHShell.SendKeys PASS & "~" ' Send the password
      Wscript.Sleep 3
    End Function
    
    Function Initialize()
      MsgBox "Go on as admin from here..."
      ' the rest code....
    End Function
    Τελευταία επεξεργασία από το μέλος djastral232 : 07-02-14 στις 17:31.

  7. #7
    Εγγραφή
    19-11-2008
    Ηλικία
    40
    Μηνύματα
    286
    Downloads
    4
    Uploads
    0
    Τελικά, μετά από πολύ trial-and-error κ σύμφωνα με την τελευταία μου σκέψη για flag, δούλεψε.

    Έτσι, το (exe compiled vbs) script αρχικά ελέγχει αν το έχουμε ξανακαλέσει μέσω μιας έξτρα παραμέτρου (flag). Aν όχι, τότε ξανακαλεί τον εαυτό του περνώντας αυτόματα (μέσω του κώδικα -σταθερές) τα στοιχεία για τα δικαιώματα διαχειριστή και στη συνέχεια, εφόσον η τιμή της flag είναι αληθής ανακατευθύνεται στην Initialize().

    Ενώ ακούγεται εύκολο, δυσκολεύτηκα να ενώσω μεταξύ τους κάποιες "τεχνικές", καθώς ήταν η πρώτη φορά που ασχολήθηκα με vbscipt. Nα σημειώσω ότι προτίμησα να χρησιμοποιήσω την Run() αντί της Exec(), επειδή η πρώτη είναι synchronized function ενώ η δεύτερη μου προκαλούσε προβλήματα. Τέλος, ο τρόπος αυτός κατάφερε και δούλεψε επειδή το αρχείο μεταγλωτίστηκε σε exe. Διαφορετικά η runas δεν θα το έτρεχε.

    Είναι μια ψευδο-elevate-τεχνική θα έλεγα, με την προϋπόθεση ότι έχουμε δώσει σωστά το <όνομα διαχειριστή> και τον <κωδικό> του, όπου τρέχει το exe αρχείο μας με δικαιώματα διαχειριστή χωρίς ο απλός χρήστης να εμπλέκεται στη διαδικασία εισαγωγής των στοιχείων του. Αυτό είναι χρήσιμο σε περιπτώσεις όπου θέλουμε ένας απλός χρήστης να εκτελέσει (προσωρινά μέσω του script) κάποιες λειτουργίες χωρίς να μάθει τα στοιχεία του λογαριασμού διαχειριστή.

    Με την ουσιαστική έννοια του όρου "elevate" o WAntilles είχε δίκιο.

Παρόμοια Θέματα

  1. Μηνύματα: 19
    Τελευταίο Μήνυμα: 21-09-13, 19:20
  2. Προβλημα με Ups Lamtech 1600va self test χωρις λογο.
    Από none1 στο φόρουμ Σκληροί δίσκοι, αποθηκευτικά μέσα και λοιπά περιφερειακά
    Μηνύματα: 1
    Τελευταίο Μήνυμα: 01-04-13, 19:31

Bookmarks

Bookmarks

Δικαιώματα - Επιλογές

  • Δεν μπορείτε να δημοσιεύσετε νέα θέματα
  • Δεν μπορείτε να δημοσιεύσετε νέα μηνύματα
  • Δεν μπορείτε να αναρτήσετε συνημμένα
  • Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας
  •  
  • Τα BB code είναι σε λειτουργία
  • Τα Smilies είναι σε λειτουργία
  • Το [IMG] είναι σε λειτουργία
  • Το [VIDEO] είναι σε λειτουργία
  • Το HTML είναι εκτός λειτουργίας