eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Reversme1 by NEMO
Посл.ответ Сообщение


Ранг: 469.0 (мудрец)
Статус: Участник
[www.AHTeam.org]

Создано: 27 сентября 2013 02:19 New!
Цитата · Личное сообщение · #1

Как загрузить картинку в Форму, если в DialogFunc нет обработки нажатия на меню и патчить нельзя?

Display a splash screen (it's in resource of Rev1.exe), when You click on the Bitmap menu.

NO PATCHING & PROCESSPATCHING ALLOWED!!!


Думал GetCommandLineA, но аргументы не используются...

{ Атач доступен только для участников форума } - Rev1.exe


Ранг: 72.3 (постоянный)
Статус: Участник

Создано: 27 сентября 2013 02:58 New!
Цитата · Личное сообщение · #2

Там нет доступа к битмапе(LoadBitmap()). Ну а ресурс диалог не содержит битмапы http://msdn.microsoft.com/en-us/library/windows/desktop/aa381003(v=vs.85).aspx

Да и обработки пункта меню я не обнаружил. Эта задача какой то прикол. И что понимать под патчем, секцию кода не трогать - есть овер стопицот метод для запуска надстройки. Прописать в реестре отладчик или верифер..

| Сообщение посчитали полезным: DimitarSerg, Abraham



Ранг: 307.7 (мудрец)
Статус: Участник

Создано: 27 сентября 2013 03:14 New!
Цитата · Личное сообщение · #3

Показать битмап не проблема (без патча кода), как показать его по нажатию в меню без патча ХЗ (опять же без патча кода).


Ранг: 228.7 (наставник)
Статус: Участник
radical

Создано: 27 сентября 2013 03:30 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #4

Dr0p пишет:
Эта задача какой то прикол.

Если это тот самый Nemo из SND - то он лошара, а задание сформулировано чёрт знает как.

This is my firts reversme, and I hope not last!
А я хоуп, шо это зэ ласт.


Ранг: 755.8 (! !)
Статус: Участник
Student

Создано: 27 сентября 2013 03:47 · Поправил: Isaev New!
Цитата · Личное сообщение · #5

софт не смотрел, но если бы стояла такая задача, оно могло бы по команде активировать обработчик просто, а там на что фантазии хватило
может из командной строки(хотя тс это вроде отсеял уже)
может через DDE (я бы через него сделал наверное, просто в реализации проще, а может только кажется потому, что сталкивался уже)
может порт слушает какой
или просто форма ждет какое-то сообщение необычное
в общем надо реверсить и копаться, а там 260кб лениво


Статус: Пришелец

Создано: 27 сентября 2013 04:30 · Поправил: F_a_u_s_t New!
Цитата #6

Ctrl + del, задание некорректное, ну или суть задания угадать само задание.
Isaev
Code:
  1. void __cdecl start()
  2. {
  3.   UINT v0; // eax@2
  4.  
  5.   hInstance = GetModuleHandleA(0);
  6.   GetCommandLineA();
  7.   InitCommonControls();
  8.   v0 = sub_401031(hInstance, 0, dword_4030C4, 10);
  9.   ExitProcess(v0);
  10. }
  11. // 4030C4: using guessed type int dword_4030C4;
  12.  
  13. //----- (00401031) --------------------------------------------------------
  14. WPARAM __stdcall sub_401031(HINSTANCE a1, int a2, int a3, int a4)
  15. {
  16.   struct tagMSG Msg; // [sp+0h] [bp-4Ch]@2
  17.   WNDCLASSEXA v6; // [sp+1Ch] [bp-30h]@1
  18.  
  19.   v6.cbSize = 48;
  20.   v6.style = 3;
  21.   v6.lpfnWndProc = DialogFunc;
  22.   v6.cbClsExtra = 0;
  23.   v6.cbWndExtra = 30;
  24.   v6.hInstance = a1;
  25.   v6.hbrBackground = (HBRUSH)16;
  26.   v6.lpszMenuName = "Rev1Menu";
  27.   v6.lpszClassName = "Rev1_DLGCLASS";
  28.   v6.hIcon = LoadIconA(hInstance, (LPCSTR)1);
  29.   v6.hIconSm = v6.hIcon;
  30.   v6.hCursor = LoadCursorA(0, (LPCSTR)0x7F00);
  31.   RegisterClassExA(&v6);
  32.   CreateDialogParamA(hInstance, "Rev1Dialog", 0, (DLGPROC)DialogFunc, 0);
  33.   ShowWindow(hWnd, 1);
  34.   UpdateWindow(hWnd);
  35.   while ( GetMessageA(&Msg, 0, 0, 0) )
  36.   {
  37.     TranslateMessage(&Msg);
  38.     DispatchMessageA(&Msg);
  39.   }
  40.   return Msg.wParam;
  41. }
  42.  
  43. //----- (004010FF) --------------------------------------------------------
  44. LRESULT __stdcall DialogFunc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
  45. {
  46.   switch ( Msg )
  47.   {
  48.     case 0x110u:
  49.       ::hWnd = hWnd;
  50.       break;
  51.     case 0x111u:
  52.       if ( (unsigned __int16)wParam == 10002 )
  53.       {
  54.         SendMessageA(hWnd, 0x10u, 0, 0);
  55.       }
  56.       else
  57.       {
  58.         if ( (unsigned __int16)wParam == 10101 )
  59.           MessageBoxA(
  60.             hWnd,
  61.             "This is my firts reversme, and I hope not last!\r\nSend any comment, solutions or bug reports to NEMO@free.of.pl\r\n\r\nRemeber! NO PATCHING!!!",
  62.             "Reversme1 by NEMO",
  63.             0);
  64.       }
  65.       break;
  66.     case 0x10u:
  67.       DestroyWindow(hWnd);
  68.       break;
  69.     default:
  70.       if ( Msg != 2 )
  71.         return DefWindowProcA(hWnd, Msg, wParam, lParam);
  72.       PostQuitMessage(0);
  73.       break;
  74.   }
  75.   return 0;
  76. }

SPLASH.bmp - 248 КБ ( 254.774 байт )

Ранг: 300.0 (мудрец)
Статус: Участник

Создано: 27 сентября 2013 09:23 · Поправил: Veliant New!
Цитата · Личное сообщение · #7

Любым из способов заинжектить DLL, которая через GetWindowLong/SetWindowLong подменит оконную процедуру (GWL_WNDPROC/DWL_DLGPROC) и обрабатывать таким образом сообщения от диалога

Veliant пишет:
Дык, но ведь PROCESSPATCHING не резрешен?

Подмена указателя через виндовую API мало смахивает на патч.
Совсем без вмешательства в файл и память процесса возможно разве что из ядра.


Ранг: 469.0 (мудрец)
Статус: Участник
[www.AHTeam.org]

Создано: 27 сентября 2013 11:07 New!
Цитата · Личное сообщение · #8

Veliant пишет:
Любым из способов заинжектить DLL, которая через GetWindowLong/SetWindowLong подменит оконную процедуру (GWL_WNDPROC/DWL_DLGPROC) и обрабатывать таким образом сообщения от диалога


Дык, но ведь PROCESSPATCHING не резрешен?

Но в общем судь как бы ясна, бо я думал что только я туплю.

З.Ы. Нафига GetCommandLineA(); в процедуре start,если она не исаользуется, как я понимаю компилятор ее есегда вставляет, но зачем?


Ранг: 755.8 (! !)
Статус: Участник
Student

Создано: 27 сентября 2013 11:37 New!
Цитата · Личное сообщение · #9

KingSise пишет:
как я понимаю компилятор ее есегда вставляет, но зачем?

не всегда, а когда програмист зачем-то оставляет
Code:
  1. main( int argc, char * argv[] )

скорее всего


Ранг: 72.3 (постоянный)
Статус: Участник

Создано: 27 сентября 2013 20:54 New!
Цитата · Личное сообщение · #10

KingSise

> Дык, но ведь PROCESSPATCHING не резрешен?

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

Ранг: 300.0 (мудрец)
Статус: Участник

Создано: 27 сентября 2013 22:50 · Поправил: Veliant New!
Цитата · Личное сообщение · #11

-Запускаете Red1.exe
-Запускаете newloaderv4.1.exe --lib Project1.dll --pid <PID_Red1>

Сорц:
Code:
  1. library Project1;
  2. uses
  3.   Windows, Messages, SysUtils;
  4.  
  5. {$*.res}
  6.  
  7. type
  8.   TDlgProc = function (hWnd: hWnd; uMsg: uInt; wp:wParam; lp:lParam): HRESULT; stdcall;
  9. var
  10.   hDlg: HWND;
  11.   origDlgProc: TDlgProc = NIL;
  12.   state: boolean = false;
  13.   bitmap: HBITMAP;
  14.   bm :tagBITMAP;
  15.  
  16. function DlgProc(hWnd: hWnd; uMsg: uInt; wp:wParam; lp:lParam): HRESULT; stdcall;
  17. var
  18.   dc, hMemDC: HDC;
  19.   ps: PAINTSTRUCT;
  20.   rc: TRect;
  21. begin
  22.   Result := 1;
  23.   case (uMsg) of
  24.   WM_PAINT:
  25.   begin
  26.     if state then
  27.     begin
  28.       dc := BeginPaint(hWnd, ps);
  29.       hMemDC := CreateCompatibleDC(dc);
  30.       SelectObject(hMemDC, bitmap);
  31.       BitBlt(dc,0,0,320,240,hMemDC,0,0,SRCCOPY);
  32.       DeleteDC(hMemDC);
  33.       EndPaint(hWnd, ps);
  34.  
  35.       result:=0;
  36.       exit;
  37.     end;
  38.   end;
  39.   WM_COMMAND:
  40.     if (Lo(wp) = $11) then
  41.     begin
  42.       if state then
  43.         state := false
  44.       else
  45.         state := true;
  46.  
  47.       InvalidateRect(hWnd, NIL, TRUE);
  48.     end;
  49.   else
  50.       Result := origDlgProc(hWnd, uMsg, wp, lp);
  51.   end;
  52. end;
  53.  
  54. begin
  55.   bitmap := LoadBitmap(GetModuleHandle(NIL), 'SPLASH');
  56.   hDlg := FindWindow(NIL, 'Reversme1 by NEMO');
  57.   if hDlg <> 0 then
  58.   begin
  59.     @origDlgProc := Pointer(GetWindowLong(hDlg, GWL_WNDPROC));
  60.     SetWindowLong(hDlg, GWL_WNDPROC, Integer(@DlgProc));
  61.   end;
  62. end.


tihiy_grom пишет:
клерк ведь сейчас желчью изойдет зачем ты ему delphi показал

Там прототипы годные

{ Атач доступен только для участников форума } - RedAddon.zip

Ранг: 440.8 (мудрец)
Статус: Участник

Создано: 28 сентября 2013 12:20 New!
Цитата · Личное сообщение · #12

Veliant
клерк ведь сейчас желчью изойдет зачем ты ему delphi показал

| Сообщение посчитали полезным: Abraham



Ранг: 72.3 (постоянный)
Статус: Участник

Создано: 28 сентября 2013 12:32 New!
Цитата · Личное сообщение · #13

tihiy_grom

Мне без разницы. Свою процедуру оконную незачем впиливать, это получается всёравно что новый модуль запилить.

Code:
  1. fnMenu proc uses ebx lpMsg:ptr MSG, nCode:ULONG
  2. Local Buffer[64]:CHAR
  3.          mov ebx,lpMsg
  4.          assume ebx:ptr MSG
  5.          .if nCode == MSGF_MENU
  6.                  .if [Ebx].message == WM_MENUSELECT
  7.                         mov ecx,[ebx].wParam
  8.                         movzx ecx,cx
  9.                         .if Ecx
  10.                               btr Skip,0
  11.                               invoke GetMenuString, [Ebx].lParam, Ecx, addr Buffer, 64, 0
  12.                               .if Eax == 7  ; "&Bitmap"
  13.                                    .if D[Buffer] == "tiB&"
  14.                                        bts Skip,0
  15.                                    .endif
  16.                               .endif
  17.                         .else
  18.                               btr Skip,0
  19.                               .if Carry? 
  20.                                    ; Тут происходит выбор пункта меню "&Bitmap"
  21.                                    ; ...
  22.                               .endif
  23.                         .endif
  24.                  .endif
  25.          .endif
  26.          invoke CallNextHookEx, 0, nCode, [Ebx].wParam, [Ebx].lParam
  27.          mov eax,TRUE
  28.          ret
  29. fnMenu endp

(dll_process_attach -> SetWinHook(WH_MSGFILTER)).

Это почему то не завелось(даже если fnMenu() заглушка, то рушится олли на фолте), хотя с другим прототипом робило. Не охота щас копаться в гуях.

Тут мы имеем описатель окна, его не нужно искать. Ну а для отрисовки нужно фильтровать WH_GETMESSAGE на скока понял.

| Сообщение посчитали полезным: Abraham

 eXeL@B —› Вопросы новичков —› Reversme1 by NEMO

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS