Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 4
Aller à la page: 1, 2, 3, 4  >
[Batch]B64X
Auteur Message
Répondre en citant
Message [Batch]B64X 
Bonjour à tous ! Comme je remarque que la mode est de créé son encodeur en base 64, je m'y suis mi aussi Mort de Rire !

Il s'appel B64X et est fait uniquement avec des commandes batch ! Il n'y a aucune commande externe et il permet de convertir des fichier en un code décompilable facilement via un fichier batch !
Il utilise la commande certutil (qui est vraiment cert-utile ... Mr. Green ) pour encoder en base64 !

Utilisation :

- Glissez-déposer le fichier sur B64X et laissez faire !

Niveau Performance :

Beaucoup plus rapide depuis les dernières versions (vous pouvez aussi aller voir les benchmarks de TSnake41 ici)
Par contre niveau décompilation il est très rapide (quelques millisecondes pour un fichier de plusieurs Mo !)
Je sais pas si c'est bien de préciser que le programme ne fait seulement qu' 1.6 ko ? Je trouve ça peu ...

Code mis à jour le 06/12/2016
- Optimisation (encore et toujours ^^)
- Ajout d'un message d'erreur si la compilation échoue



Code:

@echo off
if "%~1" EQU "" goto ST
if not exist "%~1" goto ST
echo;Compilation of %~nx1
(certutil -f -encode "%~1" "%temp%\B64XCompil.dat")>NUL||(echo;Error in compilation :&echo;your file is probably too huge ...&pause>NUL&exit)
setlocal ENABLEDELAYEDEXPANSION
(call :CreateFile "%~nx1")> "%~dp1\B64XCompil_%~n1.bat"
echo;Finish ^^!
start "" "notepad.exe" "%~dp1B64XCompil_%~n1.bat"
pause>NUL
exit
 
:ST
mode con cols=60 lines=10
echo;Pour utilisez B64X :
echo;
echo;- Glissez-d‚poser sur B64X le fichier … compiler
echo;- Attendez la fin de la compilation
echo;- Un fichier sera cr‚‚ sous la forme : B64XCompil_fichier
echo dans le dossier source du fichier compil‚
echo;
echo;B64X - IK DC ¸ 2016
echo;Tous droits r‚serv‚s
pause>NUL
exit

 
:CreateFile
echo;@echo off
echo;del out.file 2^>NUL
echo;^(
for /f "eol=- delims=" %%a in (%temp%\B64XCompil.dat) do (
   set CODE=!CODE!%%a
   set /a PASS1+=1
   if !PASS1! EQU 127 (
      echo;echo;!CODE!
      set CODE=
      set PASS1=
))
if defined CODE (
echo;echo;!CODE!)
echo;^)^>^>out.file
echo;^(certutil -f -decode "out.file" "%~1"^)^>NUL
echo;Del out.file^>NUL
goto :EOF



30/07/2016

