Общее·количество·просмотров·страницы

суббота, 26 мая 2012 г.

DrWeb key

Написал уже давно,че то ток вспомнил про откомпиленную версию.

Что то вроде установщика ключей.
работает элементарно
1)Отключаем самозащиту.

2)Делаем пошагово как на картинке

После сообщения о успехе включаем самозащиту.имеем новый ключ.

Писана тулза на ассемблере.имеет весу 7561 байт.

Юзаем на здоровье.

http://splashed.ucoz.ru/DrWeb_Key_Finder.zip

вторник, 15 мая 2012 г.

Давно ничего не писал.Нет не творческий кризис.есть какие то мысли.Есть какие то аспекты почему не писал.
1)Лень.
2)сессия
3)плохое моральное состояние,алкоголь.

Если соберу себя,напишу что нибудь интересное.Ну думаю после сессии зафигарю много приятных штучек-дрючек(типа простой оси, doom II подобного двига, ну или хз что).
Надеюсь что помогаю людям.Я не часто тут.Если что пишите

BYE!

четверг, 19 апреля 2012 г.

модификация IAT


После месяца,грубо говоря,морального разложения :) (ну и немного работы) я решил снова че нить написать.

Сегодня речь пойдет снова о перехвате функций в ring3

Арсенал:

1)Delphi
2)Masm
3)что то еще по желанию:)

План:

1)Немного теории (соовсем мало))
2)Внедрение
3)Патчинг IAT


Начнем-с

ТЕОРИЯ

Как известно, в ring 3 есть несколько способов хука АПИ функций,как:

1)Сплайсинг
2)Модификация ИАТ таблиц
3)Непосредственная подмена dll

Собственно у нас речь пойдет о патчинге ИАТ.
Что собой представляет данный метод.

ИАТ это таблица адресов импорта. Она используется в ПЕ файлах в качестве таблицы для поиска, когда происходит вызов функции из другого модуля. Когда динамический компоновщик загружает модули и объединяет их, он записывает действительные адреса в область IAT так, чтобы они указали на ячейки памяти соответствующих библиотечных функций.Суть будет заключаться в правке этих самых значений и переходе на вызов нашей функции.

Рассмотрим некоторые плюсы и минусы данного метода:

+

1)Довольно простой метод перехватить какую-либо функцию. Имеет локальный характер,что позволяет  осуществлять перехват в каком-либо едином модуле.
2)Потокобезопасен.

-

1)Внедрение длл в  отличие от сплайсинга, хотя сплайсинг дает глобальный перехват.
2)Простое обнаружение ввиду внедрения динамической библиотеки.

В целом теория окончена.

---------------------------------------------------------------------------------------------------------------------

ВНЕДРЕНИЕ ДЛЛ

Существует несколько методов внедрения длл, некоторые из которых я опишу.
В юзермоде (ring 3) есть несколько методов внедрения ДЛЛ, наиболее популярными являются:

1)Метод внедрения с помощью реестра.
2)Метод внедрения с помощью хуков
3)Метод внедрения удаленными потоками.

Мы будем рассматривать самый, более гибкий и удобный метод- внедрение удаленными потоками,но пройдемся по каждому в кратце.

Метод внедрения с помощью реестра.
Работает этот метод только на линейке НТ систем( >= win 2000)
Суть в том что при загрузке любого приложения, использующего библиотеку user32.dll (таких приложений 98%) все dll содержащиеся в ключе HKLM\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
загружаются в адресное пространство этого приложения.Дальше не трудно понять что все программы использующие user32.dll получат и нашу библиотеку.

Плюсы: легко реализуемо
Минусы: так же легко обнаруживаемо




Метод внедрения с помощью хуков

Как известно, приложения получают много сообщений о событиях,так вот суть в том что бы перехватывать сообщения чужого процесса,для чего применяется функция SetWindowsHookEx, прочесть о которой более подробно можно в тырнете:).



Метод  внедрения удаленными потоками.

Наиболее труден в реализации, зато наиболее гибок и мощен.Создается удаленный поток с помощью CreateRemoteThread . Алгоритм будет таковым:
1)Получение дескриптора процесса в котором мы хотим создать поток,используя OpenProcess.
2)Передача адреса функции LoadLibrary
3)Выделение памяти в адресном пространстве процесса при помощи функции VirtualAllocEx
4)Записать имя библиотеки через WriteProcessMemory
5)Создание потока.

