Сейчас на форуме: _MBK_ (+5 невидимых)

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

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

Создано: 14 октября 2010 20:36 · Поправил: gena-m
· Личное сообщение · #1

Имеем такие параметры этой функции:

Code:
  1. 001CFD04  /001CFF24   
  2. 001CFD08  |298CA167  RETURN вSatelite.298CA167 изSatelite.298761F0
  3. 001CFD0C  |00000000   __in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes
  4. 001CFD10  |00000000   __in SIZE_T dwStackSize
  5. 001CFD14  |29876B20   __in LPTHREAD_START_ROUTINE lpStartAddress    (Satelite.29876B20 )
  6. 001CFD18  |00000000   __in_opt LPVOID lpParameter
  7. 001CFD1C  |00000000   __in DWORD dwCreationFlags
  8. 001CFD20  |001CFF10   __out_opt LPDWORD lpThreadId
  9. 001CFD24  |00000000
  10. 001CFD28  |00000000 
  11. 001CFD2C  |32200387

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

Почему?

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 14 октября 2010 22:53
· Личное сообщение · #2

Не особо наглядно вы продемонстрировали вызов функции CreateThread()

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 15 октября 2010 06:00
· Личное сообщение · #3

Потому что до старта потока должны выполняться некоторые действия, это нотификация Csrss и вызов SaferiReplaceProcessThreadTokens().



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

Создано: 15 октября 2010 07:48 · Поправил: gena-m
· Личное сообщение · #4

Coderess

Не особо наглядно потому что прот (PROTECTiON iD) сбрасывает железные бряки и простые палит не только в программе но и на начале функций поэтому пришлось поставить бряк на третью строку CreateThread, поэтому такая наглядность, из за обфускации в самой проге тоже смысла нет код приводить там ничего не видно, поэтому взял из стека после начала выполнения CreateThread.

Clerk

SaferiReplaceProcessThreadTokens - она по моему только в семерке нужна, но возможно ошибаюсь. Получается что поток и должен создаваться приостановленным? А когда он должен запускаться в таком случае или этот поток вообще создан для галочки и выполняться не будет, такой вариат возможен из за того что здесь напихано довольно много всего просто для запутывания?
Нотификация Csrss - где можно что либо почитать, что то ничего не нашел.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 15 октября 2010 10:45
· Личное сообщение · #5

Чего-то не то... У функции 6 параметров, а в стеке показано 5.
HANDLE WINAPI CreateThread(
__in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in_opt LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out_opt LPDWORD lpThreadId
);

стек нового потока???

-----
127.0.0.1, sweet 127.0.0.1




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

Создано: 15 октября 2010 12:38 · Поправил: gena-m
· Личное сообщение · #6

OKOB

Все расписал как сказали- все 6 параметров.
То что, что то не то, и я подозреваю, а вот что?
Поток создается, но приостановленный, хотя по идее должен выполняться сразу после создания.
Когда я выхожу из CreateThread без отладчика, затем аттачусь у меня вообще другая картина получается:

Code:
  1. Ident      Entry      Data block   Last error                           Status      Priority   User time     System time
  2. 000007BC   7C95077B   7FFDD000     ERROR_SUCCESS (00000000)             Активный     32 + 0       0.0000 s      0.0000 s
  3. 00000908   7C810856   7FFDE000     ERROR_SUCCESS (00000000)             Активный     32 + 0     127.4843 s      0.0000 s
  4. 00000C10   00000000   7FFDF000     ERROR_SUCCESS (00000000)             Активный     32 + 0    1243.4531 s      0.0156 s


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

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 15 октября 2010 16:46
· Личное сообщение · #7

gena-m
> по идее должен выполняться сразу после создания.
Не должен, причины описаны в #3. Независимо от флажка переданного в апи, поток будет создан остановленным, далее выполняются необходимые манипуляции и тред ресумится.



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

Создано: 15 октября 2010 19:03 · Поправил: gena-m
· Личное сообщение · #8

Code:
  1. Ident      Entry      Data block   Last error                   Status      Priority   User time     System time
  2. 00000168   00000000   7FFDD000     ERROR_SUCCESS (00000000)     Приостанов   32 + 0     242.5625 s      0.0156 s
  3. 0000079C   7C810856   7FFDC000     ERROR_SUCCESS (00000000)     Активный     32 + 0      94.6406 s      0.0000 s

Я незнаю почему, но шаманством (вначале циклю на нескольких адресах потом аттачусь) я попадаю на стартовый адрес потока и он уже запущен:

Code:
  1. 29876B20    55              PUSH EBP <----------------стою здесь по бряку и могу трассировать созданный поток
  2. 29876B21    89E5            MOV EBP,ESP
  3. 29876B23    83EC 38         SUB ESP,38
  4. 29876B26    8975 C8         MOV DWORD PTR SS:[EBP-38],ESI
  5. 29876B29    897D CC         MOV DWORD PTR SS:[EBP-34],EDI
  6. 29876B2C    E9 F4140400     JMP Satelite.298B8025
  7. 29876B31    303E            XOR BYTE PTR DS:[ESI],BH
  8. 29876B33    8F              ???                                      ; Неизвестная команда


