protéger ses pixels

Programmation avancée de jeux en PureBasic

souhaitez vous protéger vos pixels savamment assemblés ?

oui, je le veux
9
41%
non, car j'ai ma propre méthode top secrète
7
32%
je m'en fiche car je met tout en data
6
27%
 
Nombre total de votes : 22

Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Dobro a écrit :
beauregard a écrit : J'ai une idée*: un code gardien, chargé de surveiller tout les sites d'échanges et dès qu'une application pb est détecté, hop, le gardien rentre en action...

ha ? comment tu fais pour reperer une application Pb ?? 8O
+1 si tu trouves t'es M$$

Je mets mon logiciel coco_le_logiciel_ultime.exe dans un fichier appli.zip que je partage, je vois pas comment ton gardien serait voir que dans le zip y'a un soft PB...
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Bonjour,

j'ai 3 solutions à proposer :

1)

Code : Tout sélectionner

CreateImage(0,100,100)
SetClipboardImage(0)
ça remplace l'image mise dans le Clipboard avec une image noire de 100x100.

2) brouiller le DC(0) !

Code : Tout sélectionner

#SRCCOPY = $CC0020
DC = GetDC_(0)
BitBlt_
etc..
3)
utiliser l'accélération matériel pour l'affichage !
Donc toutes captures d'écran devient impossible !
Exemple : quand vous visionnez un film sur PC , une fois que vous capturez l'image , vous aurez toujours une image noire légèrement mauve.

:wink:
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

merci :)
kwandjeen
Messages : 204
Inscription : dim. 16/juil./2006 21:44

Message par kwandjeen »

Pour les touches et le clipboard on peut tout intercepter donc c'est très facile bloquer ou plutot tromper comme le code posté ci-dessus

J'ai fait une sorte de keylogger, je scanne le clipboard pour savoir les infos qui y sont dedans comme ça s'il s'agit d'une image tu la bloques mais tu laisse faire pour du texte. De plus tu peux demander quelle application à mis l'image dans le clipboard.

Cherche dans le forum j'ai posté ça il n'y a pas longtemps :)

Code : Tout sélectionner

process_clipboard = GetClipboardOwner_() ; recherche process qui utilise le presse_papier
Pour intégrer un marqueur si tu veux à l'image

Code : Tout sélectionner

      SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Taille_Ecran.RECT, 0)
      Largeur_Ecran = Taille_Ecran\right - Taille_Ecran\left
      Hauteur_Ecran = Taille_Ecran\bottom - Taille_Ecran\top

      DC = GetDC_(0) ;en étant à 0 on retrouve le display de l'écran entier
      CreateImage(0, Largeur_Ecran, Hauteur_Ecran)
      Dessin = StartDrawing(ImageOutput(0))
      BitBlt_(Dessin, 0, 0, Largeur_Ecran, Hauteur_Ecran,DC, Taille_Ecran\left, Taille_Ecran\top, #SRCPAINT)
      StopDrawing()
      ReleaseDC_(0, DC) [code]
[/code]

http://www.purebasic.fr/french/viewtopi ... ht=malware
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

kwandjeen a écrit :Pour les touches et le clipboard on peut tout intercepter donc c'est très facile bloquer ou plutot tromper comme le code posté ci-dessus

J'ai fait une sorte de keylogger, je scanne le clipboard pour savoir les infos qui y sont dedans comme ça s'il s'agit d'une image tu la bloques mais tu laisse faire pour du texte. De plus tu peux demander quelle application à mis l'image dans le clipboard.

Cherche dans le forum j'ai posté ça il n'y a pas longtemps :)

Code : Tout sélectionner

process_clipboard = GetClipboardOwner_() ; recherche process qui utilise le presse_papier
Pour intégrer un marqueur si tu veux à l'image

