Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   Предлагаю к реверсированию спамбот (https://forum.antichat.xyz/showthread.php?t=40758)

sn0w 24.05.2007 17:29

Предлагаю к реверсированию спамбот
 
Отрыл на компе одной девки с офиса. нам кстати пров доступ отрубил изза этого бота. Решил исследовать зверюгу (hччp://rapidshare.com/files/33118600/rpcc.dll.html).

1) Итак наша длль лежит по адресу system32/rpcc.dll. при этом доступ к файлу заблокирован.

2) Прописана в winlogon/notify. при удалении параметра он ессна появляется снова.

3) Итак, отрубаем его: открываем список потоков в контексте winlogon, и отправляем пару (те которые kernel32!CreateThread+0x24) в спячку. Затем убиваем.

4) Вытираем инит с winlogon/notify
5) Перегружаем тачку.

6) Берем терь живой бинарник с system32/rpcc.dll

7) Запакована либка хер знает чем - там при распаковке и ммх интсрукции используются. я так и не распаковал :(

8) Пишем простенький лоадер (я дамп хотел снять), который тока подгружает эту либу. Итак я написал следующее:

MessageBox(0,"About to load rpcc.dll...",0,0);
LoadLibrary("rpcc.dll");
MessageBox(0,"Now you can dump physical memory..."0,0);

...и не сработало. после запуска и первого мессаджа, процесс лоадера вылетал к чертям. причем также удалялся и экзешник лоадера, а его образ копировался в system32/rpcc.dll !)). Это ессно навело на мысль что после анпака, либа убивала свой процесс. Поставил сплайс на TerminateProcess().

Код:

#include <windows.h>
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/SECTION:.text,EWRX")
#pragma comment(linker, "/NODEFAULTLIB")
#pragma comment(linker, "/ENTRY:startcode")

#pragma pack(1)
typedef struct mov_n_jmp{
        BYTE movEAXaddr;
        BYTE func_addr[4];
        BYTE jmpEAX[2];

}MOV_N_JMP;
#pragma pack()

BOOL __stdcall MyTerminateProcess(HANDLE,DWORD)
{
        MessageBox(0,"TerminateProcess() called",0,0);
        return TRUE;
}



void startcode()
{
        DWORD addr, myaddr, prot;
        MOV_N_JMP mj;
               
        MessageBox(0,"Splicing TerminateProcess()...",0,0);

        // prepare...
        addr = (DWORD)GetProcAddress(GetModuleHandle("kernel32.dll"), "TerminateProcess");
        myaddr = (DWORD)MyTerminateProcess;
        VirtualProtect((void*) addr, 512, PAGE_EXECUTE_READWRITE, &prot);
       
        // do a splice
        mj.movEAXaddr = 0xB8;
        mj.jmpEAX[0] = 0xFF;
        mj.jmpEAX[1] = 0xE0;
        CopyMemory(&mj.func_addr[0], &myaddr, 4);
        CopyMemory((void*)addr, &mj, sizeof(mj));
       
       
        MessageBox(0,"Patch ok, trying to call it...",0,0);
        TerminateProcess(0,0);
        MessageBox(0,"Now attempting to load rpcc.dll...",0,0);
        LoadLibrary("rpcc.dll");
        MessageBox(0,"Operation complete",0,0);

}

и опять таки ничего!! 2 потока в винлогон и копия тела. Вообщем предлагаю к реверсу! ж)

hidden 24.05.2007 18:56

Ставь бряк на обработчик sysenter'ов, он может вообще функциями третьего кольца не пользуется

Xserg 24.05.2007 21:44

Вряд ли его получится распаковать.

Из импорта использует только VertualProtect

Распаковывается частями, адреса АPI находит из экспорта системных библиотек, каждый раз при вызове любой функции. (торопится ему некуда)

У меня вообще не хочет работать.
После очередного вызова NtQueryInformationProcess, останавливается на исключении, не устанавливая SEН обработчик!

Запускал без отладчика, без антивиря и фаервола, Не работает.

Hellsp@wn 25.05.2007 14:57

Вроде знакомый криптор висит...
Вечером, если будет время анпакну :)

добавлено:

короче глянул, да там то, что я думал.
Под криптором упх, дальше сам давай ;)
Код:

00791000    60                    PUSHAD
00791001    BE 00B07800            MOV ESI,rpcc.<ModuleEntryPoint>
00791006    8DBE 0060FFFF          LEA EDI,DWORD PTR DS:[ESI+FFFF6000]
0079100C    57                    PUSH EDI
0079100D    83CD FF                OR EBP,FFFFFFFF
00791010    EB 10                  JMP SHORT rpcc.00791022

для отладки юзал OllyDbg + PhantOm для скрытия
не ставь обычные бряки на апи (int 3) юзай
железные (hardware)

Xserg 26.05.2007 18:13

Прикольный глюк у этого бота.
Если prcc.dll грузится в память по адресу ниже 0х400000 , то не работает


Время: 19:43