До этого никаких проблем с трассировкой потоков небыло, первый раз столкнулся с тем, что после выхода из CreateThread я не могу брякнутся по стартовому адресу созданного нового потока.
При этом первый (первичный) у меня зациклен и остановлен сразу после выхода из CreateThread:

Code:
  1. 298CA15F    6E              OUTS DX,BYTE PTR ES:[EDI]                ; Команда I/O
  2. 298CA160    D2DE            RCR DH,CL
  3. 298CA162    E8 89C0FAFF     CALL Satelite.298761F0                   ; переходник на CreateThread
  4. 298CA167  - EB FE           JMP SHORT Satelite.298CA167 <----------здесь зациклен первый поток
  5. 298CA169    05 0000C09A     ADD EAX,9AC00000


-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 16 октября 2010 17:18 · Поправил: daFix
· Личное сообщение · #9

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

---------------------------
OpenBox 3.16
---------------------------
Debugger found



A debugger has been found running in your system.

Please, unload it from memory and restart your program !


ADDED:
Сабжевая прога в этом топике накрыта пепкой.

gena-m
Странно, у меня не виснет

-----
Research For Food




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

Создано: 16 октября 2010 18:32 · Поправил: gena-m
· Личное сообщение · #10

Ну если уж тут говорят за Пепку, тогда может быть подскажите как он палит отладчики?
Начинается все с TLS там он проверяет бряк на ОЕП (который отладчик ставит автоматом), затем сбрасываются железные бряки (предполагаю при проходе исключений, не проверял, просто их не использую), используется установка обработчиков исключений через SetUnhandledExceptionFilter, а их отладчик не устанавливает, в результате обработчика нет и исключение валит отладчик(использую плагин Hide Debugger), затем идет проверка имен окон, классов, поиск драйверов (в т.ч и сиськи),получается что ему не нравится присутствие отладчика на компе а не факт его работы, хотя это тоже он определяет, на данный момент накопал это, если интересно. Падение программы происходит довольно далеко от того места где обнаружен отладик, поэтому тсяжело определить причину.

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

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 16 октября 2010 20:28 · Поправил: SReg
· Личное сообщение · #11

gena-m пишет:
получается что ему не нравится присутствие отладчика на компе а не факт его работы

система абсолютно чистая... и все равно дебугер детектет


UPD:
gena-m пишет:
Абсолютно чистая - это и Олли нет и ее плагинов?

ну я же сказал - абсолютно!



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

Создано: 16 октября 2010 21:15 · Поправил: gena-m
· Личное сообщение · #12

Абсолютно чистая - это и Олли нет и ее плагинов?
У меня например Олли с плагинами и борландовский и VS отладчики стоят, хотя сисера и айса нет (но присутствуют дистрибутивы) и непонятно какой отладчик ему не нравится. Пока что я не расковырял этот прот вдоль и поперек - поэтому сложно сказать почему он ругается, но из за этой мессаги, при неработающих отладчиках, я впринципе и начал его ковырять.

Вообщето топик по работе потоков был открыт, а перерос в обсуждение пепы.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше





Ранг: 529.0 (!), 110thx
Активность: 0.290.04
Статус: Участник
5KRT

Создано: 16 октября 2010 21:59
· Личное сообщение · #13

gena-m
В некоторых потоках есть просто Sleep в несколько секунд. Ни каких странностей в работе потоков не заметил. Ставлю бряки на вторую комманду, на случай, если прот проверяет EP потока на оппкод 0xCC

-----
Research For Food




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

Создано: 16 октября 2010 22:34
· Личное сообщение · #14

У меня получается:
под отладчиком - вначале создается поток по стартовому адресу 29876b20, но не запускается, затем создается поток со стартовым адресом 2989С740 запускается и доходит до Sleep.
без отладчика - создается и запускается поток 29876b20, затем создается и запускается поток 2989e750.
Вот такие "странности" мне не нравятся и я пытаюсь найти причину разного создания и поведения потоков.
Видимо это моя ошибка, что ставил бряки в начало потока, попробую ставить не на начало.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше




Ранг: 20.5 (новичок), 3thx
Активность: 0.010
Статус: Участник

Создано: 16 октября 2010 23:50
· Личное сообщение · #15

gena-m
Попробуй посмотреть в сторону защитных плагинов- у меня кажется когда-то что-то было похожее,помогла то ли замена отладчика на другую версию,то ли замена плагинов,давно это было уже...



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

Создано: 17 октября 2010 00:03
· Личное сообщение · #16

то ли замена отладчика на другую версию,то ли замена плагинов

Да, интересный метод, особенно замена отладчика помогает в выяснении причины.

Спасибо всем, уже кое что накопал.
daFix - отпишусь в личку когда разберусь.

-----
Надежда - есть худшее из зол, ибо она продлевает наши страдания.© Ф. Ницше



 eXeL@B —› Вопросы новичков —› CreateTread
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати