Предлагаю к реверсированию спамбот

Discussion in 'Реверсинг' started by sn0w, 24 May 2007.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,296
    Reputations:
    327
    Отрыл на компе одной девки с офиса. нам кстати пров доступ отрубил изза этого бота. Решил исследовать зверюгу (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().

    Code:
    #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 потока в винлогон и копия тела. Вообщем предлагаю к реверсу! ж)
     
    #1 sn0w, 24 May 2007
    Last edited: 24 May 2007
  2. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Ставь бряк на обработчик sysenter'ов, он может вообще функциями третьего кольца не пользуется
     
    1 person likes this.
  3. Xserg

    Xserg Elder - Старейшина

    Joined:
    9 Dec 2006
    Messages:
    135
    Likes Received:
    127
    Reputations:
    53
    Вряд ли его получится распаковать.

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

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

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

    Запускал без отладчика, без антивиря и фаервола, Не работает.
     
    1 person likes this.
  4. Hellsp@wn

    Hellsp@wn Elder - Старейшина

    Joined:
    29 Apr 2007
    Messages:
    401
    Likes Received:
    153
    Reputations:
    48
    Вроде знакомый криптор висит...
    Вечером, если будет время анпакну :)

    добавлено:

    короче глянул, да там то, что я думал.
    Под криптором упх, дальше сам давай ;)
    Code:
    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)
     
    #4 Hellsp@wn, 25 May 2007
    Last edited: 25 May 2007
  5. Xserg

    Xserg Elder - Старейшина

    Joined:
    9 Dec 2006
    Messages:
    135
    Likes Received:
    127
    Reputations:
    53
    Прикольный глюк у этого бота.
    Если prcc.dll грузится в память по адресу ниже 0х400000 , то не работает