04. maj 2004 - 19:40
Der er
7 kommentarer og
1 løsning
Gemme data i exe
Jeg ved at man kan gemme data i resource filer som så bliver compilet med ind i exe filen. Men er det muligt at bruge disse data, ændre på dem, og så gemme dem i exe filen igen??
Dataen jeg skal have gemt er ting som feks passwords og lign. Og derfor ville det være nemmest hvis jeg ikke skal hen og kryptere og gemme i registrerings db eller i en anden fil.
Slettet bruger
04. maj 2004 - 20:14
#1
Umiddelbart nej, din exe er jo statisk når den er lavet.
Det du måske kunne gøre var at gemme disse ting i en fil, navnet bestemmer du helt selv, men du kan kryptere data'ene når du gemmer og dekryptere når du henter dem ind igen.
En exe bliver jo netop kompilet så den kan køre uden at du har vb installeret. Og jeg vil æde min hat på, at det du forsøger derfor ikke er muligt, for du kan jo ikke kompile igen og igen.
Kun hvis du køre programmet fra VB, men det gør du vel ikkehver gang (så var der ikke brug for en .exe ;o)
martinm_moth.. det er forkert... har selv leget meget med det her... jeg ved så ikke om man kan vælge en "højre"/"bedre" kompilering end det jeg gør.. men når jeg kompiler bruger jeg settings: Compile to Native Code og Optimze for Fast Code, og der kan du åbne dit program med notepad og kigge i det, der er ikke så meget brugligt, men man kan se og ændre labels.caption, de skal bare være nøjagtig samme længde som den originale kompilet label caption var.. dette kan du udnytte ved at åbne den pågældne fil som binary access read og write... ser lige om jeg kan finde mit eksempel...
Kopiere dette ind i en notepad tekst, og gem det som form1.frm og form2.frm
Sorry, det er lidt dårligt skrevet, og lidt sjusket... kan nok forbedres, men det er lang tid siden jeg har lavet den... Start et nyt Project, og hent disse to forme ind i projektet, husk at sætte form1 til at være startup objekt, og så kompile den og prøv den, prøv så at skrive Regi i tekstboxen og trykke Save... det skulle stadig virke...
Form1: 'dette skal ikke kopieres med...
VERSION 5.00
Object = "{3B7C8863-D78F-101B-B9B5-04021C009402}#1.2#0"; "RICHTX32.OCX"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 1290
ClientLeft = 60
ClientTop = 450
ClientWidth = 4965
LinkTopic = "Form1"
ScaleHeight = 1290
ScaleWidth = 4965
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton Command1
Caption = "Save"
Height = 375
Left = 2040
TabIndex = 8
Top = 720
Width = 1215
End
Begin VB.Timer Timer1
Enabled = 0 'False
Interval = 1
Left = 7440
Top = 6840
End
Begin RichTextLib.RichTextBox RichTextBox5
Height = 4095
Left = 3480
TabIndex = 7
Top = 4800
Visible = 0 'False
Width = 2775
_ExtentX = 4895
_ExtentY = 7223
_Version = 393217
Enabled = -1 'True
TextRTF = $"Form2.frx":0000
End
Begin RichTextLib.RichTextBox RichTextBox4
Height = 4215
Left = 360
TabIndex = 6
Top = 4800
Visible = 0 'False
Width = 3015
_ExtentX = 5318
_ExtentY = 7435
_Version = 393217
Enabled = -1 'True
TextRTF = $"Form2.frx":008B
End
Begin RichTextLib.RichTextBox RichTextBox3
Height = 3135
Left = 6720
TabIndex = 5
Top = 1560
Width = 3015
_ExtentX = 5318
_ExtentY = 5530
_Version = 393217
Enabled = -1 'True
TextRTF = $"Form2.frx":0116
End
Begin RichTextLib.RichTextBox RichTextBox2
Height = 3015
Left = 3360
TabIndex = 4
Top = 1560
Visible = 0 'False
Width = 3135
_ExtentX = 5530
_ExtentY = 5318
_Version = 393217
Enabled = -1 'True
TextRTF = $"Form2.frx":01A1
End
Begin RichTextLib.RichTextBox RichTextBox1
Height = 3255
Left = 240
TabIndex = 3
Top = 1440
Visible = 0 'False
Width = 2895
_ExtentX = 5106
_ExtentY = 5741
_Version = 393217
Enabled = -1 'True
TextRTF = $"Form2.frx":022C
End
Begin VB.TextBox Text1
Height = 495
Left = 120
TabIndex = 2
Top = 720
Width = 1695
End
Begin VB.Label Label2
Caption = "Set:| "
Height = 495
Left = 2160
TabIndex = 1
Top = 0
Width = 2655
End
Begin VB.Label Label1
Caption = "Label1"
Height = 375
Left = 0
TabIndex = 0
Top = 120
Width = 2535
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim b1() As String
Dim b2, b3 As String
Dim b4 As String
Dim b5() As String
Private Sub Command1_Click()
Close #1
Close #2
FileCopy App.Path & "\" & App.EXEName & ".exe", App.Path & "\temp.exe"
Open App.Path & "\temp.exe" For Binary Access Read As #1
If LOF(1) = 0 Then Exit Sub
Dim a1 As String
a1 = Space$(LOF(1))
Get #1, , a1
Close #1
Dim a3 As Long
Dim a4, a5, a6 As String
a3 = InStr(1, a1, "Set:")
a4 = Mid$(a1, 1, a3 - 1)
a5 = Mid(a1, a3 + 5 + Len(Text1.Text))
a6 = a4 & "Set:|" & Text1.Text & a5
Open App.Path & "\temp.exe" For Binary Access Write As #2
Dim a2 As String
a2 = a6
Put #2, , a2
Close #2
DoEvents
Shell App.Path & "\temp.exe " & App.EXEName & "|" & Form1.Top & "|" & Form1.Left, vbHide
End
End Sub
Private Sub Command2_Click()
End Sub
Private Sub Command3_Click()
End Sub
Private Sub Command4_Click()
End Sub
Private Sub Form_Load()
If Command <> "" Then
b4 = Mid(Command, 1, 7)
If b4 = "slettemp" Then
b5 = Split(Command, "|")
Form1.Top = b5(1)
Form1.Left = b5(2)
DoEvents
On Error GoTo 1
Kill App.Path & "\temp.exe"
DoEvents
GoTo 2
1:
Timer1.Enabled = True
Exit Sub
2:
GoTo 3
End If
Form2.Text1 = Command
Load Form2
Form1.Hide
Exit Sub
End If
3:
DoEvents
b2 = Label2.Caption
b3 = Right(b2, 1)
Do While b3 = " "
b2 = Mid(b2, 1, Len(b2) - 1)
b3 = Right(b2, 1)
Loop
b1 = Split(b2, "|")
If b1(1) = "Regi" Then
Label1.Caption = "Registreret"
Else
Label1.Caption = "Ikke registreret"
Text1.Text = b1(1)
End If
End Sub
Private Sub Label3_Click()
End Sub
Private Sub Label2_Click()
End Sub
Private Sub Text1_Change()
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1.Value = True
End If
End Sub
Private Sub Timer1_Timer()
Timer1.Enabled = False
Form_Load
End Sub
Form2: 'dette skal ikke kopieres med..
VERSION 5.00
Begin VB.Form Form2
Caption = "Form2"
ClientHeight = 6885
ClientLeft = 60
ClientTop = 450
ClientWidth = 7890
LinkTopic = "Form2"
ScaleHeight = 6885
ScaleWidth = 7890
StartUpPosition = 3 'Windows Default
Visible = 0 'False
Begin VB.Timer Timer2
Enabled = 0 'False
Interval = 1
Left = 2400
Top = 2640
End
Begin VB.Timer Timer1
Interval = 1
Left = 840
Top = 2640
End
Begin VB.TextBox Text1
Height = 615
Left = 1320
TabIndex = 0
Top = 960
Width = 1935
End
End
Attribute VB_Name = "Form2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim a1 As Integer
Dim a2, a3, a4 As String
Dim b1() As String
Dim b2 As Integer
Private Sub Form_Load()
a1 = 1
End Sub
Private Sub Form_Unload(Cancel As Integer)
End
End Sub
Private Sub Timer1_Timer()
On Error GoTo 1
b1() = Split(Text1.Text, "|")
Do Until a1 = 2
a2 = App.Path & "\" & b1(0) & ".exe"
a3 = App.Path & "\" & "temp" & ".exe"
Kill a2
FileCopy a3, a2
a4 = a2 & " slettemp" & "|" & b1(1) & "|" & b1(2)
Shell a4, vbNormalFocus
a1 = 2
End
Exit Sub
Loop
1:
Timer1.Enabled = False
Timer2.Enabled = True
End Sub
Private Sub Timer2_Timer()
Timer2.Enabled = False
Timer1.Enabled = True
End Sub
jakob12345:
Ja det kan godt lave sig gøre, ved at åbne din exe fil og ændre noget af den statiske test der er i den, testen skal dog have samme længde som den man ændre. Det er en MEGET dårlig ide at gøre dette, og dataen skal adligevel krypteres (hvis det skal være sikkert)