Сейчас на форуме: zds, UniSoft (+6 невидимых)

 eXeL@B —› Программирование —› RtlCreateUserThread
Посл.ответ Сообщение

Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 12 декабря 2012 11:24
· Личное сообщение · #1

Не силен в с++, кому не сложно помогите разобраться функой (RtlCreateUserThread)

Вызов:
Code:
  1. RtlCreateUserThread(hinstDLL, 0, 0, 0, 0, 0,(PVOID)THREAD_Start, result, 0, 0);

Метод треда для теста:
Code:
  1. static void CALLBACK THREAD_Start(HMODULE hMod, int a, int b,  int c,  int d,  int e,  PVOID StartAddress,  HMODULE StartParameter,  int f,  int h)
  2. {
  3.          MessageBoxW(NULL, (L"Remote Thread Created!"), (L"Test Thread"), MB_OK);
  4.          return;
  5. }


Code:
  1. #pragma comment(lib,"ntdll.lib")
  2.  
  3. typedef  LONG NTSTATUS;
  4.  
  5. typedef struct _CLIENT_ID{
  6.     HANDLE UniqueProcess;
  7.     HANDLE UniqueThread;
  8. } CLIENT_ID, *PCLIENT_ID;
  9.  
  10.  
  11. NTSTATUS (NTAPI * RtlCreateUserThread)(HANDLE ProcessHandle,PSECURITY_DESCRIPTOR SecurityDescriptor,
  12.         BOOLEAN CreateSuspended,ULONG StackZeroBits,PULONG StackReserved,PULONG StackCommit,
  13.         PVOID StartAddress,PVOID StartParameter,PHANDLE  ThreadHandle,PCLIENT_ID ClientID );


При выполнении кода в таким виде падает приложение, пишу dll если это имеет значение.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 12 декабря 2012 11:53
· Личное сообщение · #2

А в чём сложность взять и отладить своё поделие?
Если уж пишешь длл, это не в DllMain происходит, надеюсь? Ибо там относительно небольшой набор функций можно спокойно вызывать, и создание потоков в это число не входит. Конкретно читать здесь http://msdn.microsoft.com/en-us/windows/hardware/gg487379.aspx



Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 12 декабря 2012 12:07
· Личное сообщение · #3

Сложно в том для меня, что эта dll подгружается к приложению, накрытом themida.
Нет не DllMain, сдается что в самом вызове проблема, ибо вышестоящие вызовы отрабатывают без проблем, как например.

Code:
  1. GetModuleHandleW(L"xxx_.dll");
  2. либо
  3. LdrDisableThreadCalloutsForDll(hinstDLL);




Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 12 декабря 2012 12:09
· Личное сообщение · #4

Quadcon
Где код из NTSTATUS?
Такие вещи нужно сразу указывать в первом посте, а не заставлять людей гадать.



Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 12 декабря 2012 12:13
· Личное сообщение · #5

F_a_u_s_t

Простите что?, В первом посте написал, что не знаком с++, многие вещи, загадка, как впрочем и ваш вопрос.

Это первое приложение, сам понимаю что браться за такие вещи когда знаний 0 не стоит, но нужно решить задачу.

Как понять код из (NTSTATUS) ?



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 12 декабря 2012 12:18
· Личное сообщение · #6

Quadcon пишет:
Как понять код из (NTSTATUS) ?

Результат работы функции RtlCreateUserThread.
В атаче хидер с кодами ошибок.
Ну и ссылку до кучи на msdn

95be_12.12.2012_EXELAB.rU.tgz - ntstatus.rar



Ранг: 65.3 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 12 декабря 2012 13:46 · Поправил: tomac
· Личное сообщение · #7

,...,OUT PHANDLE, OUT PCLIENT_ID
Вместо них 0. Куда RtlCreateUserThread должен ответ записать?
--> Описание <--


F_a_u_s_t
У него прога падает, видимо, в недрах RtlCreateUserThread, NTSTATUS-а еще нет.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 12 декабря 2012 14:01
· Личное сообщение · #8

tomac пишет:
У него прога падает, видимо, в недрах RtlCreateUserThread, NTSTATUS-а еще нет.

Все равно должна быть ошибка, либо сепшон в окне, либо NTSTATUS.

Quadcon
Прототип вызова ниже смотри, не будет работать, то давай коды ошибок.
Code:
  1. HANDLE h_thread;
  2. CLIENT_ID client_id;
  3. NTSTATUS status;
  4. status = RtlCreateUserThread( h_process, NULL, FALSE, 0, 0, PAGE_SIZE, (PVOID)thread_function, NULL, &h_thread, &client_id );




Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 13 декабря 2012 16:31
· Личное сообщение · #9

Падает в общем с

Code:
  1. STATUS_ACCESS_VIOLATION          ((NTSTATUS)0xC0000005L) 




Ранг: 65.3 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 13 декабря 2012 16:49
· Личное сообщение · #10

Quadcon

Доступ запрещен. Ты последние аргументы функции исправил? Нули заменил на валидные адреса?



Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 13 декабря 2012 17:14 · Поправил: Quadcon
· Личное сообщение · #11

tomac
Да, результат тот-же:

Code:
  1. int __usercall sub_10002BC0<eax>(int a1<eax>)
  2. {
  3.   int v1; // esi@1
  4.   int result; // eax@1
  5.  
  6.   v1 = a1;
  7.   result = (int)GetModuleHandleW(L"xxX_.dll");
  8.   dword_10016D0C = result;
  9.   if ( result )
  10.   {
  11.     dword_10016D08 = 1;
  12.     LdrDisableThreadCalloutsForDll(v1);
  13.     result = RtlCreateUserThread(-1, 0, 0, 0, 0, 0, sub_10002C20, dword_10016D0C, 0, 0);
  14.     if ( result )
  15.       result = NtTerminateProcess(-1, 0);
  16.   }
  17.   return result;


вот изначальный код, а это попытка его восстановить.

В общем спасибо всем, за советы и линки буду разбираться =).



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 13 декабря 2012 18:49
· Личное сообщение · #12

Quadcon
И опять те же костыли, RtlCreateUserThread(-1, 0, 0, 0, 0, 0, sub_10002C20, dword_10016D0C, 0, 0);
Что за нули в конце?
Еще раз:
Code:
  1. HANDLE h_thread;
  2. CLIENT_ID client_id;
  3. NTSTATUS status;
  4. status = RtlCreateUserThread( h_process, NULL, FALSE, 0, 0, PAGE_SIZE, (PVOID)thread_function, NULL, &h_thread, &client_id );

Это код из рабочего проекта, скопируй, поменяй thread_function на свою и все, профит.



Ранг: 30.2 (посетитель), 18thx
Активность: 0.030
Статус: Участник

Создано: 13 декабря 2012 18:50 · Поправил: Quadcon
· Личное сообщение · #13

F_a_u_s_t

Разве не видно что там декомпил? Я просто показал что пытаюсь восстановить, ваш пример пробовал результат тот-же.



Ранг: 0.0 (гость)
Активность: 0.250
Статус: Участник

Создано: 13 декабря 2012 18:59
· Личное сообщение · #14

Quadcon
Вступил и скомпилировал, все работает, косяк у вас в коде.



 eXeL@B —› Программирование —› RtlCreateUserThread
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати