|
www.lllcd.com
www.4df.org
www.6df.org
www.8df.org
www.9sh.org
www.pedjvak.net
www.pedjvak.com
www.shegerd.com
www.guarddongle.com
www.dedj.com www.5df.com
2
Outsmarting.(هوشمندتر
بودن نسبت به شبيه ساز)
براي هوشمندتر بودن نسبت به شبيه ساز تعدادي از ويروسها از
محرکهاي زمانبندي شده استفاده ميکنند. يا اگر داراي کدهاي
رمزشده باشد از تکنيکهاي رمزگشايي مختلف استفاده ميکند.
محرکهاي زمانبندي شده هر چيزي ميتواند باشد. براي مثال
اجراي کدهاي مخرب در ساعت 3 بعداز ظهر يا فقط در روزهاي
خاص. ويروس همچنين ميتواند
شرايط را بسنجد، براي مثال چک کند که آيا در حال شبيه سازي
شدن يا ديباگ شدن هست يا خير. اگر اينطور باشد کدهاي بي
اثر را اجرا کند.
تکنيکهاي کشف رمز که ميتواند مورد استفاده قرارگيرد شامل
پراکندگي حلقه هاي رمزگشايي در بين کدها همرا با داشتن
روشهاي مختلف رمزگشايي. اين روش توسط
W32/Harrier،
W32/Coke
و
W32/Zelly
مورد استفاده قرار ميگيرد. در اين روش بخش اول، بخش دوم را
رمزگشايي کرده، بخش دوم، سوم را و الي آخر. ويروس همچنين
ميتواند بلاکهايي از کد را که مورد نياز است به منظور
هوشمندي بيشتر رمزگشايي کند.
ويروس RDA.Fighter
از روش کشف رمز
Brute Force
استفاده ميکند. يعني اينکه ويروس کليد کشف رمز را ذخيره
نميکند. بنابراين سعي ميکند تمام کليدهاي ممکن را براي کشف
رمز امتحان کند. اين روش از اين جهت روش مفيديست که کار
آنتيويروسها را براي کشف ويروس بدون داشتن روش مشابه بسيار
مشکل ميکند که همين موضوع باعث بکار بردن روشهاي شبيه سازي
بسيار زيادي ميشود. در زير کد مربوط به رمزگشايي
RDA.Fighter
آمده
است:
setup:
xor ebx,ebx
iterate:
mov esi,[ebp + hostOffset]
mov edi,esi
mov ecx,[ebp + host_size]
inc ebx
decrypt:
lodsb
xor al,bl
stosb
loop decrypt
check:
mov esi,[ebp + hostOffset]
push esi
mov ecx,[ebp + host_size]
push ecx
mov eax,[ebp + __ADDR_CheckSum] ; whatever this
happens to be
call eax
test eax,eax
jnz iterate
mov esi,[ebp + hostOffset]
jmp esi
در مثال بالا ميبينيم که در بلاک
Setup،
ebx
با صفر مقداردهي شده و فقط يکبار اجرا ميشود. سپس در بلاک
Iterate
esi
و
edi
با آدرس ابتداي کد رمز شده مقداردهي ميشود،
ecx
با اندازه کد رمز شده مقداردهي ميشود. همچنين مقدار
ebx
يک واحد اضافه ميشود. در
بلاک
decrypt
بايت به بايت در کد رمز شده پيمايش شده و هربايت را با
کليد موجود در
ebx،
XOR
ميکند. اين حلقه زمانيکه
ecx
صفر شود به پايان ميرسد. سپس در بلاک
Check
مقدار
Checksum
مورد ارزيابي و سنجش قرار ميگيرد. اگر اين ارزيابي معتبر
بود، کد از حالت رمز خارج ميشود. بعد از عمليات رمزگشايي،
به حلقه تکرار بازگشته و با کليد بزرگتري آغاز کرده، سپس
به محل کدهاي جديد پرش ميکند.
W95/Fono
از يک الگوريتم رمزگشايي غيرخطي استفاده ميکند. يعني اينکه
بخش رمزشده بصورت خطي رمزگشايي نميشود. بنابراين عدم
رمزگشايي بصورت بايت به بايت ميتواند باعث سردرگمي شبيه
ساز گردد.
W95/Fono
از يک جدول شامل کليد استفاده ميکند و شبيهساز عمليات
جانشيني و تعويض را بر اساس آن انجام ميدهد. هر کارکتر در
داده ها، مربوط به يک کارکتر خاص ميباشد. براي مثال
A
با
L
مربوط است،
Z
با
F
و غيره. بنابراين با استفاده از اين روش رمز کردن، هر بخش
از ويروس با يک ترتيب تصادفي رمزگشايي شده و بهر موقعيت
فقط يکبار مراجعه ميشود.
W95/Drill
و
{W32,Linux}/Smile.D
از روش رمزگشايي غيرخطي استفاده ميکنند.
W95/Slicer
و
W95/Resure
لودر ويندوز را مجبور به جابجايي برنامه هاي آلوده، بهنگام
بارگذاري آنها در حافظه ميکند. اين جابجايي مسئول رمزگشايي
بدنه ويروس ميباشد. زيرا ويروس در محلهاي خاصي براي
رمزگشايي در حافظه قرار ميگيرد. ويروس
W95/Resurrel
بعد از
W95/Resure
نوشته شده است. اين ويروس آدرس پايه فايل آلوده را به
مقدار
0XBFXXXXXX
(مقدار
XXXXXX
يک مقدار تصادفي بوده که
توسط تابع
GetTickCount()
توليد ميشود) تنظيم ميکند. سپس براي هر مقدار
DWORD
در
Code Section
خود، يک ورود جابجا شده را اضافه ميکند و هر
DWORD
را بوسيله اضافه کردن مقدار آدرس پايه به آن، رمز ميکند و
مقدار
0X400000
را از آن کم ميکند. هنگاميکه نرم افزار اجرا شد کپي برنامه
نميتواند در حافظه بارگذاري شود به اين خاطر که آدرس پايه
اشتباه بوده يا آدرسي در
Kernell32.DLL
ميباشد. بنابراين لودر سيستم آدرس معتبر را جايگزين کرده،
ويروس را همانطور که انتظار ميرود رمزگشايي ميکند. اين
دشواري در رمزگشايي ويروس، تشخيص آنرا سخت ميکند.
Outlasting
,
Outsmarting
,
Overextending
|