Code : Tout sélectionner

      SystemParametersInfo_(#SPI_GETWORKAREA, 0, @Taille_Ecran.RECT, 0)
      Largeur_Ecran = Taille_Ecran\right - Taille_Ecran\left
      Hauteur_Ecran = Taille_Ecran\bottom - Taille_Ecran\top

      DC = GetDC_(0) ;en étant à 0 on retrouve le display de l'écran entier
      CreateImage(0, Largeur_Ecran, Hauteur_Ecran)
      Dessin = StartDrawing(ImageOutput(0))
      BitBlt_(Dessin, 0, 0, Largeur_Ecran, Hauteur_Ecran,DC, Taille_Ecran\left, Taille_Ecran\top, #SRCPAINT)
      StopDrawing()
      ReleaseDC_(0, DC) [code]
[/code]

http://www.purebasic.fr/french/viewtopi ... ht=malware
heu, c'est un peu compliqué, et cela ralentis sévèrement.

La méthode simplette qui fonctionne, intégré dans le jeu vers l'infini,
juste après le début de la boucle principale, que voici:

Code : Tout sélectionner

; ******************************************************************************************************
Repeat ; Boucle principale
; ******************************************************************************************************
 Event= WindowEvent ()
le précieux petit code que voilà:

Code : Tout sélectionner

  If CreateImage(0,26,20)
    StartDrawing(ImageOutput(0))
      Box(0,0,26,20,RGB(255,255,255))
      Circle(13,10,5,RGB(255,0,0))
    StopDrawing()
    SetClipboardImage(0)
  EndIf
il y a toutefois un truc qui me chiffonne, c'est que l'image 0 est fabriquée en permanence, cela ne semble pas entraver quoi que ce soit. Qu'en pensez-vous?


Les commandes suivantes sont mystérieuses pour moi:

Code : Tout sélectionner

 DC(0)
GetDC_(0)
:?:
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Message par Mytic »

Vous faites cette opération qu'une seule fois :

Code : Tout sélectionner

  If CreateImage(0,26,20)
    StartDrawing(ImageOutput(0))
      Box(0,0,26,20,RGB(255,255,255))
      Circle(13,10,5,RGB(255,0,0))
    StopDrawing()
  EndIf
après vous utilisez cette fonction en boucle :

Code : Tout sélectionner

    SetClipboardImage(0)
:idea:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Le cryptage le plus bête consiste à utiliser le système de compression de fichier de PB.
Ensuiet, si tu veux corser, tu véroles la compression en ajoutant ou en modifiant certaine valeur.
Par exemple, tous les 7 bytes, la valeur est inversé avec un XOR
Et voilà, déjà, faut avoir un bon niveau en programmation pour retrouver l'image source.
A mon avis, simplement la compression suffit
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Mytic a écrit :après vous utilisez cette fonction en boucle :

Code : Tout sélectionner

    SetClipboardImage(0)
:idea:
ah oui, maintenant c'est bien clair dans mon esprit, merci :)
Le Soldat Inconnu a écrit :Le cryptage le plus bête consiste à utiliser le système de compression de fichier de PB.
heu, oui, mais comment procède-t-on ? s'agirait-il de l'Encodage du fichier source( texte brut ou UTF-8 ) ?
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Je parlais pour les fichiers images source *.jpg ou *.bmp ou ce que tu veux.
Si tu les compresses avec le packer de pb, déjà, ca protége pas mal

Après pour le printscreen, ca devient plus compliqué, faut vider le presse papier dès qu'on voit qu'il y qlqchose dedans
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Le Soldat Inconnu a écrit :Je parlais pour les fichiers images source *.jpg ou *.bmp ou ce que tu veux.
Si tu les compresses avec le packer de pb, déjà, ca protége pas mal

Après pour le printscreen, ca devient plus compliqué, faut vider le presse papier dès qu'on voit qu'il y qlqchose dedans
ah, et bien cela me rassure :) . Je me souviens, c'était au mois de juin, j'avais quelques difficultés pour y arriver, pis je me suis rendu compte de mon erreur( ne pas confondre CatchSprite et CatchImage)...
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

La plupart des screenshot sont faites sur le web..
il doit pas être trop dur de repérer les handle de IE, Firefox, Opera, et Chrome (les 4 principaux navigateurs sur windows) et de surveiller le clavier.

Si printscreen est pressé alors vider le clipboard.

Vous pensez pas que c'est gérable dans un thread en boucle ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Bon encore plus con que mon idée précédente, vider le clipboard toutes les demi-secondes... ça marche bien...
Bon ça empeche aussi tout copier/coller mais bon..

Code : Tout sélectionner

;Nettoyage du clipboard toute les demi sec.
; Par Ar-S - PB 4.20

Enumeration
  #Window_0
EndEnumeration

Procedure VideClipboard()
  Repeat
    ClearClipboard()
    Delay (500)
  ForEver
EndProcedure


If OpenWindow(#Window_0, 619, 413, 192, 69, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
  If CreateGadgetList(WindowID(#Window_0))
  EndIf
  CreateThread(@VideClipboard(), 1)
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Window_0
            CloseWindow(#Window_0)
            End
        EndSelect
    EndSelect
  ForEver
EndIf
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message par beauregard »

Ar-S a écrit :Bon encore plus con que mon idée précédente, vider le clipboard toutes les demi-secondes... ça marche bien...
Bon ça empeche aussi tout copier/coller mais bon..
testé avec le jeu vers l'infini avec joie :)
Image
je pense que tu as trouvé là une bien belle solution. Faut juste ne pas oublier de cocher la case "activer la gestion des threads" dans options du compilateur pour éviter tout soucis comme indiqué dans la doc.

un autre truc de la doc:
Note: Les threads doivent être utilisés avec précaution, car il est possible que des ressources partagées (mémoire, fichiers, variables etc..) soient accédées au même moment ce qui causera des résultats aléatoires. Les commandes relatives aux 'Mutex' peut être utilisées pour synchroniser ces ressources partagées.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Message par case »

pour moi c'est quand même une perte de ressources pour rien :)

je suis presque sur que la plupart des logiciels de copie d'écran n'utilisent pas le clipboard :)

http://www.clubic.com/telecharger-fiche ... creen.html

voila avec ce genre de truc je vois pas trop comment tu peux protéger tes screen ingame.
ImageImage
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Tu as raison Case,
Un logiciel de ce genre ne permet pas à mon soft d'éviter la capture je viens de tester. Mais bon, ça élimine déjà pas mal de monde voulant capturer des images sans soft annexes.
P.S : je ne connaissais pas ce logiciel "printscreen", il est excellent ;)

Au pire faire le barbare (droopy lib necessaire pour tester ce code) en ajoutant

Code : Tout sélectionner

PS$=Str(GetPidProcess("printscreen.exe"))

If PS$<>"0"
  KillProcess(Val(PS$))
  MessageRequester("Info","Attention, un logiciel de capture d'ecran a été detecté et fermé"+Chr(10)+"L'utilisation d'un tel logiciel est interdit blablabla lors de l'utilisation"+Chr(10)+"de mon super jeu de la mort qui tue que je veux rien qu'on me pique même si c'est impossible ",#MB_ICONINFORMATION)
Else
  MessageRequester("Nop","Pas de printscreenquitourne",#MB_ICONINFORMATION)
EndIf


@Beauregard,
Je ne maitrise pas du tout l'emploi des thread et mutex, ça reste un peu du chinois pour moi dans la doc :(
Mais c'était pour l'exemple 8)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Répondre