İPUCU

Trojan ve Virüsler Trojan ve Virüsler Hakkında Bilgiler.

Seçenekler

En Basitten Windows Servis Yapımı (açıklamalı)//sq99

05-07-2012 01:10
#1
Sq99 - ait Kullanıcı Resmi (Avatar)
Forumdan Uzaklaştırıldı
Üyelik tarihi:
07/2012
Mesajlar:
49
Teşekkür (Etti):
23
Teşekkür (Aldı):
3
Konular:
9
Ticaret:
(0) %
Merhaba sevgili müridler, bugün bir başka yazıyla karşınızdayım, zararlı yazılıma devam, ancak sanmayın ki bir gün arayla sürekli böyle yazı yazıcam
Bazılarınız sorabilir , windows servisi yazmanın zararlı yazılımla ne ilgisi var, bizi temiz ahlaklı yazılımcı yapmaya mı çalışıyorsun diye, haklısınız hemen açıklayım.

Windows servisin kendisini direkt zararlı yazılım olarak kullanmayacağız, bunun yerine zararlı yazılımımızı başlatan bir aracı olarak kullanacağız, artıları ve eksilerini birazdan açıklayacağım.

Windows servisi nedir

Servisler Service Control Manager (SCM) tarafından başlatılan özel programlardır, amaçları kullanıcı etkileşimi olmadan arka planda çalışıp bazı sessiondan bağımsız işlemleri yerine getirmektir. bir servis kullanıcıdan bağımsız olarak çalışır. (session 0 da). Normal exe gibi çift tıklayarak başlatamazsınız,

driver olanları olduğu gibi process olanları da vardır. Driver'ları servis olarak başlatmak konumuz dışında çünkü henüz driver yazmıyoruz

1) Servis olarak çalışan program kullanıcı login olmasa da çalışır (doğal olarak pencereli program bile çalışsa bizim sessionda görünmez)

2) Servis olarak çalışan program tam yetkiyle çalışır

3) Servis seçimlik olarak windows açılırken otomatik olarak services.exe tarafından başlatılacağı gibi elle de başlatılabilir (demand start)

Neden windows servisi

Zararlı yazılımınızı açılışta çalıştırmanın başka yolları da var elbet, mesela registry e yazmak, startup a atmak vb, ancak bunların tespiti çok kolay, servis yazmak tespiti en zor olan değil tabiki ancak ilersi rootkit'e giriyor.

Serivisin artıları

1) Program msconfig'de vs startupta görünmez, sistemde trojan varmı diye merak edenlerin ilk baktığı yerdir

2) Program görev yöneticisinde direkt görünmez, sadece tüm kullanıcılara ait işlemleri göster gibi bi düğme var taskmgr de ona basınca çıkan listede gösterir, burda da yanında SYSTEM yazdığı için, profesyonellerin bile çoğu aldanabilir

3) İyi isimlendirilmiş, bilgileri iyi doldurulmuş yeri simgesi vs iyi ayarlanmış vb bir servisi tespit etmek, tespit etsek bile zararlı olduğunu anlamak normal process'lere göre çok daha zordur.

4) Servis services.exe tarafından başlatılır, parent'i odur, doğal olarak çok masum görünür.

5) Servis session bağımsız ve tam yetki ile çalışır.

Servisin eksileri

Aslında pek bir eksisi yok, en büyük eksisi UAC aktifken, servisin yüklenmesi için admin yetkisinin gerekmesidir, bunu da aşağıda nasıl hallederiz göstericem.

Servisimizin kodu, sadece 20 satır :F , tabi bu özellikle minimalize edilmiş koddur, iyi bir çocuk olup gerçek windows servisleri yazmak isterseniz, service main function, service control handler function örnekleri var msdn de süper örnekler.
#include <windows.h>
02
03**** WINAPI SvcMain( DWORD dwArgc, LPTSTR *lpszArgv )
04{
05 ShellExecute(NULL, "open", "calc.exe", NULL, NULL, SW_NORMAL);
06 exit(0);
07}
08
09int main()
10{
11 SERVICE_TABLE_ENTRY ServiceTable[2];
12
13 ServiceTable[0].lpServiceProc = (LPSERVICE_MAIN_FUNCTION)SvcMain;
14 ServiceTable[0].lpServiceName = "tahribat";
15 ServiceTable[1].lpServiceName = NULL;
16 ServiceTable[1].lpServiceProc = NULL;
17
18 StartServiceCtrlDispatcher(ServiceTable);
19 return 0;
20}
Açıklamaya geçmeden önce servisi yüklenmek için gerekli bat dosyası
sc create tahribat type= own DisplayName= tahribat binpath= "c:\users\username\desktop\svc.exe" start= auto error= ignore
2sc start tahribat

Ne biçim programcısın servisi bat ile yüklüyosun apisi yokmu diyenler olabilir, açıklıyorum, bu bat dosyasını runas ile çalıştırırsak, windows admin yetkisi isterken cmd.exe istiyor diyor ve imzalı program olduğundan uyarı mavi çıkıyor, eğer biz exe'mize manifest dosyası ekleyerek admin yetkisi istetseydik turuncu olacaktı, üstelik exe mizin ismi kabak gibi çıkacaktı

Şimdi kodu kısaca açıklıyorum, zaten pek açıklancak bişey yok ama, Öncelikle her servisin bir start fonksiyonu vardır, exe'nin start fonksiyonu main biliyorsunuz, main fonksiyopnunda gördüğünüz gibi serviceproc olarak SvcMain fonksiyonunu gösterdik, daha sonra StartServiceCtrlDispatcher fonksiyonu ile bunu scm ye bildiriyoruz, bu fonksiyon bulunduğumuz thread'i scm ye bağlıyor ve service processinin yani exemizin kontrol threadi oluyor. Bizim control handler fonksiyonumuz yok çünkü hemen servisi durdurup sonlanıyoruz, ancak normalde servis bu kontrol threadi sayesinde exelere hizmet verir.

Kontrol fonksiyonu RegisterServiceCtrlHandler ile set edilir. Ayrıca son olarak servisin durumu SetServiceStatus ile scm ye bildirilir, biz bunların hiç birini yapmadık, çünkü amacımız servis yazmak değil en basit servis kodu ile kendi exe mizi çalıştırmak, böylece bizim exemizde servis gibi çalışacak, ayrıca hiç biryerde görünmeyecek, başlangıçta çalışıyormuş gibi dikkat çekmiyecek, kuşlar böcekler.

Niye 2 tane service table entry si var, birisini güzelce doldurduk diğerini boş bıraktık derseniz, orda 100 tane de entry olabilirdi, sonuncusu her zaman null oluyor böylece tablonun bittiği anlaşılıyor.

Shellexecute zaten herkesin bildiği bi api, windowsta process yaratan bir kaç apiden birisi Biz burda calc.exe yi başlattık, şimdi bakalım calc.exe ve tahribat servisimiz sistemde nasıl görünüyor.

Servisin başlattığı calc.exe (normalde görünmüyor, sadece tüm işlemleri gösteri tıklarsanız görev yöneticisi kapanıp admin yetkisiyle açılıyor ve öyle gösteriyor)

http://c1204.hizliresim.com/w/j/4jvhx.png
Alıntırıdr///


Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı