Les techniques de protection du logiciel
|
|
|
- Laure Truchon
- il y a 10 ans
- Total affichages :
Transcription
1 Travail d'études Licence Informatique Les techniques de protection du logiciel Julien BURLE Térence SCALABRE Encadré par Mr Pierre CRESCENZO Travail d'étude: Les techniques de protection du logiciel 1/21
2 Travail d'étude: Les techniques de protection du logiciel 2/21
3 Sommaire Introduction Chapitre I : Quelques raisons de protéger le code et l'aspect juridique. 1 Différents points de vue et arguments 2 Aspect juridique Chapitre II : Techniques de protection du code source 1 Détecter l'appel système ptrace 2 Détecter les points d'arrêt (breakpoints) 3 Poser des faux breakpoints 4 Protection par code checksum 5 Faux désassemblage (false disassembly) 6 Polymorphisme 7 Strip 8 Les Obfuscateurs 9 Cryptage 10 Conseils divers lors de l'implémentation de protection Conclusion Travail d'étude: Les techniques de protection du logiciel 3/21
4 Travail d'étude: Les techniques de protection du logiciel 4/21
5 Comment un développeur peut essayer de protéger efficacement les secrets de son programme? Intéressons nous de plus prés à l'intérêt de protéger son code et aux différentes techniques mise en oeuvre dans le langage C sous un environnement UNIX. Chapitre I : Quelques raisons de protéger le code et le point de vue légal Doit on protéger ses code sources et pour quelles raisons? Sommes-nous légalement protégé contre l'utilisation du code source de notre logiciel? Il existe différents points de vue sur le fait ou non de protéger son code. De plus les raisons varient celon les créateurs de logiciels (grandes entreprises, petit programmeur etc...). Alors que les points de vue diffèrent, les idées sont arrêtées, essayons de présenter les arguments en faveur ou contre la protection du logiciel au niveau juridique mais aussi au niveau du développement. 1 - Pourquoi protéger son code? Cela peut empêcher l'utilisation du code source de notre programme dans le but d'en tirer profit, où d'accéder aux technologies mise en ouvre dans le logiciel. C'est aussi un bon moyen de s'assurer qu'un client ne fasse pas de mise à jour sans autorisations. D'autre part cela permet d' empêcher des personnes mal intentionnées de trouver des failles par une analyse du code source et de s'en servir contre le programme. Par exemple : les créateurs du ver Blaster se sont servis d'une mise à jour de Windows, pour repérer une faille dans le système d'exploitation et ainsi déployer leur virus. Mais cela présente aussi de nombreux inconvénients. Par exemple ces techniques empêchent la plupart du temps quiconque d'améliorer le programme (ce qui peut être fait gratuitement). De plus laisser son code visible par tous peut aussi être un bon moyen de se faire connaître. Si le code est bon, les personnes qui le verront seront s'en souvenir. Enfin protéger ses programmes coûtent très cher, en temps et en argent. Cet investissement pourrait être mieux utiliser pour l'amélioration du programme et de ces performances. 2 - L'aspect juridique La loi Française nous protège dans la plupart des cas contre le piratage et l'espionnage industriel. Un logiciel est protégé de la décompilation par le droit commun d'une part (art du nouveau code pénal) sur le fait de pénétrer dans un système, élément de la propriété d'autrui. Et d'autre part, le logiciel trouve une protection dans le droit d'auteur. Celui-ci interdit en effet la décompilation en France. L'œuvre logiciel est alors considérée comme une œuvre de l'esprit. Effectivement, le programme d'ordinateur n'étant pas lisible d'emblée; pour accéder aux éléments de fond, on doit le traduire dans un langage compréhensible (ce qui revient à le décompiler), et donc toucher à sa forme. Or le droit d'auteur interdit les actes de reproduction et de traduction auxquels la décompilation s'assimile. Cette forme de protection devient une arme absolue contre la décompilation. Travail d'étude: Les techniques de protection du logiciel 5/21
6 La décompilation est toutefois tolérée sous certaines conditions par la Directive de mai 1991 (Dir con. CE n , 14 mai 1991, article 6, JOCE 17 mai 1991, n L.122, p.42) et la loi française en reprend les dispositions dans l'article L du code de propriété intellectuelle. Le but avoué de la décompilation est d'assurer l'interopérabilité, c'est-à-dire l'articulation des logiciels les uns avec les autres. Des conditions restrictives, protectrices du droit des auteurs de logiciels originaux sont posés par les textes : celui qui décompile doit être fondé à utiliser le logiciel il ne doit pas avoir les informations par une autre voie la décompilation est strictement limitée au nécessaire l'information acquise ne sert qu'à la réalisation de l'interopérabilité on ne peut écrire un nouveau logiciel à partir d'un logiciel décompilé Le conseil européen a proposé le 18 mai 2004, une directive sur la brevetabilité des inventions mise en oeuvre par ordinateur. Ce qui rendrai le droit d'auteur du logiciel inutile. La brevetabilité des logiciels pourrait contraindre les acteurs du logiciel libre à des dépôts de brevets défensifs, qui détournent leur capacité d'investissement vers des procédures contre-productives. Une entreprise pourrait ainsi déposer un brevet sur un type de fichier, un algorithme ou un logiciel. Ce qui à long terme pourrait causer la mort du logiciel libre. Mais peu importe les raisons de le faire, financières, personnel ou par orgueil. Les techniques de protections existent. A nous de savoir si il faut où non les utiliser. Et donc de savoir comment les utiliser. Travail d'étude: Les techniques de protection du logiciel 6/21
7 Chapitre II : Techniques de protection du code source Nous pouvons distinguer plusieurs types de protections : dans un premier temps des techniques qui vont empêcher le rétro-ingénieur(ou «reverser» en anglais) d'utiliser des débogueurs, ces protections sont efficaces pour ralentir la compréhension du code, dans un deuxième temps des méthodes pour protéger le code en lui même soit par des modifications de son code assembleur, soit dans un cadre plus général par des techniques autorisant l'exécution du code compilé sous certaines conditions. 1 Détecter l'appel système ptrace L'appel système ptrace sert, sous UNIX, à déboguer les processus. Il permet de tracer un processus et de lui faire faire ce que l'on souhaite : changer sa mémoire, modifier ses registres... L'utilisation primordiale de cette fonction est l'implémentation de points d'arrêt pour le débogage (Ce syscall est utilisé par tous les débogueurs sous UNIX comme gdb, strace...) On peut alors exécuter le code, instructions par instructions ce qui est extrêmement utile au reverser. Un processus peut donc prendre des mesures anti-ptrace, afin de ne pas être tracé. Cette technique utilise le fait qu'un processus ne peut pas être tracé plusieurs fois et il peut se tracer lui même à l'aide de la requête TRACEME. Nous pouvons donc vérifier si notre programme est débogué ou pas. Voici les détails sur ptrace : synopsis #include <sys/ptrace.h> int ptrace(int request, int pid, int addr, int data); valeur renvoyée ptrace renvoie 0 s'il réussit, ou -1 s'il échoue, auquel cas errno contient le code d'erreur. Si un ptrace est en cours et que l'on tente un deuxième ptrace dessus, le deuxième va échouer. Il va donc suffire au processus d'essayer de se tracer et de vérifier la valeur de retour de ptrace : si elle est égale à -1, il est alors tracé, sinon tout va bien. Voici un code illustrant cette technique : #include <stdio.h> #include <stdlib.h> #include <sys/ptrace.h> int main(void) { if (ptrace(ptrace_traceme, 0, 1, 0) < 0) { printf("debugging... Bye\n"); return 1; printf("hello\n"); return 0; Travail d'étude: Les techniques de protection du logiciel 7/21
8 Testons le code : burlej@var > gcc -o test_ptrace test_ptrace.c burlej@var > test_ptrace Hello burlej@var > gdb -q test_ptrace (gdb) run Starting program: /u/linfo/burlej/te/test/test_ptrace DEBUGGING... Bye Program exited with code 01. La protection fonctionne, on notera que l'on peut appliquer la même méthode à la fonction strace. Dans cette exemple nous envoyons explicitement un message d'erreur sur stdout, pour plus d'efficacité, nous pouvons n'émettre aucun message d'erreur. Cette méthode est très simple à réaliser mais un reverser chevronné pourra par exemple supprimer le TRACEME ou commencer le débogage une fois le test passé. Il est aussi possible d'intervenir au niveau du kernel pour modifier le comportement de ptrace. 2 Détecter les points d'arrêt (breakpoints) Un breakpoint sert, dans les débogueurs à faire une pause ou à stopper l'exécution d'un processus à un instant donné. Pour observer, changer un registre ou un emplacement de la mémoire, un reverser va poser des breakpoints. Une technique de protection passe alors par la détection de ces breakpoints dont l'instruction assembleur est int3 (l'opcode correspondant est 0xCC). Lorsqu'un débogueur met un breakpoint à une certaine adresse, il sauve l'opcode courant pour mettre à la place 0xCC. Quand un code exécute l'instruction int3, il reçoit un signal SIGTRAP. Pour se protéger des breakpoints, on va donc scanner notre code à la recherche de l'opcode 0xCC. Voici un exemple mettant en oeuvre cette technique : #include <stdio.h> #include <stdlib.h> void foo(void) { printf("salut\n"); int main(void) { unsigned long *i; /* la boucle cherche des breakpoints dans la fonction foo() */ for(i = (unsigned long *)foo; i < (unsigned long *)main; i++) { if(((*i & 0xff) == 0xcc) ((*i & 0xff00) == 0xCC) ((*i & 0xff0000) == 0xCC) ((*i & 0xff000000) == 0xCC)) { /* si un opcode est 0xCC */ printf("breakpoint detecte \n"); /* on quitte le programme */ exit(exit_failure); foo(); return 0; Travail d'étude: Les techniques de protection du logiciel 8/21
9 On compile: ~/te/test> gcc -o test_bp test_bp.c ~/te/test> test_bp Salut ~/te/test> gdb -q test_bp (gdb) b foo # on place un breakpoint au debut de la fonction foo Breakpoint 1 at 0x804835c (gdb) run Starting program: /u/linfo/burlej/te/test/test_bp Breakpoint detecte Program exited with code 01. Cette protection fonctionne. Le seule problème de cette technique est qu'un programme peut contenir l'opcode 0xCC sans que ce soit forcément un breakpoint, nous provoquons alors un arrêt involontaire. Nous pouvons cependant prévoir des exceptions ou faire en sorte que les fonctions sensibles que l'on contrôle n'en contiennent pas. 3 - Poser des faux breakpoints Cette méthode s appuie toujours sur l utilisation des breakpoints comme la précédente. Comme nous avons vu lorsqu un programme rencontre un opcode 0xCC, il reçoit un signal SIGTRAP. Lorsque le débogueur voit un 0xCC, il met en pause le programme et attends l'instruction de continuer. Le comportement par défaut d un processus lorsqu il reçoit un SIGTRAP est de quitter. Cette technique consiste donc à changer ce comportement par défaut grâce à la fonction signal appliquée à SIGTRAP. Voici un exemple : #include <stdio.h> #include <signal.h> #include <unistd.h> #include <stdlib.h> void sighandler(int signal) { /* si le processus n'est pas tracé on arrive ici */ printf("le pass est \"salut\"\n"); exit(0); int main(void) { /* on place le sighandler */ signal(sigtrap,sighandler); /* on place un faux breakpoint */ asm ("int3"); /* le debogueur arrive ici */ printf("pris au piege\n"); return EXIT_FAILURE; Travail d'étude: Les techniques de protection du logiciel 9/21
10 L execution normale du programme nous donne comme résultat : burlej@tamanrasset ~/te/test> gcc -o test_fauxbp test_fauxbp.c burlej@tamanrasset ~/te/test> test_fauxbp Le pass est "salut" Avec gdb : burlej@tamanrasset ~/te/test> gdb -q test_fauxbp (gdb) run Starting program: /u/linfo/burlej/te/test/test_fauxbp Program received signal SIGTRAP, Trace/breakpoint trap. 0x080483d3 in main () (gdb) cont Continuing. pris au piege Program exited with code 01. (gdb) quit Lors de l exécution normale du code, la fonction asm ( int3 ); (le breakpoint) va lancer le sighandler. Si le code est débogué, il va continuer avec les instructions suivant l int3. Comme auparavant il est préférable de ne pas mettre de signal d'erreur (nous les avons placés pour l'exemple). Ces trois techniques interviennent au niveau de l utilisation des appels système ptrace, strace utilisées par les débogueurs, ou sur le principe de fonctionnement des débogueurs (Nous avons vu alors la gestion des points d'arrêt comme protection). Voyons maintenant des techniques se basant sur d autres types de protections visant a gêner ou empêcher le désassemblage 4 - Protection par code checksum Voici une protection élégante du code, elle se base sur le code original du programme (au niveau assembleur) et vérifie par un algorithme que celui ci n ait pas été modifié. Cette protection gène considérablement le reverser qui en modifiant le code binaire pour simplifier le code (en enlevant des techniques de protections connues qu il rencontre par exemple) va empêcher le programme de fonctionner. L algorithme va donc autoriser le programme à s exécuter que si le nombre d opcodes n a pas changé. Travail d'étude: Les techniques de protection du logiciel 10/21
11 Voici un programme en assembleur, il contient une partie que nous allons ensuite essayer de protéger efficacement (la partie coool), tout d'abord voyons comment un reverser peut facilement sauté sur cette partie..globl main main: cmp $1,%al je coool pascoool: /* exit(0); */ exit: xorl %ebx,%ebx inc %eax int $0x80 coool: movb $4, %al // 4 = SYS_write xorl %ebx,%ebx inc %ebx // 1 = STDOUT movl $chaine,%ecx // l adresse de Gagne xorl %edx,%edx mov $8,%edx // on ecrit 8 octets int $0x80 // on execute le syscall write jmp exit chaine:.string Gagne!\n Pour l'instant, ce programme quitte tout de suite à cause de l'instruction cmp $1,%al suivi de je coool (je fais un saut à l'adresse indiquée en cas d'égalité). Modifions maintenant le binaire grâce au programme hexedit (un éditeur hexadécimal) pour que le programme saute tout le temps sur coool. Nous remplaçons : : 3c 01 cmp $0x1,%al : je <coool> Par : : 3c 01 cmp $0x0,%al : je <coool> Un seul octet est modifié dans le binaire : au lieu de comparer %al avec 1 on le compare avec 0 (pour avoir une égalité en résultat de la comparaison et ainsi sauter sur l'instruction coool qui nous intéresse). burlej@rome ~/te/test> test_checksum Gagne! Travail d'étude: Les techniques de protection du logiciel 11/21
12 Pour contrer ce genre d'attaque (on modifie une valeur à comparer pour sauter vers une autre instruction) nous allons utiliser la technique de protection par code checksum. Nous faisons la somme de tous les opcodes contenus dans le main jusqu'à coool, on obtient le résultat 0xfef, soit Voici le nouveau code :.globl main main: jmp checksum rett: cmp $1,%a1 je coool pascoool: exit: coool: jmp exited checksum: xorl %ebx,%ebx mov $checksum,%ecx sub $main,%ecx // boucle de main jusqu'à checksum mov $main,%esi // on part de main boucle: lodsb add %eax,%ebx // la somme dans ebx loop boucle cmpl $4079,%ebx jne baaad // si la somme est fausse jmp rett baaad: // message d'erreur jmp exit Si maintenant nous changoens une partie du code avec hexedit, par exemple le cmp $1, %al en cmp $0,%al, la somme de tout le code va changer (elle est décrémentée de 1). ~/te/test/> checksum #normal ~/te/test/> hexedit checksum ~/te/test/> checksum #modifié Bad! Le checksum a été alerté. Notons que ce type de protection doit être étroitement liée au partie vitale du programme pour plus d'efficacité (On peut faire un checksum sur une plus petite partie du programme et non sur le code entier). Enfin si le checksum est faux nous pouvons directement planté le PC pour gêner le reverser. (la séquence d'instruction F0 0F C7 C8 peut être utilisée pour planter un Pentium). Travail d'étude: Les techniques de protection du logiciel 12/21
13 5 Faux désassemblage (false disassembly) Cette technique permet de fausser les résultats du désassemblage du code. Nous allons pour cela rajouter dans notre code les opcodes d'un jump vers des instructions que nous voulons exécuter, et entre les opcodes du jump et ces instructions mettre de faux opcodes destinés à faire perdre l'alignement du code désassemblé. Le but est de brouiller le code pour compliquer la tache du reverser. Voici un exemple en assembleur pour illustrer cette technique (en ASM syntaxe AT&T). Ce code lit une chaîne sur l'entrée standard et la compare avec le mot de passe pass. Good est écrit sur la sortie standard si le mot de passe est bon, et Bad est écrit si il est mauvais..globl main main: movb $3,%al // 3 = SYS_read xorl %ebx,%ebx // 0 = STDIN movl %esp,%ecx // %ecx = buffer mov $4, %edx // 4 octets sont lus int $0x80 // exécute le syscall read cmpl $0x , (%ecx) // compare la chaîne de caractère rentrée avec «pass» je good // si les chaînes sont égales on saute vers good bad: // sinon on est en bad movb $4,%al // 4 = SYS_write xorl %ebx,%ebx inc %ebx // 1 = STDOUT pushl $0xa // on met «bad» dans la pile movl %esp,%ecx // on place dans %ecx l'adresse de bad xorl %edx,%edx mov $4,%edx // on écrit 4 octets int $0x80 // et on exécute le syscall write jmp exit good: movb $4,%al // 4 = SYS_write xorl %ebx,%ebx inc %ebx // 1 = STDOUT movl $cool,%ecx // l'adresse de «good» ce retrouve dans %ecx xorl %edx,%edx mov $7,%edx // on écrit 7 octets int $0x80 // on exécute le syscall write exit: inc %eax // 1 = SYS_exit xorl %ebx,%ebx // exit(0); int $0x80 // exécute le syscall exit cool:.string "Good!\n" Travail d'étude: Les techniques de protection du logiciel 13/21
14 On compile ce programme et on le teste : burlej@achille ~/te/test> gcc false_diss.s -o false_diss burlej@achille ~/te/test> echo pass false_diss Good! burlej@achille ~/te/test> echo salu false_diss bad burlej@achille ~/te/test> On désassemble le code pour examiner le main: burlej@achille ~/te/test> objdump -d false_diss false_diss: format de fichier elf32-i f4 <main>: 80482f4: 31 c0 xor %eax,%eax 80482f6: b0 03 mov $0x3,%al 80482f8: 31 db xor %ebx,%ebx 80482fa: 89 e1 mov %esp,%ecx 80482fc: ba mov $0x4,%edx : cd 80 int $0x : cmpl $0x ,(%ecx) : je <good> C'est dans la fonction main que se trouve la partie la plus intéressante pour un cracker. Nous effectuons la comparaison entre la chaîne rentrée et «pass» dans ce main. Le code n'étant pas protégé, il est très facile pour un reverser de trouver le mot de passe en analysant la ligne : cmpl $0x ,(%ecx) $0x équivaut à «pass». Maintenant, nous allons essayer de protéger la fonction main grâce à la technique de faux désassemblage. Voici le main après modifications : main: movb $3,%al xorl %ebx,%ebx movl %esp,%ecx mov $4, %edx int $0x80.ascii "\xeb\x01\xe8" cmpl $0x , (%ecx) je good Travail d'étude: Les techniques de protection du logiciel 14/21
15 La ligne ajoutée avant la comparaison n'affecte pas le code qui marche comme avant, cependant nous obtenons un code désassemblé différent : f4 <main>: 80482f4: 31 c0 xor %eax,%eax 80482f6: b0 03 mov $0x3,%al 80482f8: 31 db xor %ebx,%ebx 80482fa: 89 e1 mov %esp,%ecx 80482fc: ba mov $0x4,%edx : cd 80 int $0x : eb 01 jmp <main+0x12> : e call 6974bc8b <_end+0x f> a: jae f < libc_csu_fini+0x3> c: je <good> Après le int $0x80, le code est totalement différent par rapport au précédent. La ligne.ascii "\xeb\x01\xe8" ajoute les opcodes d'un jmp +1 (\xeb\x01), puis un opcode de début de call (\xe8) (On saute par dessus, donc). Le désassembleur va prendre le \xe8 comme le début d'un call (ce qui n'est pas le cas), et va prendre les 4 octets suivant comme l'adresse du call : : e call 6974bc8b L'alignement est donc perdu et ne va être retrouvé que plusieurs lignes après (la dernière instruction du main est la bonne je <good> ). Grâce à cette technique le code désassemblé semble incompréhensible à première vue. Même si cette technique peut être déjouer elle est utile combiner à d'autres pour camoufler du code (par exemple lorsque l'on implémente la méthode «anti-ptrace»). 6 Polymorphisme Cette technique assez lourde pour le programme peut être très utile pour décourager un cracker (ce qui en soit peut être considérer comme une protection). L'idée est que, pour arriver à un résultat voulu (par exemple placer la valeur 1 dans le registre eax) nous pouvons passer par beaucoup de tergiversations. Ces modifications vont compliquer la compréhension du code. Par exemple : movl $1,%eax peut être remplacé par : push $1 popl %eax mais aussi par : add $0x13,%eax and %eax,%eax dec %eax sub $0x11,%eax Travail d'étude: Les techniques de protection du logiciel 15/21
16 ou encore par : cdq // équivaut à un xor %edx,%edx leal 1(%edx),%eax // place 1 dans eax movl %fs,%ebx // le registre fs contient toujours 0 add %ebx,%eax // équivaut à add $0,%eax Le reverser va devoir comprendre le but de toutes ces instructions, qui peuvent parfois le dérouter. L'inconvénient de cette méthode est qu'elle ralentit le code. On peut aussi mêler des instructions inutiles et sans effets afin de faire ressembler le code à du «false disassembly». 7 Strip L'outil strip sous UNIX permet d'enlever toutes les références aux symboles dans un binaire afin de gagner de la place. Ces symboles sont utiles au linking et au débogage mais n'apportent rien au fonctionnement normal du programme. Au désassemblage, un binaire ainsi traité ne contiendra plus de références aux noms de fonctions (même pas le main). Cette technique gène le débogage et le désassemblage puisqu'il n'est plus aussi aisé de mettre un point d'arrêt sur une fonction, que l'on doit alors désigner par son adresse plutôt que par son nom. Nous pouvons regarder les effets de strip sur ce petit programme : #include <stdio.h> void fonct1(void) { printf("la fac!\n"); int main(void) { printf("salut "); fonct1(); return 0; Voici quelques tests, burlej@lima ~/te/test> gcc -o test_strip test_strip.c burlej@lima ~/te/test> test_strip Salut la fac! burlej@lima ~/te/test> strip -o test_strip2 test_strip burlej@lima ~/te/test> test_strip2 Salut la fac! Travail d'étude: Les techniques de protection du logiciel 16/21
17 Pour l'instant les deux exécutables sont les mêmes, mais analysons leur code désassemblé ~/te/test> objdump -d test_strip test_strip: format de fichier elf32-i386 Déassemblage de la section.init: <_init>: : 55 push %ebp Déassemblage de la section.text: <_start>: : 31 ed xor %ebp,%ebp <fonct1>: <main>: Dans l'exécutable normal nous retrouvons les références au main et à la fonction 1. ~/te/test> objdump -d test_strip2 test_strip2: format de fichier elf32-i <.text>: : 31 ed xor %ebp,%ebp Dans la version modifié par strip, nous ne trouvons plus aucune de ces références. 8 Les Obfuscateurs Cette méthode consiste à compliquer le code source en altérant sa lisibilité. Le but est de rendre le code source illisible, lors d'une décompilation éventuelle. Un obfuscateur transforme les noms de variables et de fonctions. Par exemple le nom de la fonction "int main()" deviendra "c e()", une lettre "H" deviendra "\x48" et les noms de variables seront moins explicites, comme par exemple "MAX_COUNT" pourra devenir "b" ou "1235". Travail d'étude: Les techniques de protection du logiciel 17/21
18 Nous avons utilisé un programme : COBF (The C/C++ Sourcecode Obfuscator/Shroude), qui nous a permis de transformer un programme simple: #include <stdio.h> #ifdef unix #define MAX_COUNT 10 #else #define MAX_COUNT 20 #endif int main() { int i; for (i = 0; i < MAX_COUNT; ++i) printf("hello %d!\n", i); return 0; qui devient: #include<stdio.h> #include"cobf.h" /* Ceci est ajouter par le programme */ #ifdef unix #define b 10 #else #define b 20 #endif c e(){c a;d(a=0;a<b;++a)f("\x48\x65\x6c\x6c\x6f\x20\x25\x64\x21\n",a) ;g 0; le fichier "cobf.h" contient: #define c int #define e main #define d for #define f printf #define g return Cette technique bien que trés utilisée, surtout en Java, n'est pas très puissante. Il suffit d'un peu de temps et de courage pour récupérer le programme source. La complexité pour retrouver tous les types de variables, fonctions et nom de variables augmentent si le programme est plus long. Même si cette technique est très simple, il est nécessaire de la connaître pour savoir la contrer (elle s'inscrit dans les techniques pouvant décourager le reverser). Travail d'étude: Les techniques de protection du logiciel 18/21
19 9 Cryptage Une méthode célèbre pour rendre le «reverse» plus difficile consiste à crypter la section TEXT (le code) directement dans le binaire. Une fois cryptée, un petit bout de code va décrypter toute la section afin que le programme s'exécute normalement. Cette méthode résiste à un désassemblage directe, elle ne ralentit pas le programme car le décryptage ne s'effectue que durant le lancement de l'exécutable. 10 Conseils utiles lors de l'implémentation de protection Ces conseils sont utiles principalement pour les programmes dans une version d'évaluation qu'un reverser va essayer de cracker (il recherchera alors un mot de passe ou une fonction manquante dans la version d'évaluation). La première astuce consiste à ne jamais laisser un mot de passe codé en clair, cela rendrait la tache du reverser vraiment trop facile. - Ensuite nous devons à tout prix éviter un test du type if( verifier_mot_de_passe() == vrai) continuer(); else arréter(); Une fonction de vérification de clé ne doit pas permettre de déchiffrer son comportement afin de créer des générateurs de clé. On pourra pour cela utiliser un RTF (Rotate through Carry to the Left) ou un RCR (Rotate through Carry to the Right) sur une valeur associée à la clé. En effet il est difficile d'effectuer l'opération inverse. Dans les zones sensibles placer beaucoup de saut conditionnels rend le reverse pénible surtout si certaines protections s'activent et plantent le PC dans les cas les plus extrêmes. Utilisez des sections critiques comme «nombre magique» pour manipuler le code. Par exemple, utilisez une portion de code pour «XORer» une partie de la clé (cette clé sera associée au fonctionnement du programme). Cela rend impossible la modification de ces portions de code. Le but est de rendre alors la gestion des clés dynamiques avec le code et en particulier les sections que le reverser tentera de modifier. Lors de l'utilisation de techniques contre les débogueurs, nous pouvons désactiver le clavier avant d'entrer dans une section critique et le réactiver ensuite, lorsque le reverser placera un point d'arrêt dans une de ces sections il ne pourra plus utiliser son clavier pour lancer une nouvelle commande notamment celle pour continuer l'exécution avec le débogueur. Il sera alors obligé de repérer où la désactivation s'opère et ensuite redémarrer pour continuer. Travail d'étude: Les techniques de protection du logiciel 19/21
20 Les techniques présentées sont assez basiques. La plupart des protections industrielles utilisent des méthodes plus élaborées qui mettent en application les principes de protection que nous avons évoquées. Cependant l'idée reste la même. En réfléchissant, nous pouvons trouver beaucoup d'idées de protections, de manières à compliquer la vie des «reverser». Cependant il nous semble illusoire de penser mettre au point une technique inviolable, une protection pourra seulement retarder le reverser déterminé. Après l'éludes de ces techniques nous pensons qu'un programmeur a tout intérêt de livrer son code source. D'une part car il ne perdra pas de temps en effectuant beaucoup de protections qui au final risque d'être contournées par les reverser les plus expérimentés (on a noté au cours de nos recherches les mines d'informations accessibles par les sites de cracker diffusant des listes de programmes crackés et la façon de contourner leur propres protections). D'autre part en rendant libre le code source, chaque programmeur peut corriger des bugs, des failles de sécurité qui au final renforceront le programme. Les groupes de programmation open-source en sont les meilleurs exemples. Travail d'étude: Les techniques de protection du logiciel 20/21
21 Quelques définitions: Interopérabilité : Capacité qu'ont deux systèmes à se comprendre l'un l'autre et à fonctionner en synergie. Contraire: incompatibilité. Rétro-ingénierie ou ingénierie inverse (reverse-engineering) : reconstituer les sources ou le modèle d'un système d'information existant. Il consiste à désassembler, décompiler un logiciel existant afin de déterminer comment il a été conçu. Ceci correspond au mécanisme inverse du développement. Code d'opération (opcode) : dans un programme assembleur, les instructions à exécuter sont stockées dans la mémoire centrale, codées avec des valeurs entières d'octets: les opcodes. Point d'arrêt (breakpoint) : lors du débogage, permet d arrêter l'exécution du programme à une ligne donnée. Bibliographie : pages contenant quelques protections de base avec exemple! #"$ %&!')(+*,-.#/$"0%& 1'2!03!1.4 5!6 5.7!03!1.85 5!15! site très intéressant présentant d'une part les protections pouvant être utilisées, ainsi que des astuces, l'auteur s'attache cependant beaucoup à décrire les techniques de «reverse enginering» plutôt que les protections. : quelques informations intéressantes sur les techniques de protection par gestion des breakpoints. : une présentation générale du «reverse enginering» : site traitant les ofuscateurs (COBF) nos deux principales ressources pour l'aspect juridique la page web de kudzu, un programmeur donnant son avis sur les besoins de protéger son logiciel. Très interessant à lire pour les idées développées. : Diverses informations sur certaines protections The Hackademy journal : Articles sur diverses techniques de protection. Programmez : Article sur les protections java, principalement les obfuscateurs. Travail d'étude: Les techniques de protection du logiciel 21/21
Conventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert [email protected] Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Logiciel de base. Première année ENSIMAG
Logiciel de base Première année ENSIMAG 1 Procédures, paramètres, pile En assembleur une fonction est une étiquette, c'est l'adresse de sa première instruction Lors de l'appel d'une fonction, la pile sert
Programmation assembleur : aperçu
Assembleur : Younès EL AMRANI. 1 Programmation assembleur : aperçu Programmation en assembleur : NASM Module M14 Semestre 4 Printemps 2010 Equipe pédagogique : Younès El Amrani, Abdelhakim El Imrani, Faissal
Structure d un programme
Architecture des ordinateurs Cours 6 Structure d un programme 3 décembre 2012 Archi 1/30 Programme en Assembleur Archi 2/30 Sections de données programme en assembleur = fichier texte (extension.asm) organisé
Machines virtuelles. Brique ASC. Samuel Tardieu [email protected]. Samuel Tardieu (ENST) Machines virtuelles 1 / 40
Machines virtuelles Brique ASC Samuel Tardieu [email protected] École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Machines virtuelles 1 / 40 Machines virtuelles La compilation peut
Les failles Format String
Les failles Format String Concept et exploitation Warr 01/10/2010 Introduction Je rédige ce papier afin de combler un manque cruel (à mon sens) de documentation à propos de ces failles. L essentiel des
Cours Programmation Système
Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda [email protected] Février
Initiation à la sécurité
Initiation à la sécurité UE Systèmes informatiques 12 septembre 2011 Julien Raeis - http://raeis.iiens.net/ Présentation Ingénieur IIE 2005 Carrière dans la sécurité des systèmes Consultant en sécurité
Débogage de code* Mardi 13 décembre 2011. Romaric DAVID [email protected] Université de Strasbourg - Direction Informatique Pôle HPC. hpc.unistra.
Débogage de code* Mardi 13 décembre 2011 Romaric DAVID [email protected] Université de Strasbourg - Direction Informatique Pôle HPC *ou l'art de chercher la petite bête Plan Introduction Débogage, quelques
INITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.
Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece
Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155)
Architecture des ordinateurs : Programmation des processeurs avec l'environnement «y86» (INF155) F. Pellegrini Université Bordeaux 1 Ce document est copiable et distribuable librement et gratuitement à
Architecture des ordinateurs
Architecture des ordinateurs Cours 7 17 décembre 2012 Archi 1/1 Fonctions, suite et fin Archi 2/1 Rappel Forme générale d un sous-programme (fonction) : etiquette sousprogramme: push ebp ; empile la valeur
Conception de circuits numériques et architecture des ordinateurs
Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique
Programmation C++ (débutant)/instructions for, while et do...while
Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de
Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie
Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis
Algorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation
Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des
Initiation à la programmation en Python
I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de
Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter
Playing with ptrace() for fun and profit
sous GNU/Linux [email protected] EADS Corporate Research Center - DCR/STI/C SSI Lab SSTIC 2006 Il était une fois... Sous UNIX, ptrace() est le seul moyen de debuggage. User-space, Interface rigide
1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)
1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d
TAGREROUT Seyf Allah TMRIM
TAGREROUT Seyf Allah TMRIM Projet Isa server 2006 Installation et configuration d Isa d server 2006 : Installation d Isa Isa server 2006 Activation des Pings Ping NAT Redirection DNS Proxy (cache, visualisation
TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts
E3FI ESIEE Paris Systèmes et scripts B. Perret TP : Shell Scripts 1 Remarque générale Lorsque vous cherchez des informations sur Internet, n'oubliez pas que langage de shell script que nous avons vu correspond
Introduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
I. Introduction aux fonctions : les fonctions standards
Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons
Compilation (INF 564)
Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation
Rappels d architecture
Assembleur Rappels d architecture Un ordinateur se compose principalement d un processeur, de mémoire. On y attache ensuite des périphériques, mais ils sont optionnels. données : disque dur, etc entrée
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51
DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de
MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C
Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...
DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION
145 NOTION DE PROGRAMMATION 1/ Complétons notre microprocesseur Nous avons, dans les leçons précédentes décrit un microprocesseur théorique, cependant il s inspire du 6800, premier microprocesseur conçu
Département informatique de l université d Angers
Département informatique de l université d Angers Amélioration d'un logiciel d'émulation du fonctionnement d'un microprocesseur x8 6 SCHAEFFER Florian ROUSSEAUX Billy L3 Informatique Responsable du projet:
IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C
IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en
Cours Informatique Master STEP
Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions
SSTIC 2009. Désobfuscation automatique de binaires. Alexandre Gazet. Yoann Guillot. Et autres idyles bucoliques...
Désobfuscation automatique de binaires Et autres idyles bucoliques... Alexandre Gazet Sogeti / ESEC R&D alexandre.gazet(at)sogeti.com Yoann Guillot Sogeti / ESEC R&D yoann.guillot(at)sogeti.com SSTIC 2009
Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence
Licence Algorithmique & Langage C Paternité - Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique 2.0 France Vous êtes libres : * de reproduire, distribuer et communiquer cette
Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
Télécom Nancy Année 2013-2014
Télécom Nancy Année 2013-2014 Rapport 1A Ajout du langage C dans la Programmer's Learning Machine GIANNINI Valentin Loria 615, rue du Jardin Botanique 54600, Villers-Lès-Nancy Maître de stage : QUINSON
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.
UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases
Résumé Génération de code Le code intermédiaire
Résumé Analyse INFO0004 Structure des langages de programmation Génération de code ; liaison et exécution Justus H. Piater Programmation Analyse Compilation Liaison fichier texte Analyse lexicale flux
Programmation système I Les entrées/sorties
Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les
DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova
DA MOTA Anthony - Comparaison de technologies : PhoneGap VS Cordova I. Introduction Dans une période où la plasticité peut aider à réduire les coûts de développement de projets comme des applications mobile,
Traduction des Langages : Le Compilateur Micro Java
BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant
INTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Stockage du fichier dans une table mysql:
Stockage de fichiers dans des tables MYSQL avec PHP Rédacteur: Alain Messin CNRS UMS 2202 Admin06 30/06/2006 Le but de ce document est de donner les principes de manipulation de fichiers dans une table
Cours Langage C/C++ Programmation modulaire
Cours Langage C/C++ Programmation modulaire Thierry Vaira BTS IRIS Avignon [email protected] «v0.1 Rappel Programmation modulaire (1/2) Le découpage d'un programme en sous-programmes est appelée programmation
Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server
Microsoft OSQL OSQL ou l'outil de base pour gérer SQL Server Suite à mon précédent article concernant MSDE, je me suis rendu compte à partir des commentaires que de nombreux utilisateurs avaient des problèmes
INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30
Examen intra 20 février 2014 17:30 à 20:30 Nom, prénom : Code permanent : Répondez directement sur le questionnaire. Question #1 5% Quelle influence peut avoir le typage dynamique sur la maintenabilité
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
La programmation des PIC en C. Les fonctions, les interruptions.
La programmation des PIC en C Les fonctions, les interruptions. Réalisation : HOLLARD Hervé. http://electronique-facile.com Date : 26 août 2004 Révision : 1.2 Sommaire Sommaire... 2 Introduction... 3 Structure
GlobalScape Secure FTP Server 3.0.2 Buffer Overflow
GlobalScape Secure FTP Server 3.0.2 Buffer Overflow [email protected] Traduction française: jerome[at]athias.fr http://www.athias.fr/jerome/doc/ Qu est-ce que le Serveur FTP Sécurisé GlobalScape?...
Algorithme. Table des matières
1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............
Cours 14 Les fichiers
Cours 14 Les fichiers F. Gayral 1 Fichier : définition /media/travaux/documents/fgenseignement/java1/courstpsfgfc/14-fichiers/voirtypefichiers Fichier = ensemble d informations codées et stockées sur une
Protéger ses données dans le cloud
Protéger ses données dans le cloud Par Clément JOATHON Dernière mise à jour : 29/06/2015 Même s'il n'est pas vraiment conseillé de stocker des données sensibles sur un espace de stockage en ligne, comme
Chapitre 1 I:\ Soyez courageux!
Chapitre 1 I:\ Soyez courageux! Pour ne rien vous cacher, le langage d'assembleur (souvent désigné sous le terme "Assembleur", bien que ce soit un abus de langage, puisque "Assembleur" désigne le logiciel
Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique
Institut Supérieure Aux Etudes Technologiques De Nabeul Département Informatique Support de Programmation Java Préparé par Mlle Imene Sghaier 2006-2007 Chapitre 1 Introduction au langage de programmation
Le langage C. Séance n 4
Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de
Chapitre 2 Devine mon nombre!
Python 3 : objectif jeux Chapitre 2 Chapitre 2 Devine mon nombre! 2.1. Thèmes abordés dans ce chapitre commentaires modules externes, import variables boucle while condition : if... elif... else la fonction
Programmation C. Apprendre à développer des programmes simples dans le langage C
Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités
IV- Comment fonctionne un ordinateur?
1 IV- Comment fonctionne un ordinateur? L ordinateur est une alliance du hardware (le matériel) et du software (les logiciels). Jusqu à présent, nous avons surtout vu l aspect «matériel», avec les interactions
Quelques éléments de compilation en C et makefiles
Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable
1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5
1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en
Manuel de l utilisateur de Samsung Auto Backup
rev.2010-06-29 Manuel de l utilisateur de Samsung Auto Backup Table des matières Contents Chapter1 Précautions Chapter2 Les concepts de base de la sauvegarde (Backup) Apprendre les concepts de base de
Outils pour la pratique
Cinquième partie Outils pour la pratique 121 CHAPITRE 1 Les bases des séances de TP Avant de lire cettre section, il est suggéré de relire vos notes de cours se rapportant au système d exploitation Unix.
1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.
1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this
Les structures. Chapitre 3
Chapitre 3 Les structures Nous continuons notre étude des structures de données qui sont prédéfinies dans la plupart des langages informatiques. La structure de tableau permet de regrouper un certain nombre
Annexe sur la maîtrise de la qualité
Version du 09/07/08 Annexe sur la maîtrise de la qualité La présente annexe précise les modalités d'application, en matière de maîtrise de la qualité, de la circulaire du 7 janvier 2008 fixant les modalités
Bases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java
Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page
Chapitre 1 : Introduction aux bases de données
Chapitre 1 : Introduction aux bases de données Les Bases de Données occupent aujourd'hui une place de plus en plus importante dans les systèmes informatiques. Les Systèmes de Gestion de Bases de Données
Cours 6 : Tubes anonymes et nommés
Cours 6 : Tubes anonymes et nommés Mécanisme de communications du système de fichiers I-node associé. Type de fichier: S_IFIFO. Accès au travers des primitives read et write. Les tubes sont unidirectionnels
COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.
COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER. 1. Comment déplacer ou copier un fichier sur Windows Vous aurez régulièrement besoin de déplacer ou dupliquer des fichiers sur votre ordinateur. Par exemple
Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme
Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes [email protected] 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation
Présentation d'un Réseau Eole +
Présentation d'un Réseau Eole + Le Pourquoi du comment... Comprendre les différents types de documentation fournit avec la solution Eole Plus. Novice Confirmé Expert Version 1.0 Mai 2006 Permission est
UE Programmation Impérative Licence 2ème Année 2014 2015
UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie [email protected] 2 Programmation Impérative
Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml
OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire
Cours 1 : Qu est-ce que la programmation?
1/65 Introduction à la programmation Cours 1 : Qu est-ce que la programmation? Yann Régis-Gianas [email protected] Université Paris Diderot Paris 7 2/65 1. Sortez un appareil qui peut se rendre
Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :
Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de
Annexe : La Programmation Informatique
GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de
Encryptions, compression et partitionnement des données
Encryptions, compression et partitionnement des données Version 1.0 Grégory CASANOVA 2 Compression, encryption et partitionnement des données Sommaire 1 Introduction... 3 2 Encryption transparente des
Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles [email protected]
Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles [email protected] Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables
Programmation système de commandes en C
Programmation système de commandes en C Cours de Programmation système Tuyêt Trâm DANG NGOC Université de Cergy-Pontoise 2012 2013 Tuyêt Trâm DANG NGOC Programmation système de commandes
WINDOWS NT 2000: Travaux Pratiques. -Boîtier partage d'imprimante- Michel Cabaré Janvier 2002 ver 1.0
WINDOWS NT 2000: Travaux Pratiques -Boîtier partage d'imprimante- Michel Cabaré Janvier 2002 TABLE DES MATIÈRES Installer un boitier Serveur...3 Fonctions du boitier :...3 Installation du boitier Hp Jetdirect
Tutoriel code::blocks
Tutoriel code::blocks E. Lunéville 2006 Le logiciel code::blocks fait partie des logiciels de type EDI (Environnement de Développement Intégré, IDE en anglais) pour le langage C++. Il est multiplateforme
Le droit d auteur dans un environnement numérique : les positions de l IFLA et de l UNESCO 1
Le droit d auteur dans un environnement numérique : les positions de l IFLA et de l UNESCO 1 Das Urheberrecht in einer digitalen Umwelt: die Positionen der IFLA und der UNESCO Jean-Philippe Accart Information
Faites vos achats en ligne en toute confiance
Faites vos achats en ligne en toute confiance Table des matières Introduction 3 Avantages et désavantages des achats en ligne Avantages Désavantages 5 6 Conseils pour faire ses achats en ligne en toute
Analyse de sécurité de logiciels système par typage statique
Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction
Eclipse atelier Java
Eclipse atelier Java Table des matières 1. Introduction...2 2. Télécharger eclipse...3 3. Installer eclipse...3 4. Premier lancement d eclipse...3 5. Configurer eclipse pour faire du Java...5 6. Développer
La mémoire. Un ordinateur. L'octet. Le bit
Introduction à l informatique et à la programmation Un ordinateur Un ordinateur est une machine à calculer composée de : un processeur (ou unité centrale) qui effectue les calculs une mémoire qui conserve
Architecture des ordinateurs
Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?
Le prototype de la fonction main()
Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme
Désobfuscation automatique de binaire - The Barbarian Sublimation
Désobfuscation automatique de binaire - The Barbarian Sublimation Yoann Guillot, Alexandre Gazet Sogeti - ESEC Résumé Ce papier présente l état de notre recherche dans le domaine de l automatisation du
Chapitre 4 Pierre, papier, ciseaux
Python 3 : objectif jeux Chapitre 4 Chapitre 4 Pierre, papier, ciseaux (version graphique) 4.1. Thèmes abordés dans ce chapitre Le module tkinter : Label, Button Fenêtre Événements Réceptionnaire d'événements
1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :
1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus : La procédure d installation démarre. La fenêtre suivante vous indique
REALISATION d'un. ORDONNANCEUR à ECHEANCES
REALISATION d'un ORDONNANCEUR à ECHEANCES I- PRÉSENTATION... 3 II. DESCRIPTION DU NOYAU ORIGINEL... 4 II.1- ARCHITECTURE... 4 II.2 - SERVICES... 4 III. IMPLÉMENTATION DE L'ORDONNANCEUR À ÉCHÉANCES... 6
ACTIVITÉ DE PROGRAMMATION
ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,
