Compressed 2 TXT یک اسکریپت بسیار کاربردی میباشد که شما میتوانید عملیات فشرده سازی فایلها را بدون نیاز به نصب برنامه در مبدا و مقصد و فقط بر پسوند .bat و انتقال اطلاعات بصورت متنی انجام دهید
برخی سناریوها و موقعیتهای استفاده:
- کاربرد اصلی این برنامه برای اشتراک گذاری فایلهای configs / scripts / dumps / captures در محیطهای که امکان پیوست فایل با فرمت مورد نظر را نمیدهد و یا کدها را بدافزار و ویروس تشخیص میدهند یا محدودیت کاراکتر مواجه هستیم بسیار کاربردی میباشد
- در محیط های چت و یا در فرمهای که امکان پیوست فایل وجود ندارد بصورتی متنی فایل را ارسال کنیم
- شما میتوانید هر فایل و یا پوشه را با این برنامه به یک فایل .bat فشره شده تبدیل کنید که در محل مورد نظر با دو کلیک فایل و پوشهها را استخراج کنید
- در شرایطی نیاز به تبدیل فایل و پوشهها به متن داریم
- می خواهد فایل های مورد نیاز برای اسکریپت .bat را داخل همان فایل ذخیره و انتقال دهید
- در برخی موارد میخواهیم فایل .bat به راحتی قابل ویرایش و خواندن نباشد!!
- و…
این اسکریپت از روش رمزنگاری Ascii85 که ترکیبی از کدگذاری با کاراکترهای ASCII برای رمزنگاری و فشرده سازی در سطح باینری، استفاده میکند و سرعت مناسبی دارد
همچنین از powershell ویندوز جهت دسترسی مدیر برای این کار استفاده میکند
برای استفاده از این اسکریپت بعد از استخراج فایل از پوشه فشرده کافیست فایل Compressed 2 TXT.bat را اجرا کنید
بر روی فایل مورد نظر است کلیک کنید و از منوی Send to گزینه Compressed2TXT.bat را انتخاب کنید
عملیاتی مانند تصویر زیر انجام میشود
فایلی همنام فایل انتخابی بعلاوه کاراکتر .~ در کنار فایل اصلی ایجاد میشود
در تصویر زیر مقایسه فایل اصلی و کد شده را میبینید
روش دیگر برای اینکار کشیدن و رها کردن بر روی خود اسکریت میباشد
من در اینجا یک پوشه را که حاوی فایل میباشد بر روی فایل Compressed2TXT.bat دراگ میکنم
مقایسه حجم فایلهای اصلی و فایل فشرده شده را در تصویر زیر ببنید
در محل مقصد بر روی فایل ایجاد شده کافیت کلیک کنید تا فایلها استخراج شود
برای تست من یک اسکریپت ساده به صورت زیر مینویسم
@echo off
title Test Encrypt Batch File
echo.
echo Run Successful
echo.
سپس اون را با Compressed 2 TXT کد میکنم (خروجی مثل زیر)
@echo off & pushd %~dp0
powershell -noprofile -c "$f=[io.file]::ReadAllText('%~f0') -split ':bat2file\:.*';iex ($f[1]);X 1;"
exit/b
:bat2file: Compressed2TXT v5.2
Add-Type -Language CSharp -TypeDefinition @"
using System.IO; public class BAT85{ public static void Decode(string tmp, string s) { MemoryStream ms=new MemoryStream(); n=0;
byte[] b85=new byte[255]; string a85="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$&()+,-./;=?@[]^_{|}~";
int[] p85={52200625,614125,7225,85,1}; for(byte i=0;i<85;i++){b85[(byte)a85[i]]=i;} bool k=false;int p=0; foreach(char c in s){
switch(c){ case'\0':case'\n':case'\r':case'\b':case'\t':case'\xA0':case' ':case':': k=false;break; default: k=true;break; }
if(k){ n+= b85[(byte)c] * p85[p++]; if(p == 5){ ms.Write(n4b(), 0, 4); n=0; p=0; } } } if(p>0){ for(int i=0;i<5-p;i++){
n += 84 * p85[p+i]; } ms.Write(n4b(), 0, p-1); } File.WriteAllBytes(tmp, ms.ToArray()); ms.SetLength(0); }
private static byte[] n4b(){ return new byte[4]{(byte)(n>>24),(byte)(n>>16),(byte)(n>>8),(byte)n}; } private static long n=0; }
"@; function X([int]$r=1){ $tmp="$r._"; echo "`n$r.."; [BAT85]::Decode($tmp, $f[$r+1]); expand -R $tmp -F:* .; del $tmp -force }
:bat2file: Test1.bat~
O/bZg00000xBvhE00000EC2ui000000|5a50RR9100000MgRZ-0RRIPRR91000000006~K?QW#8RAqB@F+m^ZbO1Di{]e=^RRCLnfQ;k!Pz5Le0018V00031002N_
V_y)6Z+Ro;3Uq07Y.J!IRAqB@AVqFta)QrcAVOhuV_v~oX?4T/3JnTnV_y)K4GLvrXm21OARtn8ZXi?2V_F7=b7pmH4GLvrXm2hJ3JnSX
در این مرحله کد زیر را ججای exit/b قرار میهم
rmdir /s /q "Test1.bat"
MOVE "Test1.bat" %temp%
ATTRIB +S +H "%Temp%/Test1.bat"
pushd "%Temp%"
cls
call Test1.bat
با این کد del /q %Temp%\Test1.bat
در صورتی که در پوشه Temp فایل Test1.bat باشد را حذف میکنیم ( در صورتی که فایلشما دارای پوشه است از دستور rmdir /s /q استفاده کنید)
سپس با دستور MOVE "Test1.bat" %temp%
فایل Test.bat که بعد از اجرای فایل در کنار فایل اصلی ایجاد میشود را به پوشه Temp انتقال میدهیم
سپس با دستور ATTRIB +S +H "%Temp%/Test1.bat
فایل انتقال داده شده را مخفی و سیستمی میکنم
با دستور pushd "%Temp%"
مسیر را به Temp تغییر میدهیم
با دستور CLS صفحه را پاک میکنیم
در نهایت call Test1.bat در همان صفحه فایل Test1.bat اجرا میکنیم
طبیعست که یک کاربر یا تجربه به راحتی متوجه عمکلرد ما در این فایل میشود
دقت کنید که برای کد کردن و مخفی کردن دستورات راههای بهتری وجود دارد مانند تبدل به فایل EXE ،اما در انجا به خاطر اینکه بیشتر با محیط اسکریپت نویسی و دستورات CMD آشنا بشویم این مراحل را طی میکنیم و هدف آموزشیست!