Так как внедрение длл для патчинга ИАТ нам нужно,то напишем простенький инжектор на асме.Инжектор будет глобальный.Проходить будем по алгоритму что описан выше+не большой бонусик будет:)

код:

.586
option casemap:none
.model flat,stdcall
include include\windows.inc
include include\kernel32.inc
include include\user32.inc
include include\advapi32.inc
include include\ntdll.inc

includelib lib\kernel32.lib
includelib lib\ntdll.lib
includelib lib\user32.lib

includelib lib\advapi32.lib

.data
lib db 'c:\hook.dll',0; длл-ка которую внедряем
Size dd $-lib; размер строки
krnl db 'kernel32.dll',0;
loadlibrary db "LoadLibraryA",0;
LL dd 0; тут будет храниться адрес ф-ии LoadLibrary
Param dd 0; а тут адрес строки с именем dll
szPriv db 'SeDebugPrivilege',0
.data?
ThreadId dd ?; ид потока
hSnap dd ?
hProcess dd ?
ProcEntry PROCESSENTRY32 <?> ; структура

.code
ThreadProc proc
invoke Sleep, 10000000
ret
ThreadProc endp ; поток

EnableDebugPrivilege proc
    local hTokenNew:HANDLE
    local tkpNew:TOKEN_PRIVILEGES

    invoke GetCurrentProcess
    mov ecx,eax
    invoke OpenProcessToken,ecx,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,addr hTokenNew
    .if eax != 0
      invoke LookupPrivilegeValue,0, addr szPriv,addr tkpNew.Privileges.Luid
      .if eax != 0
        mov tkpNew.PrivilegeCount,1
        mov tkpNew.Privileges.Attributes,SE_PRIVILEGE_ENABLED
        invoke AdjustTokenPrivileges,hTokenNew,0,addr tkpNew,0,0,0
        .if eax != 0
          invoke GetLastError
          .if eax == ERROR_SUCCESS
            mov eax,1
          .else
            xor eax,eax
          .endif
        .endif
      .endif
      push eax
      invoke CloseHandle,hTokenNew
      pop eax
    .endif
    ret
EnableDebugPrivilege endp ; тот бонус что я говорил, получаем привилегии отладчика
;для внедрения в системные процессы.Как ни крути,а сидеть в winlogon’e или т.п. это уже ;что то.Дальше идем по алгоритму.

start:
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0; создаем снимок сис.
mov hSnap,eax
mov ProcEntry.dwSize,sizeof PROCESSENTRY32 ; заполняем структуру
invoke Process32First,hSnap,addr ProcEntry
NextProcess:
invoke OpenProcess,PROCESS_CREATE_THREAD or PROCESS_VM_WRITE or PROCESS_VM_OPERATION,0,ProcEntry.th32ProcessID;открытие проц.куда внедрять длл
mov hProcess,eax
invoke GetModuleHandle,addr krnl; получаем хэндл
invoke GetProcAddress,eax,addr loadlibrary; получаем адрес ф-ии
mov LL,eax
invoke VirtualAllocEx,hProcess,NULL,Size,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE; отводим память в удаленном процессе.
mov Param,eax

invoke WriteProcessMemory,hProcess,eax,addr lib,Size,NULL;записываем имя длл
        call EnableDebugPrivilege ; получаем привилегии отладчика
        invoke CreateRemoteThread,hProcess,NULL,NULL,LL,Param,NULL,addr ThreadId;удаленный поток вызывает loadlibrary и инжектит нашу dll
invoke Process32Next,hSnap,addr ProcEntry ; идем дальше по всем проц.
.if eax!=0
jmp NextProcess
.endif
invoke ExitProcess,0
end start



Разберем:
1)Открытие процесса,куда будем внедряться
2)Получаем адрес loadlibrary
3)выделяем память в удаленном процессе
4)Записываем строку с именем библиотеки в чужой процесс
5)Создаем удаленный поток который вызывает loadlibrary и инжектит длл.

В общем то так,есть еще одна фича,если получить debug privilege и вызывать перед внедрением, то можно будет внедряться в системные процессы,например стандартный демон венды svchost.exe, а это уже чего то ,да стоит.

Достоинства и недостатки метода:

+
Стабильная работа как на 32 разрядных так и на 64 разрядных вендах.
Локальный характер
Не требуется трамплинов
Не происходит модификации файла.

-
Довольно сложный метод реализации.(хотя не очень))
Если нужен глобальный хук, то придется во всех ДЛЛ это делать.


Про инжекты мы закончили.

---------------------------------------------------------------------------------------------------------------------

Патчинг ИАТ

