вторник, 3 апреля 2012 г.

Внедрение в чужой процесс С/С++

Вот сидел разбирался с инжектами и увидел   пример на http://habrahabr.ru/post/95305/. И тут как то радость появилась на душе :) Думаю ништяк , есть пример  то можно и учится. Только не там то было, код работал но и не работал , а завгвоздка была  в том что не было прав , и GetLastError возвращал

ERROR_ACCESS_DENIED
5 (0x5)
Access is denied.
 при создание потока , CreateRemoteThread();  потому что не было привилегий  на debug. Тогда мне друг (Ragnar ) дал очень полезный линк :  http://msdn.microsoft.com/en-us/library/windows/desktop/aa446619(v=vs.85).aspx. И тут все решилось , добавили в код привилегии и работает все на ура. Работает только на х32 системах , да и я только тестил на XP SP3 x86.
На Seven x64 не работает , но скоро разберусь что к чему и обязательно напишу продолжения.  

КОД:
http://paste.org.ru/?87vt0h
Удачки в использование !!! 

четверг, 15 марта 2012 г.

nod32 посылаем его по дальше

И так была такая интересная ситуация , сижу я и смотрю что мой безобидный локер ( для чего , как я его писал и т.д. это нас не интересует ) палит
nod32  probably a variant of Win32/LockScreen.AKE trojan.
Ну не годно такой твари как Nod  палить мое чудо , вот и я начал искать  за чего может он его палить. На это ушло минут 50 ну час максимум , как я заметил что он ругается на слова константы.
Пример:
Program Manager
mini
net
Minimal
Network
System\\CurrentControlSet\\Control\\SafeBoot
Software\\Microsoft\\Windows\\CurrentVersion\\Run
cmd.exe
и т.д.

Ну как  видно , он орет на слова которые относятся к системным  типа пути к реестру , пути к системным папкам и т.д.
И тогда я решил взять и написать маленькую функцию для шифрование строк.
char *  crp(char *s)
{
char* str=(char *)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,255);
strcpy(str, s);
for (int i = 0; i < strlen(s); i++)
{
str[i] = str[i] ^ 2;
}
             HeapFree(GetProcessHeap(),0,str);
return str;
}

Это простой метод шифрование данных XOR.  Кто не знает что такое XOR курите матчасть. 
В двух словах эта функа шифрует строки  , после чего Nod умолкает :) и это меня радует. Эта функция двусторонняя, при 1 вызове шифрует , тогда берем этот шифрований текст и снова передаем функе она его дешифрует. Можно было и заюзать другие методы шифрования , но это уже зависит от вас и вашей фантазии. 
Дерзайте. 
П.С. Я думаю так можно не только один NOD послать по дальше. Удачи!

пятница, 2 декабря 2011 г.

Подмена URL в Intenet Explorer

Ну вот решил описать такую штуку как "Подмена URL в Intenet Explorer", но метод не ух ты какой , потому что будет видно URL которое  мы вписали в программе.
Суть метода это посылание (Send/Post)Message , компонентам ИЕ ( Intenet Explore ).
Ну что бы узнать в какое окно нам нужно посылать сообщения я юзал  Spy++.
Сначала мы ищем главное окно , будем искать его по классе окна ИЕ :
FindWindow(PCHAR("IEFrame"),NULL);
Дальше ищем с помощью  функции FindWindowEx(); дочерние окна.
WorkerW
ReBarWindow32
Address Band Root
Edit - вот это нам надо , так как тут и надо вписывать свою URL;

Скрин Spy++.Что бы было понятней.

