Soyez le premier à donner votre avis sur cette source.
Vue 6 622 fois - Téléchargée 889 fois
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
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.