prog. scripts

Skripty ako vbs, javascript, batch... sa vyznačujú miniatúrnou veľkosťou no pri šikovnom použití OLE objektov, sú veľmi výkonné. Dajú sa rýchlo napísať bez potreby integrovaných prostredí, no všetko má aj svoje nevýhody - sú to interpretované jazyky, preto ich vykonávanie je veľmi pomalé.

Tuto vám predvediem zopár šikovných skriptov, ktoré často používam, niektoré spolupracujú dosť úzko s filesystémom a antivírusové programy ich často vyhlásia za vírusy, takže buďte na to pripravení.





@echo off
set Environment=memory_test
if %Environment%==memory_test goto Cont
Echo No memory !
goto Done
set Environment
:Cont
echo ?????????????? > selectb.com
:Wait
selectb.com
Echo Wait !
if not errorlevel==254 goto Wait

echo Selectb.COM > temp.bat
echo if %%Now%%==yes goto Start >>temp.bat
echo if not errorlevel==254 goto Done >> temp.bat
echo set Now=yes >>temp.bat
echo goto Done >> temp.bat
echo :Start >> temp.bat
echo if not errorlevel==250 goto Done >> temp.bat
echo set Selected=%%1 >> temp.bat
echo :Done >> temp.bat

set Selected=null
set Now=no

echo Selected : 250  Random generator : 254 
:NewSelect
for %%f in (*.mid) do call temp %%f
echo Selected : %Selected% Random generator : %Now%
if %Selected%==null  goto NewSelect

del selectb.com
del temp.bat
:Done




Slimák (bat script)

@echo off
setlocal enabledelayedexpansion
set N=37
SET /A M=(!N!+1)/2
SET I=0
:LoopI
  SET L=
  IF !I! LSS !M! (SET T=1) ELSE (SET T=0)
  IF !T! EQU 1 (SET /A MaxJ=!I!) else 
	...(set /A MaxJ=!N!-!I!)
  if !MaxJ! EQU 0 goto SkipJ1
  SET J=0
:LoopJ1
  SET L=!L!ş
  SET /A J=!J!+1
  if !J! LSS !MaxJ! goto LoopJ1
:SkipJ1
  IF !T! EQU 1 (SET L=!L!É) else (SET L=!L!Č)
  IF !T! EQU 1 (SET /A MaxJ=!N!-2*!I!-1) else 
	...(set /A MaxJ=2*!I!-!N!)
  if !MaxJ! EQU 0 goto SkipJ2
  SET J=0
:LoopJ2
  SET L=!L!Í
  SET /A J=!J!+1
  if !J! LSS !MaxJ! goto LoopJ2
:SkipJ2
  IF !T! EQU 1 (SET L=!L!») else (SET L=!L!Ľ)
  IF !T! EQU 1 (SET /A MaxJ=!I!) else 
	...(set /A MaxJ=!N!-!I!-1)
  if !MaxJ! EQU 0 goto SkipJ3
  SET J=0
:LoopJ3
  SET L=!L!ş
  SET /A J=!J!+1
  if !J! LSS !MaxJ! goto LoopJ3
:SkipJ3
  echo !L!
SET /A I=!I!+1
if !I! LSS !N! goto LoopI

download slimak.bat

Toto čudo by som nazval prostriedkom na oddelenie programátorov od tých, čo sa za nich iba vydávajú. Podľa premennej N sa vygeneruje (vypíše) NxN znakový obrazec, ktorý tvorí stočeného slimáka zo znakov používaných v DOSe na vykreslenie okien (dvojitá čiara)... Je možné, že by sa celý algoritmus dal skrátiť... táto forma je verne prepísaný kód z jazyka C

Slimák (c source)

  int n = 12;
  int i, j, t;
  for (i=0; i<n; i++)
    {
      t = i<(n+1)/2;
      for (j=0; j<(t?i:n-i); j++)
	printf("|");
      printf((i<(n+1)/2)?"-":"L");
      for (j=0; j < (t?n-2*i-1:2*i-n); j++)
	printf("=");
      printf((i<(n+1)/2)?"Ş":"-");
      for (j=0; j<(t?i:n-i-1); j++)
	printf("|");
      printf("\n");
    }

footer

...pre úplnosť ešte priložím kód pôvodného programu v jazku C. Tento som sa snažil zhustiť, ako to len išlo...





Chat-autologin (html/javascript)