Дальше нам надо как то в поле Edit вставить свой URL, для этого мы заюзаем функцию SendMessage();
это будет выглядит так (edit, WM_SETTEXT, 0, LPARAM(PCHAR("google.com ")));
Ну вроде как URL заменили , теперь надо что бы браузер перешел по  этому линку , для этого мы отправим PostMessage(); , что бы нажался ENTER.
PostMessage(edit, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(edit, WM_KEYUP,   VK_RETURN, 0);
Ну вот теперь в ИЕ отображается наш сайт , тот что нам надо ...

Вот и все.


код программы:


#include <windows.h>
void main()
{
HWND ie,worker,toolbar,comboboxex,edit;
ie = FindWindow(PCHAR("IEFrame"),NULL);
worker = FindWindowEx(ie,0,"WorkerW",NULL);

toolbar= FindWindowEx(worker,0,"ReBarWindow32",NULL);
comboboxex = FindWindowEx(toolbar, 0, "Address Band Root",NULL);
edit = FindWindowEx(comboboxex,0,"Edit",NULL);

SendMessage(edit, WM_SETTEXT, 0, LPARAM(PCHAR("http://www.dojki.com ")));
PostMessage(edit, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(edit, WM_KEYUP,   VK_RETURN, 0);
}



понедельник, 24 октября 2011 г.

[Builder C++] Авторизация Вконтакте


Ну видел много тем   "Проблемы с авторизацией ВК",  "Помогите авторизоваться в ВК" и тому подобные. Вот и решил привести пример авторизации ВК на Builder C++.
 Как говорится "Без труда не вытащишь рыбки из пруда" , ну давайте будем приступать к труду :)

Для начала создадим саму форму, после этого бросим на нее 2 Edit ( первый  для ввода логина ,второй для ввода пароля ), Button для отправки запроса по щелчку  и еще конечно IdHTTP для создания запроса.
Мы будет отправлять серверу пост запрос .
Для кнопки надо написать следующий код:


void __fastcall TForm1::Button1Click(TObject *Sender) {
TStringList *S = new TStringList;
// формируем Пост  запрос для авторизации
S->Add("success_url=");
S->Add("fail_url=");
S->Add("email=" + login->Text);
S->Add("pass=" + pass->Text);
AnsiString S1, res;
S1 = IdHTTP1->Post("http://vkontakte.ru/login.php", S); // отправка запроса
// и прийом ответа
int r = S1.Pos("Указан неверный логин или пароль."); // парсим данные
// надо узнать авторизирувались или нет
res = S1.SubString(r, 33);
if (res != "Указан неверный логин или пароль.") {
ShowMessage("Ура мы авторизирувались!");
}
else {
ShowMessage(
"Такой почтовый адрес не зарегистрирован, либо пароль неверный.");
}
}
Вот и ничего сложно нет , дальше если хотите что то доделать  то это уже ваша фантазия...
Примерно так должна выглядеть программка.

Ну вроде все ничего сложного и лишнего !!

среда, 19 октября 2011 г.

Начинаем учить ООП С++ ч.1



Ну давайте вкратце объяснять  для чего нам ООП, ну в первую очередь без него почти никуда, каждая фирма что уважает себя , желает что бы Developer C++ знал ООП,  (проверено), второе упрощает написания прикладных программ и все полагаю , дальше будем узнавать по ходу какие еще  преимущества ООП.

Так давайте узнаем что такое ООП ,а точнее своруем с вики ООП :)

Объе́ктно-ориенти́рованное, или объектное, программи́рование (в дальнейшем ООП) — парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов используются объекты-прототипы.

Ну да что то взяли по написали что там есть классы и объекты т.д. Нужно бы как то разобраться что такое класс и объект.

Класс ( ну не в смысле "супер" )
Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Ну и что же нам наговорили умные дядьки которые создали эту штуку. Как на меня половину не понятно что такое класс. Сейчас постараюсь пояснить доступным языком ( ну для меня доступны , сам только учусь ^_- )

Класс -  это  данные которые похожие между собой например , Гуф ,Баста , Каста  - они все относятся к рэп исполнителям.  И их можно обеденить в 1 класс.
 Таким образом класс это сходство между собой объектов.
Объект - это экземпляр класса, то есть  класс  определяет поведения объекта.
Объект берет описание ему методы из классы.
Методы - это указания на то что должен делать объект , то есть действия описание для него.

Ну а теперь маленький пример:

#include <iostream>
using namespace std;
class test_obj_class // Создайом клас
{
private :
 int data; // описуем перемену которая будет видна только в класе
public:
 void setdata(int d) // метод класа  который изменяет поле data
 {
 data=d;
 }
 void showdata() // метод класа  который показует значения поля data
 {
 cout << "data = " << data;
 }
};
int main(){
 test_obj_class obj1,obj2;// создайом 2 объекта класа
 obj1.setdata(23); // изменяем поле
 obj2.setdata(34);
 obj1.showdata(); // выводим поле
 obj2.showdata();
return 0;
}



Так в этом примере приведен простой класс , с 2 методами для объектов:

1. Задать значения полю объекта.
2. Вывести это значения.
Вроде ничего сложного нет , на этом пожалуй 1 часть окончена , так как я говорю что учусь в месте с вами то скоро будут новые мини уроки.
П.С. Думаю еще 1 -2 урока  будет в общих чертах и все... дальше буду выкладивать только что то интересное, а не все подряд так как это все можно найти в любой книги ООП. Кстати очень  советую купить или скачать  книгу " ООП С++" автор Лафоре. Очень класная книга !