Вообще сама техника проста.Работа вся начинается с поиска ИАТ определенного модуля.Ищем с помощью ф-ии ImageDirectoryEntryToData, описание которой можно найти в мсдн.В кач-ве параметра передадим запрос на получение ИАТ.Затем, выполняется просмотр всех секций импорта, параллельно сравнивается имя dll.Если обнаруживается совпадение, то старый адрес заменяется на новый.
Пишем код на делфи, в виде ДЛЛ (вкратце объяснено в комментах к коду):

type
  TImageImportDescriptor = packed record
    OriginalFirstThunk : DWORD;
    TimeDateStamp      : DWORD;
    ForwarderChain     : DWORD;
    Name               : DWORD;
    FirstThunk         : DWORD
  end;
  PImageImportDescriptor=^TImageImportDescriptor;

TMessageBoxA = function (hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
  DirectoryEntry: Word; var Size: DWORD): Pointer; stdcall;
    external 'imagehlp.dll' name 'ImageDirectoryEntryToData'; // импортируем статически для определения дескриптора таблицы импорта.

var
 OldMessageBoxA : TMessageBoxA;

procedure PATCHIAT(AModule: hModule; ALibName : string; Old, New: Pointer);
var
  SzIAT           : ULONG;                  // размер таблицы
  IDP : PImageImportDescriptor; // указатель на таблицу
  LID: PImageImportDescriptor; // указатель на запись длл
  ThunkPtr            : LPDWORD;
  OldProtect, Tmp     : dword;
begin

// ищем ИАТ IMAGE_DIRECTORY_ENTRY_IMPORT показывает что запрос на ИАТ
IDP  := ImageDirectoryEntryToData(Pointer(AModule), TRUE,
    IMAGE_DIRECTORY_ENTRY_IMPORT, SzIAT);

if IDP  = nil then exit; // не нашли?-выход
LID := nil;

while IDP.Name <> 0 do
 begin
  if (lstrcmpiA(PChar(AModule + IDP.Name), PChar(ALibName)) = 0) then
begin
   LID := IDP; // ищем импорт с совпадающим именем

ThunkPtr := LPDWORD(AModule + LID.FirstThunk);
   while ThunkPtr^ <> 0 do
begin // ищем адрес надобной фу-ии в таблице.

if (pointer(ThunkPtr^) = Old) then
begin
     // разрешаем запись в страницу
     VirtualProtect(ThunkPtr, 4, PAGE_READWRITE, OldProtect);
     // Çàïèñü
     WriteProcessMemory(GetCurrentProcess, ThunkPtr, @New, 4, Tmp);
     // производим запись
     VirtualProtect(ThunkPtr, 4, OldProtect, Tmp);
// восстанавливаем права на запись как было
    end;
    Inc(ThunkPtr);
   end;
  end;
  Inc(IDP);
 end;
end; // нашли?-производим замену.

procedure waist(ALibName : string; Old, New: Pointer);
var
  hSnap : THandle;
  m      : TModuleEntry32;
begin

 // снимаем текушие процессы
 hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId);
 if hSnap = INVALID_HANDLE_VALUE then
  exit;
 m.dwSize := SizeOf(TModuleEntry32);
 if (Module32First(hSnap, m)) then
  repeat
   // патчим ИАТ
   PATCHIAT(m.hModule, ALibName, Old, New);
  until not(Module32Next(hSnap, m));
 CloseHandle(hSnap);

end;

// остался перехватчик

function NewMessageBoxA(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
 Result := OldMessageBoxA(hWnd, 'FUCK YOU ASSHOLE!!!', 'Ìðàçèø,åìó â î÷êî òû âëàçèøü!', uType);
end;

begin
 @OldMessageBoxA := GetProcAddress(GetModuleHandle('user32.dll'), 'MessageBoxA');
 waist('user32.dll',@OldMessageBoxA,@NewMessageBoxA);

end.





На этом все.

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

понедельник, 5 марта 2012 г.

Выводим wm в Украине

Всем привет.Сегодня в этой микро-статье я хочу поделиться с вами о выводе вэбмани.Я думаю те кто проживают в хохляндии знаю что у нас с этим делом довольно тривиальная ситуация.Не раз получив деньги на вм,я думал о выводе,но все как то долго,париться сильно.Тратил их на вещи в нете,просаживал и все такое.

Ну и так ближе к делу.

Я думаю большинство знает что один из самых надежных и распространенных банков Украины это ПриватБанк.Вот с ним родимым у нас и будет дело.
И так вывод у нас будет происходить на одну из карт этого банка.Возможен выбор двух карт: Миттєва или карту другого банка,но так как мы имеем дело с ПриватБанком,то и выводим соответственно на его карту.

И так,что по чем.
Прежде всего нам нужно оформить карту.Для этого нам понадобится:
1)Паспорт
2)Идентификационный код
3)Мобильный телефон(желательно ,конечно,ваш собственный)
4)25 гривен
5)Немного терпения.

