Accueil > > > PATCHEUR DE FICHIER
PATCHEUR DE FICHIER
Information sur la source
Description
Code permettant d'appliquer un patch a une position définie sur un fichier quelconque (Exe, Dll, txt, ETC...) Le tout en mode console, avec paramètres en ligne de commande.
Source
- Imports System.IO
-
- Module Patch
- Dim ERREUR As Integer
- Dim NombrePositionPatch
- Dim ParametrePositionPatch
- Dim BitPatch() As Byte
- Dim Arguments() As String
- Dim Octet As Byte
-
- Sub Main()
- ERREUR = 0
- GetCommandLineArgs()
-
- If Arguments.Count > 3 Then
- If Arguments(3) = "S" Or Arguments(3) = "s" Then
- CreationCopieSecurité()
- End If
- End If
- If ERREUR <> 0 Then
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.White
- Console.WriteLine("** Une erreur ne permet pas la poursuite du programme ***")
- Console.BackgroundColor = ConsoleColor.Black
- Else
- Patch()
- End If
- If Arguments.Count > 3 Then
- If Arguments(3) = "A" Or Arguments(3) = "a" Then
- End
- End If
- If Arguments.Count > 4 Then
- If Arguments(4) = "A" Or Arguments(4) = "a" Then
- End
- End If
- End If
- End If
- Console.Read()
- End Sub
-
- Sub GestErr(ByVal CodeErr As Integer)
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.White
-
- Select Case CodeErr
- Case 1
- Console.WriteLine("Err sur les parametres")
- Console.BackgroundColor = ConsoleColor.Black
- Aide()
- Case 2
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine()
- Console.Write(" │ └─")
- Console.ForegroundColor = ConsoleColor.Red
- Console.WriteLine("Verifier la presence du fichier a patcher")
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.Yellow
- Console.WriteLine(" STOP ")
- Console.WriteLine()
- Case 3
- Console.WriteLine("La position du debut du patch ajouté à la longeur du pach en lui meme")
- Console.WriteLine("depassent la taille du fichier")
- Console.WriteLine("verifier la position de depart")
- Console.WriteLine("et la longeur du patch")
- Case 4
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" │ └─")
- Console.ForegroundColor = ConsoleColor.Red
- Console.WriteLine("La longeur du patch doit etre codé sur 2 caracteres (00->FF)")
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.Yellow
- Console.WriteLine(" STOP ")
- Console.WriteLine()
- Case 5
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.Yellow
- Console.WriteLine(" STOP ")
- Console.WriteLine()
- Case 6
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Red
- Console.WriteLine("Le parametre doit etre une valeur DECIMALE")
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.Yellow
- Console.WriteLine(" STOP ")
- Console.WriteLine()
- End Select
- Console.BackgroundColor = ConsoleColor.Black
- Console.Read()
- End
- End Sub
-
- Sub Aide()
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine("┌─────────────┐")
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Yellow
- Console.Write(" AIDE ")
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine("│ Patch V1.0 By Tototh09")
- Console.WriteLine("└─────────────┘")
- Console.WriteLine()
- Console.WriteLine(" OBLIGATOIRES OPTIONNELS")
- Console.WriteLine(" ┌─────────────┴────────────┐ ┌───┴──┐")
- Console.ForegroundColor = ConsoleColor.White
- Console.Write(" patch.exe ")
- Console.ForegroundColor = ConsoleColor.Green
- Console.Write(" toto.bin ")
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.Write(" 3025 ")
- Console.ForegroundColor = ConsoleColor.Magenta
- Console.Write(" F5C630F7 ")
- Console.ForegroundColor = ConsoleColor.Red
- Console.Write(" S ")
- Console.ForegroundColor = ConsoleColor.Magenta
- Console.WriteLine(" A ")
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine(" │ │ │ │ │ │")
- Console.WriteLine(" │ │ │ │ │ │")
- Console.WriteLine(" │ │ │ │ │ └ Auto (quitte l'appli des que")
- Console.WriteLine(" │ │ │ │ │ (le patch est appliqué")
- Console.WriteLine(" │ │ │ │ │")
- Console.WriteLine(" │ │ │ │ └ Sauvegarde de l'ancien fichier")
- Console.WriteLine(" │ │ │ │")
- Console.WriteLine(" │ │ │ └ Patch à appliquer")
- Console.WriteLine(" │ │ │ Caracteres hexadecimal, sans espaces")
- Console.WriteLine(" │ │ │")
- Console.WriteLine(" │ │ └ Postion de depart (Decimal)")
- Console.WriteLine(" │ │")
- Console.WriteLine(" │ └ Fichier à patcher")
- Console.WriteLine(" │")
- Console.WriteLine(" └ Logiciel")
- End Sub
- Sub GetCommandLineArgs()
- ' Declare variables.
- Dim PatchEspace As String
- Dim separators As String = " "
- Dim commands As String = Microsoft.VisualBasic.Interaction.Command()
- Dim MonFichierAPatcher As FileInfo
- Dim Taille As String
- Arguments = commands.Split(separators.ToCharArray)
- Dim NbreParams As Integer
- NbreParams = Arguments.Count
- If NbreParams < 3 Then ' err dans les parametres
- GestErr(1)
- End If
-
- PatchEspace = ""
- For T = 1 To Len(Arguments(2)) + 1 Step 2
- PatchEspace = PatchEspace & Mid(Arguments(2), T, 2)
- PatchEspace = PatchEspace & " "
- Next
- Console.ForegroundColor = ConsoleColor.Gray
- Console.ForegroundColor = ConsoleColor.Yellow
- Console.Write(" Parametres ")
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine(" Patch V1.0 By Tototh09")
- Console.WriteLine(" │")
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" ├─Fichier : ")
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.Write(Arguments(0))
- Console.ForegroundColor = ConsoleColor.Gray
- Try
- MonFichierAPatcher = New FileInfo(Arguments(0))
- Taille = MonFichierAPatcher.Length.ToString
- Catch
- GestErr(2)
- Exit Sub
- End Try
- Console.WriteLine()
- Console.Write(" │ ├─Taille ")
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.Write(Taille)
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine(" Octets)")
- Console.Write(" │ └─Check ")
- If System.IO.File.Exists(Arguments(0)) Then
- Console.ForegroundColor = ConsoleColor.Black
- Console.BackgroundColor = ConsoleColor.Green
- Console.WriteLine(" Fichier OK ")
- Else
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.White
- Console.WriteLine(" Fichier Inexistant ")
- GestErr(2)
- End If
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" ├─Position : ")
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.WriteLine(Arguments(1))
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" │ └─Check ")
- Try
- If (Arguments(1) / 2) + Len(Arguments(2)) > Taille Then
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.White
- Console.WriteLine(" Err (la longeur du patch dépasse celle du fichier)")
- GestErr(3)
- Else
- Console.ForegroundColor = ConsoleColor.Black
- Console.BackgroundColor = ConsoleColor.Green
- Console.WriteLine(" OK ")
- End If
- Catch
- GestErr(6)
- Exit Sub
- End Try
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" ├─Patch : ")
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.WriteLine(PatchEspace)
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" │ ├─Taille ")
- If Len(Arguments(2)) Mod 2 <> 0 Then
- Console.ForegroundColor = ConsoleColor.Red
- Console.BackgroundColor = ConsoleColor.White
- Console.WriteLine(" Taille impaire ")
- GestErr(4)
- Else
- Console.ForegroundColor = ConsoleColor.Black
- Console.BackgroundColor = ConsoleColor.Green
- Console.WriteLine(" Taille OK ")
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- 'Console.Write(" (" & Len(Arguments(2)) / 2)
- 'Console.WriteLine(" Octets)")
- End If
- Console.Write(" │ └─Check ")
- For T = 1 To Len(Arguments(2)) / 2 + 1 Step 2
- Try
- Octet = Convert.ToInt32(Mid(Arguments(2), T, 2), 16)
- Catch
- Console.WriteLine("Conversion impossible (valeur Hexa erronée).")
- Console.Write(" │ [")
- Console.BackgroundColor = ConsoleColor.Red
- Console.ForegroundColor = ConsoleColor.White
- Console.Write(Mid(Arguments(2), T, 2))
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine("] n'est pas une valeur HEXADECIMALE.")
- GestErr(5)
- Exit Sub
- End Try
- Next
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
- Console.Write(" └─Longeur : ")
- Console.ForegroundColor = ConsoleColor.Cyan
- Console.Write(Len(Arguments(2)) / 2)
- Console.ForegroundColor = ConsoleColor.Gray
- Console.WriteLine(" Octets")
- Console.ForegroundColor = ConsoleColor.Yellow
- Console.WriteLine()
- Console.ForegroundColor = ConsoleColor.Gray
- End Sub
-
-
- Private Sub Patch()
- If Arguments(2) <> "" Then
- If Arguments(1) <> "" Then
- Dim PosDebutPatch As Long = Arguments(1)
- Dim LongeurPatch As Integer = Len(Arguments(2))
-
- ' ----------- Lecture du fichier ------------------------------
- Dim FluxLecture As New BinaryReader(File.OpenRead(Arguments(0))) 'on defini l'objet de lecture de fichier
- Dim TableauFichier(FileLen(Arguments(0)) - 1) As Byte 'on defini les deux tableaux de bytes de la taille du fichier selectionné
- FluxLecture.BaseStream.Seek(0, SeekOrigin.Begin) 'on defini le pointeur en debut de fichier
- FluxLecture.Read(TableauFichier, 0, FileLen(Arguments(0))) 'on lit le fichier entier dans le tableau 1
- FluxLecture.BaseStream.Flush() 'on libere le buffer
- FluxLecture.Close() 'on ferme l'objet
-
- ' ----------- Modification -------------------------------------
- ' = CBPatch.Text
- Dim Ptr As Integer
- Dim PosAffiche As Long
- Dim CurseurAffiche As Integer
- Dim PosDeci As Long
- Dim PosHexa As String
- Dim ChaineAscii As String
-
- Ptr = 1 '--------------------- Affichage des anciennes valeurs
- Console.BackgroundColor = ConsoleColor.Blue
- Console.ForegroundColor = ConsoleColor.Red
- Console.Write("Avant patch")
- Console.ForegroundColor = ConsoleColor.White
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Yellow
- Console.Write("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F")
- Console.BackgroundColor = ConsoleColor.Black
- Console.Write(" ")
- Console.BackgroundColor = ConsoleColor.Blue
- Console.WriteLine("0123456789ABCDEF")
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
-
- PosAffiche = Arguments(1)
- Do While (PosAffiche > 16)
- PosAffiche = PosAffiche - 16
- Loop
-
- PosDeci = Arguments(1) - PosAffiche
- PosHexa = Hex(PosDeci)
-
- If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
- PosHexa = "0" & PosHexa
- End If
- Console.Write(" Ox" & PosHexa)
- For T = Len(PosHexa) + 3 To 10
- Console.Write(" ")
- Next
- Console.ForegroundColor = ConsoleColor.White
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Gray
- CurseurAffiche = 0
-
- ChaineAscii = ""
- For T = 1 To PosAffiche
- Console.Write(" ")
- ChaineAscii = ChaineAscii & " "
- CurseurAffiche = CurseurAffiche + 1
- Next
- CurseurAffiche = PosAffiche
- For T = 0 To ((Len(Arguments(2)) / 2) - 1)
- If Len(Hex(TableauFichier(PosDebutPatch + T))) Mod 2 <> 0 Then ' longeur impaire
- Console.Write("0")
- End If
- Console.Write(Hex(TableauFichier(PosDebutPatch + T)) & " ")
-
- ' affichage des car ascii
- If TableauFichier(PosDebutPatch + T) < 32 Then
- ChaineAscii = ChaineAscii & "."
- Else
- ChaineAscii = ChaineAscii & Chr(TableauFichier(PosDebutPatch + T))
- End If
-
- CurseurAffiche = CurseurAffiche + 1
- If CurseurAffiche > 15 Then
- CurseurAffiche = 0
- Console.Write(ChaineAscii)
- ChaineAscii = ""
- Console.WriteLine()
- PosDeci = PosDeci + 16
- PosHexa = Hex(PosDeci)
- If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
- PosHexa = "0" & PosHexa
- End If
- Console.Write(" Ox" & PosHexa)
- For TT = Len(PosHexa) + 3 To 10
- Console.Write(" ")
- Next
- Console.ForegroundColor = ConsoleColor.White
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Gray
- End If
- Next T
- If CurseurAffiche < 15 Then
- For T = CurseurAffiche To 15
- ChaineAscii = " " & ChaineAscii
- Next T
- End If
- Console.Write(ChaineAscii)
- '--------------------- Affichage des NOUVELLES valeurs
- Console.WriteLine()
- Console.WriteLine()
- Console.BackgroundColor = ConsoleColor.Green
- Console.ForegroundColor = ConsoleColor.Red
- Console.Write("Apres patch")
- Console.ForegroundColor = ConsoleColor.White
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Black
- Console.Write("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F")
- Console.BackgroundColor = ConsoleColor.Black
- Console.Write(" ")
- Console.BackgroundColor = ConsoleColor.Green
- Console.WriteLine("0123456789ABCDEF")
- Console.BackgroundColor = ConsoleColor.Black
- Console.ForegroundColor = ConsoleColor.Gray
-
- PosAffiche = Arguments(1)
- Do While (PosAffiche > 16)
- PosAffiche = PosAffiche - 16
- Loop
-
- PosDeci = Arguments(1) - PosAffiche
- PosHexa = Hex(PosDeci)
-
-
- If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
- PosHexa = "0" & PosHexa
- End If
- Console.Write(" Ox" & PosHexa)
- For T = Len(PosHexa) + 3 To 10
- Console.Write(" ")
- Next
- Console.ForegroundColor = ConsoleColor.White
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Gray
- CurseurAffiche = 0
- ChaineAscii = ""
- For T = 1 To PosAffiche
- Console.Write(" ")
- ChaineAscii = ChaineAscii & " "
- CurseurAffiche = CurseurAffiche + 1
- Next
- For T = 0 To ((Len(Arguments(2)) / 2) - 1)
-
- Console.Write(Mid(Arguments(2), Ptr, 2) & " ")
- Octet = Convert.ToInt32(Mid(Arguments(2), Ptr, 2), 16)
-
- ' affichage des car ascii
- If Octet < 32 Then
- ChaineAscii = ChaineAscii & "."
- Else
- ChaineAscii = ChaineAscii & Chr(Octet)
- End If
-
- TableauFichier(PosDebutPatch + T) = Octet
- Ptr = Ptr + 2
- CurseurAffiche = CurseurAffiche + 1
- If CurseurAffiche > 15 Then
- CurseurAffiche = 0
- '- affiche texte en ascii
- Console.Write(ChaineAscii)
- ChaineAscii = ""
- Console.WriteLine()
- PosDeci = PosDeci + 16
- PosHexa = Hex(PosDeci)
- If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
- PosHexa = "0" & PosHexa
- End If
- Console.Write(" Ox" & PosHexa)
- For TT = Len(PosHexa) + 3 To 10
- Console.Write(" ")
- Next
- Console.ForegroundColor = ConsoleColor.White
- Console.Write("│")
- Console.ForegroundColor = ConsoleColor.Gray
- End If
- Next T
- If CurseurAffiche < 15 Then
- For T = CurseurAffiche To 15
- ChaineAscii = " " & ChaineAscii
- Next T
- End If
- Console.Write(ChaineAscii)
- ' ----------- Ecriture du fichier ------------------------------
- Dim FluxEcriture As New IO.FileStream(Arguments(0), IO.FileMode.OpenOrCreate)
- Try
- FluxEcriture.Write(TableauFichier, 0, TableauFichier.Length)
- Catch ex As Exception
- Finally 'pour vb.net 2008 seulement, sinon débrouillez vous pour fermer le fichier! :p
- FluxEcriture.Close()
- End Try
- Else
- MsgBox("Aucun patch n'est défini")
- Exit Sub
- End If
- Else
- MsgBox("Il faut indiquer une position de debut pour le patch")
- Exit Sub
- End If
- Console.WriteLine()
- Console.WriteLine()
- Console.ForegroundColor = ConsoleColor.White
- Console.WriteLine("Operation terminée")
- End Sub
-
- Sub CreationCopieSecurité()
- Dim DateHeure As String
- DateHeure = My.Computer.Clock.LocalTime.ToString
- Dim ExtentionSecours As String = Replace(DateHeure, "/", "_")
- ExtentionSecours = Replace(ExtentionSecours, ":", "_")
- ExtentionSecours = Replace(ExtentionSecours, " ", "_")
- Dim x As FileInfo = New FileInfo(Arguments(0))
- x.CopyTo(Arguments(0) & "." & ExtentionSecours)
- Console.WriteLine("Sauvegarde du fichier sous " & Arguments(0) & "." & ExtentionSecours)
- Console.WriteLine()
- End Sub
- End Module
Imports System.IO
Module Patch
Dim ERREUR As Integer
Dim NombrePositionPatch
Dim ParametrePositionPatch
Dim BitPatch() As Byte
Dim Arguments() As String
Dim Octet As Byte
Sub Main()
ERREUR = 0
GetCommandLineArgs()
If Arguments.Count > 3 Then
If Arguments(3) = "S" Or Arguments(3) = "s" Then
CreationCopieSecurité()
End If
End If
If ERREUR <> 0 Then
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.White
Console.WriteLine("** Une erreur ne permet pas la poursuite du programme ***")
Console.BackgroundColor = ConsoleColor.Black
Else
Patch()
End If
If Arguments.Count > 3 Then
If Arguments(3) = "A" Or Arguments(3) = "a" Then
End
End If
If Arguments.Count > 4 Then
If Arguments(4) = "A" Or Arguments(4) = "a" Then
End
End If
End If
End If
Console.Read()
End Sub
Sub GestErr(ByVal CodeErr As Integer)
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.White
Select Case CodeErr
Case 1
Console.WriteLine("Err sur les parametres")
Console.BackgroundColor = ConsoleColor.Black
Aide()
Case 2
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine()
Console.Write(" │ └─")
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Verifier la presence du fichier a patcher")
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.Yellow
Console.WriteLine(" STOP ")
Console.WriteLine()
Case 3
Console.WriteLine("La position du debut du patch ajouté à la longeur du pach en lui meme")
Console.WriteLine("depassent la taille du fichier")
Console.WriteLine("verifier la position de depart")
Console.WriteLine("et la longeur du patch")
Case 4
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" │ └─")
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("La longeur du patch doit etre codé sur 2 caracteres (00->FF)")
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.Yellow
Console.WriteLine(" STOP ")
Console.WriteLine()
Case 5
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.Yellow
Console.WriteLine(" STOP ")
Console.WriteLine()
Case 6
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Red
Console.WriteLine("Le parametre doit etre une valeur DECIMALE")
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.Yellow
Console.WriteLine(" STOP ")
Console.WriteLine()
End Select
Console.BackgroundColor = ConsoleColor.Black
Console.Read()
End
End Sub
Sub Aide()
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine("┌─────────────┐")
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Yellow
Console.Write(" AIDE ")
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine("│ Patch V1.0 By Tototh09")
Console.WriteLine("└─────────────┘")
Console.WriteLine()
Console.WriteLine(" OBLIGATOIRES OPTIONNELS")
Console.WriteLine(" ┌─────────────┴────────────┐ ┌───┴──┐")
Console.ForegroundColor = ConsoleColor.White
Console.Write(" patch.exe ")
Console.ForegroundColor = ConsoleColor.Green
Console.Write(" toto.bin ")
Console.ForegroundColor = ConsoleColor.Cyan
Console.Write(" 3025 ")
Console.ForegroundColor = ConsoleColor.Magenta
Console.Write(" F5C630F7 ")
Console.ForegroundColor = ConsoleColor.Red
Console.Write(" S ")
Console.ForegroundColor = ConsoleColor.Magenta
Console.WriteLine(" A ")
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine(" │ │ │ │ │ │")
Console.WriteLine(" │ │ │ │ │ │")
Console.WriteLine(" │ │ │ │ │ └ Auto (quitte l'appli des que")
Console.WriteLine(" │ │ │ │ │ (le patch est appliqué")
Console.WriteLine(" │ │ │ │ │")
Console.WriteLine(" │ │ │ │ └ Sauvegarde de l'ancien fichier")
Console.WriteLine(" │ │ │ │")
Console.WriteLine(" │ │ │ └ Patch à appliquer")
Console.WriteLine(" │ │ │ Caracteres hexadecimal, sans espaces")
Console.WriteLine(" │ │ │")
Console.WriteLine(" │ │ └ Postion de depart (Decimal)")
Console.WriteLine(" │ │")
Console.WriteLine(" │ └ Fichier à patcher")
Console.WriteLine(" │")
Console.WriteLine(" └ Logiciel")
End Sub
Sub GetCommandLineArgs()
' Declare variables.
Dim PatchEspace As String
Dim separators As String = " "
Dim commands As String = Microsoft.VisualBasic.Interaction.Command()
Dim MonFichierAPatcher As FileInfo
Dim Taille As String
Arguments = commands.Split(separators.ToCharArray)
Dim NbreParams As Integer
NbreParams = Arguments.Count
If NbreParams < 3 Then ' err dans les parametres
GestErr(1)
End If
PatchEspace = ""
For T = 1 To Len(Arguments(2)) + 1 Step 2
PatchEspace = PatchEspace & Mid(Arguments(2), T, 2)
PatchEspace = PatchEspace & " "
Next
Console.ForegroundColor = ConsoleColor.Gray
Console.ForegroundColor = ConsoleColor.Yellow
Console.Write(" Parametres ")
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine(" Patch V1.0 By Tototh09")
Console.WriteLine(" │")
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" ├─Fichier : ")
Console.ForegroundColor = ConsoleColor.Cyan
Console.Write(Arguments(0))
Console.ForegroundColor = ConsoleColor.Gray
Try
MonFichierAPatcher = New FileInfo(Arguments(0))
Taille = MonFichierAPatcher.Length.ToString
Catch
GestErr(2)
Exit Sub
End Try
Console.WriteLine()
Console.Write(" │ ├─Taille ")
Console.ForegroundColor = ConsoleColor.Cyan
Console.Write(Taille)
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine(" Octets)")
Console.Write(" │ └─Check ")
If System.IO.File.Exists(Arguments(0)) Then
Console.ForegroundColor = ConsoleColor.Black
Console.BackgroundColor = ConsoleColor.Green
Console.WriteLine(" Fichier OK ")
Else
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.White
Console.WriteLine(" Fichier Inexistant ")
GestErr(2)
End If
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" ├─Position : ")
Console.ForegroundColor = ConsoleColor.Cyan
Console.WriteLine(Arguments(1))
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" │ └─Check ")
Try
If (Arguments(1) / 2) + Len(Arguments(2)) > Taille Then
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.White
Console.WriteLine(" Err (la longeur du patch dépasse celle du fichier)")
GestErr(3)
Else
Console.ForegroundColor = ConsoleColor.Black
Console.BackgroundColor = ConsoleColor.Green
Console.WriteLine(" OK ")
End If
Catch
GestErr(6)
Exit Sub
End Try
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" ├─Patch : ")
Console.ForegroundColor = ConsoleColor.Cyan
Console.WriteLine(PatchEspace)
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" │ ├─Taille ")
If Len(Arguments(2)) Mod 2 <> 0 Then
Console.ForegroundColor = ConsoleColor.Red
Console.BackgroundColor = ConsoleColor.White
Console.WriteLine(" Taille impaire ")
GestErr(4)
Else
Console.ForegroundColor = ConsoleColor.Black
Console.BackgroundColor = ConsoleColor.Green
Console.WriteLine(" Taille OK ")
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
'Console.Write(" (" & Len(Arguments(2)) / 2)
'Console.WriteLine(" Octets)")
End If
Console.Write(" │ └─Check ")
For T = 1 To Len(Arguments(2)) / 2 + 1 Step 2
Try
Octet = Convert.ToInt32(Mid(Arguments(2), T, 2), 16)
Catch
Console.WriteLine("Conversion impossible (valeur Hexa erronée).")
Console.Write(" │ [")
Console.BackgroundColor = ConsoleColor.Red
Console.ForegroundColor = ConsoleColor.White
Console.Write(Mid(Arguments(2), T, 2))
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine("] n'est pas une valeur HEXADECIMALE.")
GestErr(5)
Exit Sub
End Try
Next
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
Console.Write(" └─Longeur : ")
Console.ForegroundColor = ConsoleColor.Cyan
Console.Write(Len(Arguments(2)) / 2)
Console.ForegroundColor = ConsoleColor.Gray
Console.WriteLine(" Octets")
Console.ForegroundColor = ConsoleColor.Yellow
Console.WriteLine()
Console.ForegroundColor = ConsoleColor.Gray
End Sub
Private Sub Patch()
If Arguments(2) <> "" Then
If Arguments(1) <> "" Then
Dim PosDebutPatch As Long = Arguments(1)
Dim LongeurPatch As Integer = Len(Arguments(2))
' ----------- Lecture du fichier ------------------------------
Dim FluxLecture As New BinaryReader(File.OpenRead(Arguments(0))) 'on defini l'objet de lecture de fichier
Dim TableauFichier(FileLen(Arguments(0)) - 1) As Byte 'on defini les deux tableaux de bytes de la taille du fichier selectionné
FluxLecture.BaseStream.Seek(0, SeekOrigin.Begin) 'on defini le pointeur en debut de fichier
FluxLecture.Read(TableauFichier, 0, FileLen(Arguments(0))) 'on lit le fichier entier dans le tableau 1
FluxLecture.BaseStream.Flush() 'on libere le buffer
FluxLecture.Close() 'on ferme l'objet
' ----------- Modification -------------------------------------
' = CBPatch.Text
Dim Ptr As Integer
Dim PosAffiche As Long
Dim CurseurAffiche As Integer
Dim PosDeci As Long
Dim PosHexa As String
Dim ChaineAscii As String
Ptr = 1 '--------------------- Affichage des anciennes valeurs
Console.BackgroundColor = ConsoleColor.Blue
Console.ForegroundColor = ConsoleColor.Red
Console.Write("Avant patch")
Console.ForegroundColor = ConsoleColor.White
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Yellow
Console.Write("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F")
Console.BackgroundColor = ConsoleColor.Black
Console.Write(" ")
Console.BackgroundColor = ConsoleColor.Blue
Console.WriteLine("0123456789ABCDEF")
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
PosAffiche = Arguments(1)
Do While (PosAffiche > 16)
PosAffiche = PosAffiche - 16
Loop
PosDeci = Arguments(1) - PosAffiche
PosHexa = Hex(PosDeci)
If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
PosHexa = "0" & PosHexa
End If
Console.Write(" Ox" & PosHexa)
For T = Len(PosHexa) + 3 To 10
Console.Write(" ")
Next
Console.ForegroundColor = ConsoleColor.White
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Gray
CurseurAffiche = 0
ChaineAscii = ""
For T = 1 To PosAffiche
Console.Write(" ")
ChaineAscii = ChaineAscii & " "
CurseurAffiche = CurseurAffiche + 1
Next
CurseurAffiche = PosAffiche
For T = 0 To ((Len(Arguments(2)) / 2) - 1)
If Len(Hex(TableauFichier(PosDebutPatch + T))) Mod 2 <> 0 Then ' longeur impaire
Console.Write("0")
End If
Console.Write(Hex(TableauFichier(PosDebutPatch + T)) & " ")
' affichage des car ascii
If TableauFichier(PosDebutPatch + T) < 32 Then
ChaineAscii = ChaineAscii & "."
Else
ChaineAscii = ChaineAscii & Chr(TableauFichier(PosDebutPatch + T))
End If
CurseurAffiche = CurseurAffiche + 1
If CurseurAffiche > 15 Then
CurseurAffiche = 0
Console.Write(ChaineAscii)
ChaineAscii = ""
Console.WriteLine()
PosDeci = PosDeci + 16
PosHexa = Hex(PosDeci)
If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
PosHexa = "0" & PosHexa
End If
Console.Write(" Ox" & PosHexa)
For TT = Len(PosHexa) + 3 To 10
Console.Write(" ")
Next
Console.ForegroundColor = ConsoleColor.White
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Gray
End If
Next T
If CurseurAffiche < 15 Then
For T = CurseurAffiche To 15
ChaineAscii = " " & ChaineAscii
Next T
End If
Console.Write(ChaineAscii)
'--------------------- Affichage des NOUVELLES valeurs
Console.WriteLine()
Console.WriteLine()
Console.BackgroundColor = ConsoleColor.Green
Console.ForegroundColor = ConsoleColor.Red
Console.Write("Apres patch")
Console.ForegroundColor = ConsoleColor.White
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Black
Console.Write("00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F")
Console.BackgroundColor = ConsoleColor.Black
Console.Write(" ")
Console.BackgroundColor = ConsoleColor.Green
Console.WriteLine("0123456789ABCDEF")
Console.BackgroundColor = ConsoleColor.Black
Console.ForegroundColor = ConsoleColor.Gray
PosAffiche = Arguments(1)
Do While (PosAffiche > 16)
PosAffiche = PosAffiche - 16
Loop
PosDeci = Arguments(1) - PosAffiche
PosHexa = Hex(PosDeci)
If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
PosHexa = "0" & PosHexa
End If
Console.Write(" Ox" & PosHexa)
For T = Len(PosHexa) + 3 To 10
Console.Write(" ")
Next
Console.ForegroundColor = ConsoleColor.White
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Gray
CurseurAffiche = 0
ChaineAscii = ""
For T = 1 To PosAffiche
Console.Write(" ")
ChaineAscii = ChaineAscii & " "
CurseurAffiche = CurseurAffiche + 1
Next
For T = 0 To ((Len(Arguments(2)) / 2) - 1)
Console.Write(Mid(Arguments(2), Ptr, 2) & " ")
Octet = Convert.ToInt32(Mid(Arguments(2), Ptr, 2), 16)
' affichage des car ascii
If Octet < 32 Then
ChaineAscii = ChaineAscii & "."
Else
ChaineAscii = ChaineAscii & Chr(Octet)
End If
TableauFichier(PosDebutPatch + T) = Octet
Ptr = Ptr + 2
CurseurAffiche = CurseurAffiche + 1
If CurseurAffiche > 15 Then
CurseurAffiche = 0
'- affiche texte en ascii
Console.Write(ChaineAscii)
ChaineAscii = ""
Console.WriteLine()
PosDeci = PosDeci + 16
PosHexa = Hex(PosDeci)
If Len(PosHexa) Mod 2 <> 0 Then ' longeur impaire
PosHexa = "0" & PosHexa
End If
Console.Write(" Ox" & PosHexa)
For TT = Len(PosHexa) + 3 To 10
Console.Write(" ")
Next
Console.ForegroundColor = ConsoleColor.White
Console.Write("│")
Console.ForegroundColor = ConsoleColor.Gray
End If
Next T
If CurseurAffiche < 15 Then
For T = CurseurAffiche To 15
ChaineAscii = " " & ChaineAscii
Next T
End If
Console.Write(ChaineAscii)
' ----------- Ecriture du fichier ------------------------------
Dim FluxEcriture As New IO.FileStream(Arguments(0), IO.FileMode.OpenOrCreate)
Try
FluxEcriture.Write(TableauFichier, 0, TableauFichier.Length)
Catch ex As Exception
Finally 'pour vb.net 2008 seulement, sinon débrouillez vous pour fermer le fichier! :p
FluxEcriture.Close()
End Try
Else
MsgBox("Aucun patch n'est défini")
Exit Sub
End If
Else
MsgBox("Il faut indiquer une position de debut pour le patch")
Exit Sub
End If
Console.WriteLine()
Console.WriteLine()
Console.ForegroundColor = ConsoleColor.White
Console.WriteLine("Operation terminée")
End Sub
Sub CreationCopieSecurité()
Dim DateHeure As String
DateHeure = My.Computer.Clock.LocalTime.ToString
Dim ExtentionSecours As String = Replace(DateHeure, "/", "_")
ExtentionSecours = Replace(ExtentionSecours, ":", "_")
ExtentionSecours = Replace(ExtentionSecours, " ", "_")
Dim x As FileInfo = New FileInfo(Arguments(0))
x.CopyTo(Arguments(0) & "." & ExtentionSecours)
Console.WriteLine("Sauvegarde du fichier sous " & Arguments(0) & "." & ExtentionSecours)
Console.WriteLine()
End Sub
End Module
Conclusion
Oblige d'utiliser un éditeur hexadécimal pour modifier un fichier de façon répétitive, j'ai développé (vite fait) un bout ce code.
Ce programme en mode console, tout simple peut être appelé à partir d'un fichier bat.
exemple de fichier bat pour lancer 4 patch sur le même fichier ------------------------------------------ ----------------------------- echo patch d:\tools\patch D:\Save.adf 25548 007F S a d:\tools\patch D:\Save.adf 25550 007F a d:\tools\patch D:\Save.adf 25578 FF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7FFF7F a d:\tools\patch D:\Save.adf 25642 0A0A0A0A0A0A0A0A0A0A a ------------------------------------------------ -----------------------
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Patcher msn en hexadecimal et vb [ par AlexPoulard ]
Bonjour,j'ai un petit probleme :je voudrais créer un patch pour msn messenger. Je m'explique :Msn messenger récupere sur internet un fichier xml ou so
Script VBS = petit pb d'écriture dans un fichier !!! [ par tribipod08 ]
Bonjour, voilà un de mes copains m'a écrit un script VBS, je lui aurai bien de mander, mais je ne sait pas communiquer avec les morts !!!&nb
je veux executer une commande dos [ par nablimohavb ]
Bonjoursj'ai une imprimante(pour etiquette) ,elle recoit un fichier texte.txt contenant les format et les données à imprimer ,la commande d'impression
Fichier externe [ par Goth25 ]
Bonjour à tous,Par mon application, j'ouvre une batch file a l'aide de cette ligne de commande : System.Diagnostics.Process.Start("C:\WINDOWS\Commande
Remplacement de caractere ! [ par Marneus73 ]
Bonsoir à tous,J'ai un petit problème avec l'invite de commande: J'enregistre le contenu d'une RichTextBox dans un doc texte avec l'extension .bat, pu
Help ligne de commande click droit fichier. [ par nilufacou ]
Mon application a une ligne de commande comme ci dessous :app.exe ~file$Je voudrais que cette ligne de commande se lance lors d'1 click roit sur 1 fi
Help ligne de commande click droit fichier. [ par nilufacou ]
Mon application a une ligne de commande comme ci dessous :app.exe ~file$Je voudrais que cette ligne de commande se lance lors d'1 click roit sur 1 fi
commande ftp "stor" avec winsock [ par Kihii ]
petite incomprehension de ma part pour l'utilisation de la commande stor. Avec un winsock connecte a un serveur, j'envoie la commande "stor NomduFichi
Executer une commande DOs dans un fichier VBS [ par WaReZ_CarTmaN ]
Salut @ tous. Je souhaiterais executer une commande DOS de type NET SEND dans un fichier .VBS. J'arrive à executer un fichier comme ceci : Set
[macro Access] ouvrir fichier excel [ par rodrigue62 ]
Bonjour, j'ai réalisé une macro dans laquelle j'aimerai entre autre ouvrir un fichier excel particulier, j'ai donc utilisé la commande ExécuterApplica
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : DATAREPORTRE : DATAREPORT par cmarcotte
Cliquez pour lire la suite par cmarcotte
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|