Suppression de la version avec set /p (selon TSnake41, il n'y aurait aucune différence de performance, au contraire ...)



30/07/2016
Version Windows Xp (full compatible) :

Cette version vous permet de compiler des fichiers compatible avec Windows Xp, les fichiers de sortie de cette version seront eux aussi compatible avec Windows Xp
Vous devez télécharger le setup pour avoir cette version (code source inclus)



06/12/2016

Version Multi-thread :

Voici une version multi-thread (2 threads maximum pour l'instant) qui permet d'aller en théorie jusqu’au double des performances !
Je recommande très fortement l'utilisation de cette version pour des fichiers de grandes tailles (< 500 ko), en effet B64X mono-core est suffisamment rapide pour des petits fichiers tel que batbox, en plus vous perdrez en performances sur des petits fichiers ...


Code:

@echo off
if "%~1" EQU "Thread" (setlocal ENABLEDELAYEDEXPANSION&goto Thread%~2&exit) else if "%~1" EQU "" goto ST
if not exist "%~1" goto ST
echo;Compilation of %~nx1
(certutil -f -encode "%~1" "%temp%\B64XCompil.dat")>NUL||(echo;Error in compilation :&echo;your file is probably too huge ...&pause>NUL&exit)
setlocal ENABLEDELAYEDEXPANSION
call :CreateFile "%~1" "%~0"
echo Finish ^^!
start "" "notepad.exe" "%~dp1B64XCompil_%~n1.bat"
pause>NUL
exit
 
:ST
mode con cols=60 lines=10
echo;Pour utilisez B64X :
echo;
echo;- Glissez-d‚poser sur B64X le fichier … compiler
echo;- Attendez la fin de la compilation
echo;- Un fichier sera cr‚‚ sous la forme : B64XCompil_fichier
echo dans le dossier source du fichier compil‚
echo;
echo;B64X - IK DC ¸ 2016
echo;Tous droits r‚serv‚s
pause>NUL
exit
 
:CreateFile
for /f "tokens=3 delims=:" %%A in ('find /c /v "" "%temp%\B64XCompil.dat"') do set /a Lines=%%A/2
(start /b /HIGH "" 9>"%temp%\wait.lock1" "%~2" Thread 0)> "%temp%\B64XCompil.bat"
(start /b /HIGH "" 9>"%temp%\wait.lock2" "%~2" Thread 1)> "%temp%\B64XCompil2.bat"
:Loop
   for %%N in (1 2) do (
   (call ) 9>"%temp%\wait.lock%%N" || goto Loop
) 2>nul
(
   echo;@echo off
   echo;del out.file 2^>NUL
   echo;^(
   type "%temp%\B64XCompil.bat" "%temp%\B64XCompil2.bat" 2>NUL
   echo;^)^>^> Out.file
   echo;^(certutil -f -decode "out.file" "%~1"^)^>NUL
   echo;Del out.file^>NUL
)> "%~dp1\B64XCompil_%~n1.bat"
goto :EOF
 

:Thread0
for /f "eol=- delims=" %%A in (%temp%\B64XCompil.dat) do (
   set CODE=!CODE!%%A
   set /a PASS1+=1,NbrLines+=1
   if !NbrLines! GEQ !Lines! (
      echo;echo;!CODE!
      echo;^)^>^>out.file
      echo;^(
      exit)
   if !PASS1! EQU 127 (
      echo;echo;!CODE!
      set CODE=
      set /a PASS2+=1,PASS1=0      
      if !PASS2! GEQ 1000 (
         echo;^)^>^>out.file
         echo;^(
         set PASS2=
)))
exit
 
:Thread1
for /f "eol=- skip=%Lines% delims=" %%A in (%temp%\B64XCompil.dat) do (
   set CODE=!CODE!%%A
   set /a PASS1+=1,NbrLines+=1
   if !PASS1! EQU 127 (
      echo;echo;!CODE!
      set CODE=
      set /a PASS2+=1,PASS1=0      
      if !PASS2! GEQ 1000 (
         echo;^)^>^>out.file
         echo;^(
         set PASS2=
)))
exit






Voilà , n'hésitez pas à faire des retours ! Okay


@++ Okay Wink



Dernière édition par Xenoxis le Mar 6 Déc 2016 - 21:50; édité 18 fois

______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [Batch]B64X 
Je comprend plus rien avec vos encodeur en base 64 xD , sinon c'est pas mal bonne idée



Répondre en citant
Message [Batch]B64X 
tomjomson156 a écrit:
Je comprend plus rien avec vos encodeur en base 64 xD , sinon c'est pas mal bonne idée


Moi ne plus je comprend pas x) Mort de Rire
Si je me souvient bien, c'est soit sacha, soit Ts qui en as fait un car bexa était trop limité et tout le monde à suivit xD

Sinon merci ^^
@ ++ Okay Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
Je viens de découvrir d’où vient le problème de performance (en général et surtout sur de gros fichiers) ...

Je vous met en ligne le code une fois que j'aurais fais quelques modifs ...

@ ++




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
Xenoxis a écrit:
tomjomson156 a écrit:
Je comprend plus rien avec vos encodeur en base 64 xD , sinon c'est pas mal bonne idée


Moi ne plus je comprend pas x) Mort de Rire
Si je me souvient bien, c'est soit sacha, soit Ts qui en as fait un car bexa était trop limité et tout le monde à suivit xD