Как оформляется карта:
Раньше можно было оформить карту онлайн,но теперь к сожалению такой фичи нету.Карта оформляется в любом отделении Приват банка.
Придя в банк подходим к любому столику обслуживания клиентов,там вам дают небольшую анкету,которую вы должны будите заполнить, после чего вам выдают квитанцию и вы оплачиваете карту в кассе в размере 25 гривен.После чего возвращаетесь к столику обслуживания.Там вам дают карту в руки,фотографируют с ней на камеру.После чего производят какие то манипуляции по активации карты.Для этого и нужен сотовый.Все это дело происходит на протяжении 20-25 минут.После чего вам вручают конвертик.В нем:
Сама карта(карта является как бы визой(да кстати вы можете выбрать номинал карты-доллары или гривны)то есть позволяет снимать деньги в любой точке мира),какой то буклетик с услугами банка,небольшой чек,предоставляющий логин и пароль для входа на сайт банка.Сайт этот очень полезен,он позволит вам мониторить счета карт\добавлять\удалять какие либо счета карт,производить операции оплаты,обмена деньгами с карты на карту и прочее прочее.
Карта активируется в течении суток,либо вы можете добавить карту в список карт через сайт,тем самым активируя ее сразу.Ну и соответственно пин код к карте.

Производим дальнейшие манипуляции.

Если ваша валюта не в U то советую вам перевести ее
в U, по более выгодному курсу это можно сделать на специальных обменниках в интернете,коих предостаточно.
Я долго лазил по просторам интернета в поисках более выгодного курса по выводу денег.Некоторые позволяют это сделать достаточно быстро,но при этом дерут хороший процент (что то вроде 7,а то и больше)за услуги.Согласитесь каждый раз терять 7% не очень круто.Полазив по самому webmoney я нашел то что нужно.Вывод у нас будет совершаться через сайт https://banking.ukrgarant.com/.

что нужно сделать предварительно:
Для вывода по хорошему курсу,вам предстоит закрепить вашу карту за wmid- ом.Делается это на сайте https://cards.ukrgarant.com/
Там вы можете видеть пункт закрепление карты.Для закрепления карты у вас должен быть формальный аттестат webmoney. Для того что бы получить его вы должны ввести данные с вашего паспорта и ИНН.Это также требует определенного времени.После закрепления карты,можно заняться непосредственно выводом.Для этого переходим на сайт выше,и нажимаем пункт отправить WMU в банк.Там нужно будет заполнить поля.
Заполняем.
1)Название карты- указываете любое для вас удобное.
2)ФИО (указываете ваше ФИО,оно должно быть таким же на какое вы оформили карту соответственно)
3)Расчетный счет-реквизит Приват Банка 29244825509100
4)МФО – 305299
5)Код получателя – 14360570
6)Номер карты вроде.Его можно увидеть на лицевой стороне карты(16 цифр)
Отправляете в банк.Комиссия в данном случае составляет 0.8%- стандартная комиссия webmoney.

Потом я ждал.прошло пол суток-денег не поступило,и я решил обратиться в поддержку банка.У банка есть онлайн поддержка с которой можно связаться с сайта,логин и пароль у вас есть.Там мне четко ответили в какое время придут деньги.Все быстро и оперативно разжевали по поводу совершения банковских операций.Иными словами-тех поддержка на должном уровне.

По указанному времени средства прибыли на счет.Снятие наличных разрешается до 8К в сутки.
Каждый раз при снятии с карты есть комиссия,она составляет 1% от снимаемой суммы.Это единственный недостаток карты.Зато карта не нуждается в обслуживании.Выдается карта на 2 года.После чего вы приходите с ней в отделение Приват Банка,и вам ее заменяют совершенно бесплатно на новую.После чего вы открепляете старую карту и закрепляете новую.
Я выводил что то ~ 1010К .В итоге получилось 1000.
Ну и сама карта:

На все про все потратил 2 дня,не зная до этого про вывод толком ничего.

В заключении хочу пожелать всем успешного заработка!Спасибо за внимание.