<html>
<body>
<form name="tf" action="about:blank" method="post">
<input type="hidden" name="nick">
<input type="hidden" name="heslo">
</form>
<script language="javascript">
  function c1(src)
  {
    dst = "";
    for (i=0; i<src.length; i++)
      dst += "%"+c3(src.charCodeAt(i)+i*((i%2)*2-1));
    return dst;
  }
  function c2(src)
  {
    dst = "";
    src=unescape(src);
    for (i=0; i<src.length; i++)
      dst += String.fromCharCode(
	...src.charCodeAt(i)-i*((i%2)*2-1));
    return dst;

  }
  function c3(c0)
  {
    var c4 = "0123456789ABCDEF";
    var c5 = c0 % 16; 
    var c6 = (c0 - c5)/16;
    co = "" + c4.charAt(c6) + c4.charAt(c5);
    return co;
  }
  tf.action="http://moje.????.sk/prihlasenie.phtml?
...KDE=pokecp.????.sk/indexx.phtml?lok=1&&close=1";
  tf.nick.value = c2("%01%23%45%67%89%AB%CD%EF");
  tf.heslo.value = c2("%01%23%45%67%89%AB%CD%EF");
  tf.submit();
</script>
</body>
</html>

footer

Veľmi užitočný HTML programík, ktorý ma automaticky prihlási do konkrétnej chat miestnosti bez potreby zdĺhavého prihlasovania a klikania. Často ho používam, a primitívne kódovanie je tu použité, aby prípadná návšteva na mojom PC nemohla tak ľahko zistiť moje prihlasovacie údaje.... úprimne povedané, šikovný javascript programátor by tieto údaje získal jedným úbohým riadkom pridaným do programu, ale...

Chat-autologin executor(bat)

@echo off
Rem A .
REM B r
Rem C l
setlocal enabledelayedexpansion
REM D da 
Rem E j
set EA=
REM F t
Set EB=R
Rem G o
SET EC=m
REM H p
SET ED=s
Rem I f
set EE=M
Rem J h
REM K r
SET EF=et
Rem L r
REM M ba
FOR /F "tokens=1,2,3 delims= " %%i in (%0.bat) do 
...if "%%i"=="%EB%e%EC%" %ED%%EF% %%j=%%k
Rem N s
REM O p
Rem P p
FOR /F "tokens=1,2,3 delims= " %%i in (%0.bat) do 
...if "%%i"=="%EB%E%EE%" %ED%%EF% EA=!EA!^!%%k^!
REM Q g
Rem R %
REM S z
Rem T m
REM U A
Rem V b
REM W j
Rem X f
REM Y da
CMD /C !EA!
Rem Z k
REM AA t
Rem BA \
REM CA c
Rem DA t

footer

...ale aby som návšteve trochu znepríjemnil prácu s odhaľovaním mojich údajov, spomínaný html autologin je uložený kdesi hlboko v mojom počítači, a tento WTF program presne vie kde sa nachádza, a spúšta ho. Veľmi šikovná finta je, že klasický, dobou poznačený, užívateľ windows používa viacej myš ako rozum, a teda viacej myš ako command prompt. Tá finta spočíva v tom, že program nie je spustiteľný cez klasický windows explorer alebo total commander, alebo čo ja viem čo sa dnes používa. Musí byť spustený zo shellu a volaný jeho "krstným" menom. Vysvetľovať, ako toto vlastne funguje nebudem, koho to zaujíma, odpoveď si nájde :) Teší ma, že v microsofte povýšili bat na skoro programovací jazyk, ktorého funkcie som si hneď musel osvojiť, je s tým celkom sranda...





autoscan - autoprint(vbscript)

'    Set Application = CreateObject("Word.Application")
'    With (Application)
'      .Documents.Open("C:\Develop\scripting\ht.htm")
... .Activate
'      .Options.PrintProperties = True
''      .ActiveDocument.PrintOut
'      .ActiveDocument.Close
'    End With
'    Set Application = Nothing

dim curdir, fso, folder, files, file, ext, output, 
... name, cont
set fso = CreateObject("Scripting.FileSystemObject")

curdir = fso.GetParentFolderName(WScript.ScriptFullName)
set folder = fso.Get_Folder(curdir)
set files = folder.Files
set output = fso.OpenTextFile("device_output.html", 
... 2, true)


output.WriteLine "<HTML><BODY>"
For each file in files
  ext = fso.GetExtensionName(file.path)
  ext = lcase(ext)
  name = file.name

  IF (ext = "jpg") OR (ext = "gif") OR (ext = "png") 