Sinon merci ^^
@ ++ Okay Wink


En réalité, c'est Shaxa qui a introduit le base64, et ensuite, XooB64Encoder s'est glissé en prenant le fonctionnement de Shaxa et en utilisant de l'interprété (puis des classes COM qui servent a rien ensuite).




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [Batch]B64X 
Nouvelle version beaucoup mieux optimisé !

Xenoxis a écrit:

Edit 2 : ENOOOOOOOOORME OPTIMISATION : j'ai enlever la série des Set qui prenait en mémoire toutes les lignes du fichier, ce qui faisait baisser INCROYABLEMENT les performances car cmd.exe n'arrivait pas à gérer correctement tant de mémoire allouée, du coup j'ai fait en sorte que les set se reset et que à chaque passage de la lecture du fichier encodée en base64 et qu'ils soit automatiquement tranmits au fichier de décodage. J'ai aussi fait un système de gestion pour éviter les dépassements de piles quand le programme que vous voulez encoder est lourd !





______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
Encore une nouvelle version encore mieux optimisé !

Il n'y as désormais plus de call ce qui permet de grappiller quelques ms à chaque itérations de la boucle for (ce qui fait des secondes de gagner au final) et optimisations de certains petits détails ...

Edit : J'ai fait un test sur un fichier de 25 Mo à Compiler/Décompiler :
- Compilation environ 30 secondes
- Décompilation environ 3 secondes !





______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
Comparaison B64X / CBF

en Haut : B64X;
en Bas : CBF;
Colonne de Gauche La "Compilation";
Colonne de Droite La "Décompilation";
sur un fichier de 86 Ko :


Les résultas ne son pas très rassurant..

Même si sa sens le plagia sur CBF, (même interface (a peut près); utilisation de "glisser un fichier pour l'utiliser", une sorte de log : Compilation of machin; Finish !)



Répondre en citant
Message [Batch]B64X 
lb999 a écrit:
Comparaison B64X / CBF

en Haut : B64X;
en Bas : CBF;
Colonne de Gauche La "Compilation";
Colonne de Droite La "Décompilation";
sur un fichier de 86 Ko :


Les résultas ne son pas très rassurant..


