Chose promise, chose due.
Petit programme de stéganographie en VB6, qui permet d'insérer du texte dans une image bmp.
Je tiens à préciser que ce topic n'est en aucun cas un tutoriel sur le VB6, et qu'un minimum de connaissances du langage seront nécessaires; je joint malgrès tout deux captures afin que les débutants puissent plus facilement associer les différents éléments graphiques du programme aux fonctions utilisées dans le code.
[b:51dc4878f1]Form1.frm[/b:51dc4878f1]
[img:51dc4878f1]http://images3.hiboox.com/images/1408/hv33m5ho.png[/img:51dc4878f1]
[code:1:51dc4878f1]Function bin(nombre As Byte) As String
Dim nombreB As String
If nombre >= 128 Then
nombreB = nombre - 128
Else
nombreB = "0"
End If
If nombre >= 64 Then
nombreB = nombreB & "1"
nombre = nombre - 64
Else
nombreB = nombreB & "0"
End If
If nombre >= 32 Then
nombreB = nombreB & "1"
nombre = nombre - 32
Else
nombreB = nombreB & "0"
End If
If nombre >= 16 Then
nombreB = nombreB & "1"
nombre = nombre - 16
Else
nombreB = nombreB & "0"
End If
If nombre >= 8 Then
nombreB = nombreB & "1"
nombre = nombre - 8
Else
nombreB = nombreB & "0"
End If
If nombre >= 4 Then
nombreB = nombreB & "1"
nombre = nombre - 4
Else
nombreB = nombreB & "0"
End If
If nombre >= 2 Then
nombreB = nombreB & "1"
nombre = nombre - 2
Else
nombreB = nombreB & "0"
End If
If nombre >= 1 Then
nombreB = nombreB & "1"
nombre = nombre - 1
Else
nombreB = nombreB & "0"
End If
bin = nombreB
End Function
Function b10(bits As String) As Byte
Dim nombre As Byte
nombre = 0
If Mid(bits, 1, 1) = "1" Then nombre = 128
If Mid(bits, 2, 1) = "1" Then nombre = nombre + 64
If Mid(bits, 3, 1) = "1" Then nombre = nombre + 32
If Mid(bits, 4, 1) = "1" Then nombre = nombre + 16
If Mid(bits, 5, 1) = "1" Then nombre = nombre + 8
If Mid(bits, 6, 1) = "1" Then nombre = nombre + 4
If Mid(bits, 7, 1) = "1" Then nombre = nombre + 2
If Mid(bits, 8, 1) = "1" Then nombre = nombre + 1
b10 = nombre
End Function
Private Sub Steganoin_Click()
Dim i, j As Integer
Dim octet, octet2 As Byte
Dim octetbin, octetbin2 As String
Open Stegfile.Text For Binary Access Read As #1
Open Stegfile.Text For Binary Access Write As #2
i = 0
j = 0
For j = 1 To Len(Stegtext.Text)
octet = Asc(Mid(Stegtext.Text, j, 1))
octetbin = bin(octet)
For i = 1 To 8
Get 1, i + ((j - 1) * 8) + 100, octet2
If Mid(bin(octet2), 8, 1) = Mid(octetbin, i, 1) Then
Else
octetbin2 = Left(bin(octet2), 7) & Mid(octetbin, i, 1)
Put 2, i + ((j - 1) * 8) + 100, b10(octetbin2)
End If
Next
Next
Close #1, #2
Screen.Text = "Code injecté dans " + (Stegfile.Text) + "."
End Sub
Private Sub Steganoopen_Click()
frmPicture.Show 1
End Sub
Private Sub Steganoout_Click()
Dim i, j As Integer
Dim octet As Byte
Dim octetbin As String
Stegtext.Text = ""
Open Stegfile.Text For Binary Access Read As #1
i = 0
j = 0
For j = 1 To 200
octetbin = ""
For i = 1 To 8
Get 1, i + ((j - 1) * 8) + 100, octet
octetbin = octetbin & Right(bin(octet), 1)
Next
Next
Close #1, #2
End Sub[/code:1:51dc4878f1]
[b:51dc4878f1]formPicture.frm[/b:51dc4878f1]
[img:51dc4878f1]http://images3.hiboox.com/images/1408/1wdfmh58.png[/img:51dc4878f1]
[code:1:51dc4878f1]Private Sub Command1_Click()
Unload Me
End Sub
Private Sub Command2_Click()
On Error GoTo Annuler
If Right$(Dir.Path, 1) = "\" Then
Nom = Dir.Path + File.FileName
Else
Nom = Dir.Path + "\" + File.FileName
End If
Form1.Stegfile.Text = Nom
Annuler:
Unload Me
End Sub
Private Sub Drive_Change()
Dir.Path = Left$(Drive.Drive, 2) + "\"
File.Path = Dir.Path
File.Pattern = "*.bmp"
End Sub
Private Sub Dir_Change()
File.Path = Dir.Path
File.Pattern = "*.bmp"
End Sub
Private Sub Form_Load()
Drive.Drive = "c:\"
Dir.Path = "c:\"
File.Path = "c:\"
File.Pattern = "*.bmp"
End Sub[/code:1:51dc4878f1]
Vous aurez remarqué la présence du bout de code suivant:
[code:1:51dc4878f1]Screen.Text = "Code injecté dans " + (Stegfile.Text) + "."[/code:1:51dc4878f1]
Sur les images, rien ne correspond à Screen.Text; cet écran était intégré à la plate-forme, et il vous faudra l'incorporer au programme, ou supprimer le code correspondant à son utilisation.
Voilà. C'est un vieux programme, j'ai sûrement récupéré les déclarations quelque part à l'époque, et je l'ai intégré à une plate forme multi-outils. Je pense que ce peut être une bonne première approche de la stéganographie en VB6.
Je ne l'ai jamais retouché depuis, libre à vous de le faire... ;)
[b:51dc4878f1][[/b:51dc4878f1][i:51dc4878f1]Je viens juste de le tester, et il ne fonctionne pas. Le sujet étant prêt, je vous le livre tout de même, et apporterai les modifications s'il y a lieu (il se peut que le bug vienne d'une autre fonction de la plate forme, et que l'outil fonctionne très bien indépendamment).
Toutes mes excuses, je vois pour réparer ça au plus vite...[/i:51dc4878f1][b:51dc4878f1]][/b:51dc4878f1]
Pour la Liberté...
HackAngel