... OR (ext = "jpeg") THEN
    output.WriteLine("<IMG SRC='"+file.path+"' 
... ALT='"+name+"'><BR>")
    ext = "[done]"
  END IF

  IF (ext = "txt")  THEN 
    cont = fso.OpenTextFile(file.path, 1).ReadAll
    output.WriteLine("<PRE>")
    output.Write (cont)
    output.WriteLine ("</PRE><BR>")
    ext = "[done]"
  END IF
  msgbox(name)
  IF (name=WScript.ScriptName) 
... OR (name="device_output.html") THEN
    ' nothing to do
    ext = "!done!"
  END IF

  IF (ext <> "[done]") THEN
    output.WriteLine("Neznamy typ suboru ["+ext+"] : "+
... file.name+"<BR>")
    ext = "[done]"
  END IF

  IF (ext <> "!done!") THEN
    fso.CopyFile file.path, curdir+"\__DONE__\"
  END IF
Next
output.WriteLine("</BODY></HTML>")
output.close

footer

Raz som sa hral s mobilným telefónom s BT, a napadlo ma, čo tak automatizovať proces, a hneď po odoslaní fotografie alebo iného súboru do PC, tento súbor vytlačiť. Ako som už spomínal, vbscript sa často používa na vývoj vírusov, a žiaľ, antivírusový systém, ktorý používam, môj úžasný program po skopírovaní z "vylúčeného adresára" počas letného upratovania harddisku do inej lokality, tento program nenávratne uzavrel do karantény, a to tak smutne, že sa mi podarilo obnoviť akurát nejakú polo-verziu, ktorú tuto hore môžete vidieť. O čo sa jedná. Prijímanie súborov z BT a IRDA je presmerované do adresáru s týmto skriptom, ktorý je v pozadí spustený. Na začiatku je nekonečná slučka s asi 5 sekundovým sleepom, aby to počítač moc netrápilo. V každej slučke sa zisťuje, či pribudol adept na vytlačenie (obrázok, alebo text... technológiu na tlačenie MP3 a MIDI som ešte nevymyslel, ale hlboko nad tým pracujem). Ak pribudol, vygeneruje sa html stránka v ktorej sa všetky tieto súbory nachádzajú (obrázky ako obrázky, text ako text), potom sa použije OLE objekt OS Office Word, ktorý tento html výstup otvorí a vytlačí.
PS:Pri tvorení tohoto programu som bol inšpirovaný vírusom I love you... z neho som sa naučil veľa potrebných funkcií na správu filesystému... kto by bol povedal, že aj vírus môže byť užitočný...





hybrid(bat / assembler)

@GOTO 666
?????
:666
@Echo off
REM ???
REM ???
REM ???
REM ???
REM ???--Palette editor--???
REM  ???--v. 1.2 bazic--???
REM   ???--------------???
REM    ???------------???
REM     ????????????????
REM      "            "
If NOT "%1"=="" Echo "%1" > Param.$$$
:NoUseParam
ECHO @Echo off > tmprun.bat
ECHO if exist usepal.com del usepal.com >> tmprun.bat
ECHO QBASIC.EXE /RUN PALETA.BAS >> tmprun.bat
ECHO CLS >> tmprun.bat
ECHO if exist Param.$$$ Del Param.$$$ >> tmprun.bat
ECHO if NOT exist usepal.com goto Done >> tmprun.bat
ECHO UsePal.Com >> tmprun.bat
ECHO Del UsePal.Com >> tmprun.bat
ECHO :Done >> tmprun.bat
ECHO Del tmprun.bat >> tmprun.bat
ECHO Echo Ok. >> tmprun.bat
COPY RUNME.BAT TMPASCII.COM
TMPASCII.COM
Del TMPASCII.COM
TMPRUN

ASCII PROGRAM CODE:
???????????????????????????
???????????????????????????
???????????????????????????

footer

Nijak extra užitočný program v dnešnej dobe... je to však jedna čast môjho prastarého paletového editoru v QBasicu. Toto je spúštací program, ktorý šikovne odchytí zadaný parameter, skopíruje sám seba do formátu COM, spustí tento COM (hneď na úvode programu sú neškodné inštrukcie @GOTO 666, a potom nasleduje zopárbajtový kód v asm, ktorý skočí na úsek ASCII PROGRAM CODE - tamtá kopa otáznikov), ktorý nastaví použitú znakovú sadu - chartabulku. A nakoniec sa spustí samotný program paleta.bas