Tu as pris la dernière version de B64X (car c'est étrange que pour un fichier de 86 ko il prenne 1 seconde !) ? Après en même temps tu as mis un output pour afficher les itérations sur B64X, ce qui baisse les performances (de peu certes, mais non négligeable sur un batch !)
Après j'utilise la méthode "traditionnel" de output dans la décompilation (les bon vieux echo commande >> file) ce qui m'oblige à faire un système pour gérer les dépassements de pile (qui bouffe des perfs !), toi tu utilise la méthode des set /p donc pas besoin de gérer les dépassements de pile ...
Je pourrais utiliser la méthode des set /p, mais j'ai pensé que ce serait te copier, dis moi ce que tu en pense ...

@ ++ Okay Wink




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
Ceci m'exaspère...
Regarde BIEN le temps qu'il mets, car quand je l'ai ouvert, c'est sur qu'il prend plus d'une seconds.. (environ 45 secondes) bref, j'ai un pc portable ou je fait les testes,
ce qui veut dire que si je suis sur pc fix, B64X serais certainement plus rapide, comme CBF

Puis j'ai plus d'un tours dans mon sac a dos (dos = batch)
C'est pas vraiment sa qui rend la chause (chose) plus rapide, C'est Censuré Very Happy
A toi maintenant de chercher ta réponse



Répondre en citant
Message [Batch]B64X 
lb999 a écrit:
Ceci m'exaspère...
Regarde BIEN le temps qu'il mets, car quand je l'ai ouvert, c'est sur qu'il prend plus d'une seconds.. (environ 45 secondes) bref, j'ai un pc portable ou je fait les testes,
ce qui veut dire que si je suis sur pc fix, B64X serais certainement plus rapide, comme CBF



T'as lu ce que j'ai écrit au moins Rolling Eyes ?

Pour preuve (fichier Rar.exe de 476 ko fournis avec WinRar ) :


Seulement un peu moins de 2 seconde pour moi, c'est pas normal que ça prenne autant de temps chez toi ... A mon avis tes echo à chaques itérations c'est pas top dans tes test Wink Rolling Eyes ...

Edit : Ainsi que la décompilation de ce fichier via le fichier générer par B64X :



Pour rappel un fichier de 476 Ko décompiler en seulement 60 ms (17-11 = 6 donc 6, 6*10 = 60 donc 60 millisecondes)

Je rappel aussi ce que j'avais marqué précédemment :
Xenoxis a écrit:

Edit : J'ai fait un test sur un fichier de 25 Mo à Compiler/Décompiler :
- Compilation environ 30 secondes
- Décompilation environ 3 secondes !






______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
J'ai fais des tests sur xonotic.exe (utilisé par Ts pour des tests des différents programmes de compilation) :
TSnake41 a écrit:

J'ai fais un test sur des fichiers de grande taille (xonotic.exe (http://www.xonotic.org/download/) 11.8 mo) et XooB64Encoder à eu un peu de mal.

Shaxa : ~32 sec
Shaxa (optimised) : ~28 sec
XooB64Encoder : ~7 min 10 sec
XooB64Encoder (optimisé (buffer à 100%)) : ~7 min 1 sec



B64X :


Soit 51 secondes pour B64X sur un fichier de 11.8 Mo ! Ce qui n'est pas mal du tout pour un batch (qui est interpréter) et reste, je pense, relativement correct !
Après, ce résultat n'est pas forcément très juste, car il n'as pas été fait sur la même plateforme, il faudrait que Ts refasse le test dans les même conditions avec B64X




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
Xenoxis a écrit:
J'ai fais des tests sur xonotic.exe (utilisé par Ts pour des tests des différents programmes de compilation) :
TSnake41 a écrit:

J'ai fais un test sur des fichiers de grande taille (xonotic.exe (http://www.xonotic.org/download/) 11.8 mo) et XooB64Encoder à eu un peu de mal.

Shaxa : ~32 sec
Shaxa (optimised) : ~28 sec
XooB64Encoder : ~7 min 10 sec
XooB64Encoder (optimisé (buffer à 100%)) : ~7 min 1 sec



B64X :


Soit 51 secondes pour B64X sur un fichier de 11.8 Mo ! Ce qui n'est pas mal du tout pour un batch (qui est interpréter) et reste, je pense, relativement correct !
Après, ce résultat n'est pas forcément très juste, car il n'as pas été fait sur la même plateforme, il faudrait que Ts refasse le test dans les même conditions avec B64X


Pour information, les programmes ont eu d'importantes mises a jour surtout sur la vitesse.

J'avais refais un test avec Shaxa V2 et toutes les optimisations faites dans chacuns (Shaxa(V2), XooB64Encoder).
On ne parle donc plus de la même vitesse : http://batch.xoo.it/p37668.htm
TSnake41 a écrit:
Voila des comparaisons sur la taille et la vitesse entre Shaxa, ShaxaV2 (bientôt disponible) et XooB64Encoder :
J'ai fais en sorte d'enlever le surplus et donc de garder uniquement le code de génération.

{{{xonotic.exe}}}Shaxa (version optimisée) est le plus compact suivi de très prés par ShaxaV2, XooB64Encoder est avant ces deux, Shaxa (default) est le moins compact dans ce cas là.

Fichiers : https://up1.ca/#lBXzQpxjd6alLZ1-CqNjmw

Benchmark :
Citation:
Auto_xonotic.exe.bat : 2077 ms
Shaxa_Xonotic(optimised).bat : 3385 ms
Shaxa_Xonotic.bat : 3601 ms
Xonotic_ShaxaV2.bat : 1635 ms

Fichiers : https://up1.ca/#SBBMmsLJphONF2m1Nsja1g

{{{SockeT.exe}}}Shaxa (version optimisée) est encore le plus compact, mais cette fois ci, Shaxa, en est très prés et est devant ShaxaV2, XooB64Encoder semble être inadapté pour des fichiers de cette taille est donc est environ 1ko plus grand que les autres.

Fichiers : https://up1.ca/#7Nmw-9cT1tN0ZVp41zYynA

Benchmark (ces tests varient en fonction de stopwatch) :
Citation:
SockeT_ShaxaV2.bat : 265 ms
Auto_SockeT.exe.bat : 149 ms
SockeT_Shaxa(optimised).bat : 274 ms
SockeT_Shaxa.bat : 322 ms
Malgré sa taille, XooB64Encoder est dans ce cas le plus rapide.
Shaxa(optimisé) et ShaxaV2 sont à peu prés équivalent.

Fichiers : https://up1.ca/#Xlksx9PtFOCv7s2SbsQ5WQ

{{{Code source de ExecTime}}}



Après, il ne faut pas oublier que la vitesse que tu as là était dans les débuts de Shaxa et XooB64Encoder, ça a largement changer depuis (Shaxa V1 n'a pas vraiment changer, en réalité, les 30 sec de Shaxa viennent du "Echo on").




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [Batch]B64X 
Du coup 51 secondes c'est bien ou pas pour du batch ?




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Répondre en citant
Message [Batch]B64X 
lb999 a écrit:


Même si sa sens le plagia sur CBF, (même interface (a 8 près); utilisation de "glisser un fichier pour l'utiliser", une sorte de log : Compilation of machin; Finish !)


Heu sérieusement ? Tu crie au plagiat de partout même ton propre post (accompagnée d'une grosse rage)
Déja l'inerface n'est pas du tout la même (jai mis le minimum, un compromis entre ergonomie et performances car les echo prennent des perfs)
L'utilisation du glisser-déposer me sembler plus efficace et plus pratique que de déplacer le fichier dans la fenêtre une fois le programme ouvert.
Le compilation of "Machin" est simplement là parce que j'en avait envie (ergonomie) et le finish aussi.

Faut un peu arréter de se sentir copier pour le moindre truc. C'est normal que nos programmes se ressemblent car ils sont fait dans le même language de programmation et ya pas 36 milles maniére de faire un compilateur optimisé pour base64 en batch (on utilise le même algorhytme ...)
En plus de ça, je te dis que je n'ais pas mit la technique des set /p pour le output de la decompresion par respect de ton programme qui est sortit avant le mien ou tu utilisait deja cette technique . Je trouve que la diversitée des manières de faire est intéréssante, donc jai gardé le vieu output avec echo; qui demande plus de traitement et donc ralentit l'éxécution. Jaurais pris les set /p si ton programme n'existais pas ...

Va me dire après t'avoir dit mon point de vue que je suis un plagieur !

Si tu veux, je peux faire comme je l'entend, c'est à dire mettre aussi les set /p, là tu pourra me dire que mon programme ressemble au tien ! Perso ça m'arrengerais pour les perfs.




______________________________________________________
Coucou, tu veux voir mon Site Web ?? Mort de Rire
Visiter le site web du posteur Skype
Message [Batch]B64X 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 4
Aller à la page: 1, 2, 3, 4  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch