25 Mayıs 2009 Pazartesi
Farkındamısınız?
Semineri yapan da yanlış hatırlamıyorsam Anne Skare Neilsen adında bir hanım ablamızdı.
Kişi isimlerini çoğu zaman hatırlayamasam da bu sahsın adı nedense hatırımda kalmış :) Seminer sırasında şeker dağıtmasından olsa gerek. Her ne kadar şeker alamasam da etkisi olmuş ki hatırlıyoruz demi :) Kendisi futurist imiş.(Bu ünvan ile de ilk defa o zaman karşılaşmıştım.) Ha ne diyordum video değil mi... :)
25 Nisan 2009 Cumartesi
Programatik olarak driver yükleme
Rootkitlerle veya daha genel anlamda driverlarla uğraşmış olanlar ‘sc create|start|delete|….’ komut varyasyonunun makina üzerindeki sürücüleri kontrol etmede kullanıldığını bilir. Sürekli şekilde driver yükleyip silenlerden iseniz bu yöntem can sıkmaya başlayabiliyor. Peki o zaman napalım: Bu işlemin programatik şekilde nasıl yapılacağına bakalım.
Şöyle küçük bir sınıf yazıp static fonksiyonları üzerinden işimizi halledebiliriz sanırım.
#include "windows.h"
#include "iostream"
#include "string"
#include "stdio.h"
using namespace std;
class Driver{
public:
static DWORD Install(IN LPCTSTR, IN LPCTSTR);
static DWORD Start(IN LPCTSTR);
static DWORD Open( IN LPCTSTR, HANDLE *);
static DWORD Stop(IN LPCTSTR);
static DWORD Remove(IN LPCTSTR);
};
Aşağıdaki kodu incelediğinizde de anlayacağınız üzere her bir fonksiyon öncelikle “Service Control Manager” açıyor ve onun üzerinden işini görüyor.
#include "stdafx.h"
#include "InstallDriver.h"
#include "winuser.h"
#include "stdlib.h"
DWORD Driver::Install(IN LPCTSTR DriverName, IN LPCTSTR ServiceExe){
SC_HANDLE hSCManager,hService;
TCHAR data[80];
DWORD dw=0;
hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if(hSCManager==NULL)
return GetLastError();
hService = CreateService( hSCManager, // SCManager database
DriverName, // name of service
DriverName, // name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_KERNEL_DRIVER, // service type
SERVICE_DEMAND_START, // start type
SERVICE_ERROR_NORMAL, // error control type
ServiceExe, // service's binary
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL // no password
);
if(hService==NULL){
dw=GetLastError();
CloseServiceHandle(hSCManager);
return dw;
}
CloseServiceHandle( hService );
CloseServiceHandle(hSCManager);
return dw;
}
//Sürücünün doğru bir şekilde yüklenip yüklenmediğini kontrol etmek için
DWORD Driver::Open( IN LPCTSTR DriverName, HANDLE * lphDevice )
{
TCHAR completeDeviceName[64];
HANDLE hDevice;
DWORD dw=0;
//Burada ABC ismindeki bir sürücünün \DosDevices\ABC adında bir
//sembolik link oluşturduğunu varsayıyoruz. Tabi böyle bir varsayım
//yerine QueryDosDevice komutuyla varolan sembolik linkleri çekebilirdik.
if( (GetVersion() & 0xFF) >= 5 )
wsprintf( completeDeviceName, TEXT("\\\\.\\Global\\%s"), DriverName );
else
wsprintf( completeDeviceName, TEXT("\\\\.\\%s"), DriverName );
hDevice = CreateFile( completeDeviceName,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
NULL,OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL
);
if ( hDevice == INVALID_HANDLE_VALUE)
return GetLastError();
if ( lphDevice )
*lphDevice = hDevice;
else
CloseHandle( hDevice );
return dw;
}
DWORD Driver::Start( IN LPCTSTR DriverName){
SC_HANDLE hSCManager;
SC_HANDLE hService;
BOOL ret;
DWORD dw=0;
hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if(hSCManager==NULL)
return GetLastError();
hService = OpenService( hSCManager,DriverName,SERVICE_ALL_ACCESS );
if ( hService == NULL ){
dw=GetLastError();
CloseServiceHandle(hSCManager);
return dw;
}
ret = StartService( hService, 0, NULL );
dw=ret?0:GetLastError();
CloseServiceHandle( hService );
CloseServiceHandle(hSCManager);
return dw;
}
DWORD Driver::Stop(IN LPCTSTR DriverName){
SERVICE_STATUS serviceStatus;
SC_HANDLE hSCManager;
SC_HANDLE hService;
BOOL ret;
DWORD dw=0;
hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if(hSCManager==NULL)
return GetLastError();
hService = OpenService( hSCManager,DriverName,SERVICE_ALL_ACCESS );
if ( hService == NULL ){
dw=GetLastError();
CloseServiceHandle(hSCManager);
return dw;
}
ret = ControlService( hService, SERVICE_CONTROL_STOP, &serviceStatus );
dw=ret?0:GetLastError();
CloseServiceHandle( hService );
CloseServiceHandle(hSCManager);
return dw;
}
DWORD Driver::Remove(IN LPCTSTR DriverName){
SC_HANDLE hSCManager;
SC_HANDLE hService;
BOOL ret;
DWORD dw=0;
hSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if(hSCManager==NULL)
return GetLastError();
hService = OpenService( hSCManager,DriverName,SERVICE_ALL_ACCESS );
if ( hService == NULL ){
dw=GetLastError();
CloseServiceHandle(hSCManager);
return dw;
}
ret = DeleteService( hService );
dw=ret?0:GetLastError();
CloseServiceHandle( hService );
CloseServiceHandle(hSCManager);
return dw;
}
Kullanıma örnek olarakta aşağıdaki resimdeki gibi arayüze sahip bir program yazılabilir.
Proje dosyasına Dosyalarım bölümünden erişilebilir.
30 Mart 2009 Pazartesi
Pythonla internetten sayfa çekmek
Pythonla çok samimi olmasakta bazen işimi çok kolaylaştırdığını(150 yi aşkın sayfayı belli bir veri için kontrol etmek gibi) inkar edemem. Basit bir kod belki ama kullanışlı olduğu kesin.
#Page.py
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////////
import urllib
import urllib2
POST = 1
GET = 2
def retrieve(url,values,method):
----------->try:
----------------------->data=urllib.urlencode(values)
----------------------->if method == POST:
---------------------------------->request=urllib2.Request(url,data)
---------------------------------->response=urllib2.urlopen(request)
---------------------->elif method == GET:
---------------------------------->get_url=url+'?'+data
---------------------------------->response=urllib2.urlopen(get_url)
---------------------->content=response.read()
---------------------->return content
---------->except urllib2.HTTPError, e:
---------------------->print 'Gecersiz istek!!!'
---------------------->print 'Hata: ', e.code
---------->except urllib2.URLError, e:
---------------------->print 'Servera baglanti yok!!'
---------------------->print 'Sebep: ', e.reason
---------->print 'Opppsss...Fonksiyon basarisiz oldu.'
////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Bu modulün kullanımına örnek olarak ta şöyle bir kod yazılabilir.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\////////////////////////////////////////////
#-*- coding: utf-8 -*- #kod içerisinde türkçe karakter kullanabilmek için
import Page
print "Trying...."
for i in range(1,179):
----------->print "%s " % i,
----------->values={'sektorid':'39','ilce_id':'','page':str(i)}
----------->content=Page.retrieve('http://www.webrehberi.net/istanbul_rehberi/alt_sektor.php',values,Page.GET)
----------->if (">ERDEK<" in content) or (">DURSUNBEY<" in content):
----------------------->print ""
----------------------->print "Found at %s. page" % i
////////////////////////////////////////////\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Herzaman ki gibi kodlara “Dosyalarım” linkinden ulaşılabilir.