Прошу вибачити відразу за допущені помилки і поставитися з розумінням, я одесит і мені дуже приємно потрапити на цей форум.
По ділу:
Так, це моя програма.
В Кібор набагато легше програмувати автоматизацію, ніж чистою мовою, так як готові модулі спеціально для цього заточені і дозволяють будувати з них логіку не вникаючи в їх роботу.
Особливу увагу приділено аналізу зображення. Багато функцій не мають аналогів.
Якщо порівняти з подібними програмами, то я б виділив просто інструменти яких немає в цих програмах:
Графічний редактор, який дозволяє досить зручно підготовляти графічні матерріали для використання в скрипті. Приклад його використання на цьому відео.
Сервіс демонстрації готових скриптів і керування ліцензуванням користувачів досить зручні для розробників.
Вбудовані модулі управління клавіатурою і мишкою на низькому рівні дозволяють обходити захисту від емуляції в іграх.
Ну мені складно описати в двох рядках програму, вище наведений список функцій, з яким можна ознайомитися.
Приклад скриптів:
Це чит для RF Online - хак радара (зміна значень у пам'яті процесу)
//Хак радара в RF Online
// Установить радар на самый обзор
//Запустить скрипт. Радар должен увеличить свой обзор
string name=getcontrol(EDIT_0);
win w=window (name);
if (w==0)
{
messagebox ("Невозможно найти окно "+name);
goto er;
}
int prc=openprocess(w);//Открываем процесс RF
char all_poisk[8];
char poisk[4];
codhex(1032983058, #poisk[0]);//Конвертируем искомое число 1032983058 в HEX, для поиска в памяти процесса при максимальном обзоре радара
zapis(#poisk[0], #all_poisk[0]);//Записываем 4 байтовое число 1032983058 два раза в 8 байт (идут один за другим X и Y) Его ищем
char all_zamen[8];
char zamen[4];
codhex(1022983058, #zamen[0]);//Конвертируем искомое число 1032983058 в HEX, для поиска в памяти процесса
zapis(#zamen[0], #all_zamen[0]);//Записываем 4 байтовое число 1022983058 два раза в 8 байт (идут один за другим X и Y) Им заменить надо
int adr=0;
findmemory (1, #all_poisk[0], 8, #adr, 0, prc);//Ищем 8 байт ( числа 1032983058 одно за другим)
writememory(#all_zamen[0], 8, adr, prc);//Заменяем 1032983058 числа на 1022983058.(сразу два числа. 8 байт)
if (adr!=0)messagebox ("Хак должен быть по адресу "+format(adr));
else messagebox ("Проверьте стоит ли радар на макс обзоре и повторите еще раз.");
er:;
///////////////////////////
function zapis(char #ch, char #all_ch)//Эта функция для заполнения 8 байт повторением по 4 байта (одинаковые числа)
{
int n=0, n1=0;
q: if (n<4)
{
all_ch[n1]=ch[n];
n++; n1++;
goto q;
}
n=0;
q1: if (n<4)
{
all_ch[n1]=ch[n];
n++; n1++;
goto q1;
}
}
///////////////////////////////////
CREATE_INTERFACE
{
DIALOG "Хак радара в RF Online" 237 140 //РазмерX РазмерY
BUTTONSCRIPT "Хакнуть радар" 6 80 220 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
STATIC_0 "Название окна" 10 10 75 17 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_1 "Увеличьте обзор на радаре на максимум" 10 40 215 17 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_2 "и нажмите Хак" 75 60 90 17 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "RF Online" 90 8 136 18 //ПозицияX ПозицияY РазмерX РазмерY
}
Це скрипт пошуку мобів в цій же грі за допомогою аналізу зображення. Відео роботи.
int r=7;//Допускаемое отклонение цвета пикселя
int color[3], kol[3];//Массивы для трех цветов
color[0]=2899273; color[1]=2899273; color[2]=791579;//Тут три цвета которые будем искать в куче
kol[0]=3; kol[1]=3; kol[2]=3;//Тут сколько должно совпасть пикселей для каждого цвета
int x[50], y[50];//Тут координаты найденные
int Xx, Yy, k=0, k1=0, n;//Вспомогательные
textbkcolor (8454143,255);//Установка цвета текста
win w=window ("RF Online", "D3D Window", -1);//Указательна окно с игрой
e: k=findheapcolor(50, #color[0], #kol[0], 3, 3, #x[0], #y[0], 10, 10, 100, 100, 0, 80, w.widthclient, w.heightclient-200, r, r, r, r, r, r, w);
n=0;
s:if (n<k)//Перебор в цикле координат мобов и вывод на них их номер
{
Xx=x[n]+w.leftclient;
Yy=y[n]+w.topclient+80;
textout(n, Xx, Yy, "", 0);
textout(n, Xx, Yy , format(n), 0);
n++;
goto s;
}
n=k;s1:if (n<k1){textout(n, x[n]+w.leftclient, y[n]+w.topclient+80 , "", 0);n++;goto s1;}k1=k;
goto e;
Це скрипт для підключення до сервісу http://antigate.com для розгадування капчі
//Это вверху скрипта
char s[10000], p[1000], file[10000];
int size_file=0, sizf, t_content_length, ot;
string otvet;//сюда капча пишется
/*
//так делать скрин капчи и сохранить на комп как JPG
int Image_0[500][500];
screen(#Image_0[0][0], 2, 2, 100, 100, -1);
saveimage (JPG, #Image_0[0][0], "C:\12345.jpg");
*/
//Это использование
/*
capcha(
Указатель на string в который запишется отгаданная капча
путь к файлу .jpg с капчей на компьютере
свой ключ в системе antigate.com
время в сек. между запросами готового результата
время в сек сколько ждать результата
)
Возвращает 1 если разгадана. 0 если не разгадана
*/
ot=capcha(#otvet, "C:\12345.jpg", "tyt_vvesti_svoi_kluch_v_sisteme_antigate", 5, 120);
//если ot равно 1 - значит разгадана. капча в otvet
//если 0 - значит ошибка. Код и описание ошибки в otvet
messagebox (otvet);//выводит или капчу или ошибку
//Это вниз скрипта
function capcha(string #otvet, string pyt, string k, int t, int wtt)
{
if (capchasave(#otvet, k, pyt)==1)
{
t=t*1000;
wtt=wtt*1000;
int wtt1=gettime();
ss: if (opensocket ("antigate.com", 80)==1)//Если открыли сокет
{
//otvet="122976708";
strcpy(#s[0], "GET http:/"+"/antigate.com/res.php?key="+k+"&action=get&id="+otvet+" HTTP/1.0");//Формируем GET запрос
sizf=size(#s[0]);//Узнаем номер в массиве конца строки с GET запросом
//Записываем \r\n\r\n - конец заголовка
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(13);s[sizf+3]=formatic(10);s[sizf+4]=formatic(0);
//messagebox (format(#s[0]));//Воспроизводим
if (sendhtml(#s[0], sizf+4)>0)//Если отправили запрос
{
recvhtml(#p[0], 999);//читаем ответ
//messagebox (format(#p[0]));//Воспроизводим
if (format(#p[0])=="")
{
if (gettime()-wtt1>wtt)
{
otvet="ERROR. Время ожидания прошло. Ваш ID "+formatic(13)+formatic(10)+otvet;
closesocket ();//Закрываем
return 0;
}
pause(t);
closesocket ();//Закрываем
goto ss;
}
/////////////
if (p[9]=='2' && p[10]=='0' && && p[11]=='0' && && p[13]=='O' && && p[14]=='K')//1
{
for (int n=0; n<990; n++)//2
{
if (p[n]==formatic(13)&&p[n+1]==formatic(10)&&p[n+2]==formatic(13)&&p[n+3]==formatic(10))//3
{
for (int n1=n+4; n1<990; n1++)//4
{
if (p[n1]=='O'&&p[n1+1]=='K'&&p[n1+2]=='|')//5
{
otvet="";
for (int n2=n1+3; n2<990; n2++)//6
{
if (p[n2]==formatic(13))//7
{
closesocket ();//Закрываем
return 1;
}//7
otvet=otvet+p[n2];
}//6
//otvet="Ошибка нахождения спец символов после заголовка. Ваша капча "+formatic(13)+formatic(10)+otvet;
closesocket ();//Закрываем
return 1;
}//5
if (p[n1]=='C'&&p[n1+1]=='A'&&p[n1+2]=='P'&&p[n1+3]=='C'&&p[n1+4]=='H'&&p[n1+5]=='A'&&p[n1+6]=='_'&&p[n1+7]=='N'&&p[n1+8]=='O'
&&p[n1+9]=='T'&&p[n1+10]=='_'&&p[n1+11]=='R'&&p[n1+12]=='E'&&p[n1+13]=='A'&&p[n1+14]=='D'&&p[n1+15]=='Y')
{
if (gettime()-wtt1>wtt)
{
otvet="ERROR. Время ожидания прошло. Ваш ID "+formatic(13)+formatic(10)+otvet;
closesocket ();//Закрываем
return 0;
}
pause(t);
closesocket ();//Закрываем
goto ss;
}
}//4
for (n1=n+4; n1<990; n1++)//8
{
if (p[n1]=='E'&&p[n1+1]=='R'&&p[n1+2]=='R'&&p[n1+3]=='O'&&p[n1+4]=='R')//9
{
otvet="";
for (n2=n1; n2<990; n2++)//10
{
if (p[n2]==formatic(13))//11
{
closesocket ();//Закрываем
return 0;
}//11
otvet=otvet+p[n2];
}//10
}//9
}//8
return 0;
}//3
}//2
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после заголовка Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}//1
closesocket ();//Закрываем
otvet="ERROR. Ошибка подключения к сервесу. Не вернул OK 200 Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
if (gettime()-wtt1>wtt)
{
closesocket ();//Закрываем
otvet="ERROR. Время ожидания прошло. Не удалось отправить запрос Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
pause(t);
closesocket ();//Закрываем
goto ss;
}
if (gettime()-wtt1>wtt)
{
otvet="ERROR. Время ожидания прошло. Не удалось открыть сокет. Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
pause(t);
goto ss;
}
else return 0;
}
function capchasave(string #otvet, string id, string pyt)
{
otvet="";
if (opensocket ("antigate.com", 80)==1)//Если открыли сокет
{
read_file(pyt);
strcpy(#s[0], "POST /in.php HTTP/1.1");//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Host: antigate.com");//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0],format(#s[0])+"Content-Type: multipart/form-data;");//Формируем POST запрос
savegetpost(#s[0], 0);
strcpy(#s[0], format(#s[0])+" boundary=kibor-post");//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Length: 0000000000" );//Формируем POST запрос
savegetpost(#s[0], 2);
t_content_length=sizf;
strcpy(#s[0], format(#s[0])+"--kibor-post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Disposition: form-data; name="+formatic(34)+"method"+formatic(34));//Формируем POST запрос
savegetpost(#s[0], 2);
strcpy(#s[0], format(#s[0])+"post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"--kibor-post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Disposition: form-data; name="+formatic(34)+"key"+formatic(34));//Формируем POST запрос
savegetpost(#s[0], 2);
strcpy(#s[0],format(#s[0])+id);//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"--kibor-post" );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Disposition: form-data; name=");//Формируем POST запрос
strcpy(#s[0], format(#s[0])+formatic(34)+"file"+formatic(34)+"; filename="+formatic(34)+"12345.jpg"+formatic(34) );//Формируем POST запрос
savegetpost(#s[0], 1);
strcpy(#s[0], format(#s[0])+"Content-Type: image/jpeg");//Формируем POST запрос
savegetpost(#s[0], 2);
sizf=size(#s[0]);//Узнаем номер в массиве конца строки с POST запросом
for (int n=0; n<size_file; n++)s[sizf+n]=file[n];
sizf=sizf+size_file;
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(0);
sizf=sizf+2;
s[sizf]='-'; sizf++; s[sizf]='-'; sizf++; s[sizf]='k'; sizf++; s[sizf]='i'; sizf++; s[sizf]='b'; sizf++;
s[sizf]='o'; sizf++; s[sizf]='r'; sizf++; s[sizf]='-'; sizf++; s[sizf]='p'; sizf++; s[sizf]='o'; sizf++;
s[sizf]='s'; sizf++; s[sizf]='t'; sizf++; s[sizf]='-'; sizf++; s[sizf]='-'; sizf++;
s[sizf]=formatic(13);s[sizf+1]=formatic(10);s[sizf+2]=formatic(0);
sizf=sizf+2;
save_content_length();
//messagebox (format(#s[0]));//Воспроизводим что отправляем
/*
if (fopen ("C:\543215.txt", "wb")!=0)
{
//записать в файл что отправляем
fwriteb(#s[0], sizf);//Запись по указателю на масив char
fclose();
}
*/
if (sendhtml(#s[0], sizf)>0)//Если отправили запрос
{
recvhtml(#p[0], 999);//читаем ответ
//messagebox (format(#p[0]));//Воспроизводим ответ
if (p[9]=='2' && p[10]=='0' && && p[11]=='0' && && p[13]=='O' && && p[14]=='K')
{
for (int n=0; n<990; n++)
{
if (p[n]==formatic(13)&&p[n+1]==formatic(10)&&p[n+2]==formatic(13)&&p[n+3]==formatic(10))
{
for (int n1=n+4; n1<990; n1++)
{
if (p[n1]=='O'&&p[n1+1]=='K'&&p[n1+2]=='|')
{
for (int n2=n1+3; n2<990; n2++)
{
if (p[n2]==formatic(13))
{
closesocket ();//Закрываем
return 1;
}
otvet=otvet+p[n2];
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после заголовка. Ваш ID "+formatic(13)+formatic(10)+otvet;
return 0;
}
}
for (n1=n+4; n1<990; n1++)
{
if (p[n1]=='E'&&p[n1+1]=='R'&&p[n1+2]=='R'&&p[n1+3]=='O'&&p[n1+4]=='R')
{
for (n2=n1; n2<990; n2++)
{
if (p[n2]==formatic(13))
{
closesocket ();//Закрываем
return 0;
}
otvet=otvet+p[n2];
}
}
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после ошибки. Ошибка "+formatic(13)+formatic(10)+otvet;
return 0;
}
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка нахождения спец символов после заголовка.";
return 0;
}
closesocket ();//Закрываем
otvet="ERROR. Ошибка подключения к сервесу. Не вернул OK 200";
return 0;
}
closesocket ();//Закрываем
otvet="ERROR. Не удалось отправить запрос";
return 0;
}
otvet="ERROR. Не удалось открыть сокет.";
return 0;
}
hh:;
function savegetpost(char #s, int p)
{
sizf=size(#s[0]);//Узнаем номер в массиве конца строки с POST запросом
//Записываем \r\n или \r\n\r\n
for (int n=0; n<p; n++){s[sizf]=formatic(13);s[sizf+1]=formatic(10);sizf=sizf+2;}
s[sizf]=formatic(0);
}
function read_file(string pyt)
{
if (fopen (pyt, "rb")!=0)
{
size_file=freadb(#file[0], 9999);
fclose();
size_file--;
}
}
function save_content_length()
{
char c_cont_l[12];
strcpy(#c_cont_l[0], format(sizf-t_content_length));
int siz_cont_l=size(#c_cont_l[0]);
int r_cont_l=10-siz_cont_l;
for (int n=0; n < siz_cont_l; n++)s[t_content_length-14+r_cont_l+n]=c_cont_l[n];
}
Це скрипт для автоматизації компіляції, підписи і запуску драйвера який пишеться в середовищі WinDDK. Відео роботи.
win w;
a: if (getkeystate(17)==1 && getkeystate(192)==1)//если нажаты контр Ё
{
a1: if (getkeystate(17)==1 || getkeystate(192)==1){sleep(50); goto a1;}//ждать пока не отпустят
fun_cmd();//запуск и работа с программой cmd.exe setenv.bat(компиляция драйвера)
fun_dseo13b();//запуск и работа с программой dseo13b.exe (подпись драйвера)
fun_KmdManager();//запуск и работа с программой KmdManager.exe (перезапуск драйвера)
}
sleep(100); goto a;
function fun_KmdManager()//запуск и работа с программой KmdManager.exe (перезапуск драйвера)
{
start("C:\DRV\objfre_win7_amd64\amd64\KmdManager.exe");sleep(500);
fun_control("Kernel-Mode Driver Manager");
vvod("C:\DRV\objfre_win7_amd64\amd64\TestDriver.sys");
button(0, window ("&Stop", "Button", w));sleep(500);
button(0, window ("&Unregister", "Button", w));sleep(500);
button(0, window ("Re&gister", "Button", w));sleep(500);
button(0, window ("&Run", "Button", w));sleep(500);
sendmessage(WM_CLOSE, 0, 0, w);sleep(500);
fun_control("Kernel-Mode Driver Manager");
button(0, window ("&Да", "Button", w));
}
function fun_dseo13b()//запуск и работа с программой dseo13b.exe (подпись драйвера)
{
start("C:\DRV\objfre_win7_amd64\amd64\dseo13b.exe");sleep(500);
fun_control("Driver Signature Enforcement Overrider");
button(0, window ("&Next >", "Button", w));sleep(200);
fun_control("Software License Agreement");
button(0, window ("&Yes", "Button", w));sleep(200);
fun_control("Driver Signature Enforcement Overrider");
button(0, window ("Sign a System File", "Button", w));sleep(200);
button(0, window ("Next", "Button", w));sleep(200);
fun_control("Insert filename ");
sleep(500);
vvod("C:\DRV\objfre_win7_amd64\amd64\TestDriver.sys");
button(0, window ("OK", "Button", w));sleep(200);
fun_control("Done!");
button(0, window ("ОК", "Button", w));sleep(200);
fun_control("Driver Signature Enforcement Overrider");
button(0, window ("Exit", "Button", w));sleep(200);
button(0, window ("Next", "Button", w));sleep(200);
}
function fun_cmd()//запуск и работа с программой cmd.exe setenv.bat(компиляция драйвера)
{
start("%windir%\system32\cmd.exe");
sleep(500);
a: w= window (-1, "ConsoleWindowClass", -1);
if (w==0){sleep(10); goto a;}
sleep(100);
vvod("cd C:\WINDOWS\");key(RETURN);
vvod("cd C:\");key(RETURN);
vvod("C:\WinDDK\7600.16385.1\bin\setenv.bat C:\WinDDK\7600.16385.1\ fre x64 WIN7");key(RETURN);
vvod("cd C:\");key(RETURN);
vvod("cd drv");key(RETURN);
vvod("build");key(RETURN);
vvod("exit");key(RETURN);
sleep(500);
a1: w=window (-1, "ConsoleWindowClass", -1);
if (w!=0){sleep(10); goto a1;}
}
function fun_control(string name)//функция контроля появления диалогового окна
{
a: w=window (name);
if (w==0){sleep(10); goto a;}
}
function vvod(string text)//Ввод текста с зажатием шифта
{
char tx[9999];
strcpy(#tx[0], text);
int sz=size(#tx[0]);
int sh;
for(int n=0; n<sz; n++)
{
sh=0;
if (tx[n]==':' || tx[n]=='_'){keydown(SHIFT);sh=1;}//Тут символы надо для набора которых нажать шифт
key(tx[n]);
if (sh==1)keyup(SHIFT);
}
}
Це відео бота для DarkOrbit зробленого в Кібор.
На форумі ще багато прикладів ..