Вопрос по wm_command...

Тема в разделе "WASM.WIN32", создана пользователем jack_theripper, 9 янв 2005.

  1. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Всем привет! У меня keygen сделан на основе одного диалогового окна. Соответственно, идет генерация паролей при нажатии на кнопку и ловления сообщения wm_command с нужным wparam (равным id кнопке). Но вот решил я немного изменить keygen и сделать из него bruteforce. Теперь он у меня перебирает пароли. Все прекрасно. Все бежит и перебирается. Но вот беда. Стоит только нажать на диалоговое окно и все замирает. Я ведь сделал этот перебор в цикле ловления сообщения от кнопки и соответственно у меня никакие сообщения больше не ловятся. Можно ли мне что-то изменить в исходнике, чтобы ловились другие сообщения и можно было допустим остановить процесс генерации или мне надо полностью переписать весь исходник?

    Thx! ;)
     
  2. pas

    pas New Member

    Публикаций:
    0
    Регистрация:
    18 апр 2003
    Сообщения:
    330
    Адрес:
    Russia
    Выполняй перебор паролей в отдельном треде. В отдельном треде проверяй переодически семафор, если на кнопку нажали выставляеш симафор в процедуре диалогового окна и тред перебора паролей завершается, увидев, что семафор выставлен.
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Можно просто завершать thread с расчётами посредством TerminateThread из цикла ловления сообщения от кнопки - тогда семафор не нужен.
     
  4. Artix

    Artix New Member

    Публикаций:
    0
    Регистрация:
    7 янв 2005
    Сообщения:
    9
    сделай в отдельном потоке перебор паролей

    CreateThread помоему апишка называется
     
  5. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Спасибо! Ща полезу Iczelion'а читать... :)
     
  6. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Блин! Проблема! Хелп! Почему если я вызываю из ThreadProc

    invoke MessageBoxA, hwind, addr MBoxTxt, addr MBoxCap, MB_OK

    Линкер меня посылает с сообщением

    errorA2006: undefined symbol: hwind



    Как мне передать новому thread'у указатель на основное окно моего диалога hwind?
     
  7. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Код (Text):
    1.  
    2. HANDLE CreateThread(
    3.  
    4.     LPSECURITY_ATTRIBUTES lpThreadAttributes,   // pointer to thread security attributes  
    5.     DWORD dwStackSize,  // initial thread stack size, in bytes
    6.     LPTHREAD_START_ROUTINE lpStartAddress,  // pointer to thread function
    7.     LPVOID lpParameter, // argument for new thread <- [b]вот здесь[/b]
    8.     DWORD dwCreationFlags,  // creation flags
    9.     LPDWORD lpThreadId  // pointer to returned thread identifier
    10.    );  
    11.  
     
  8. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Ну я так и делал.

    Либо так (передаю hwind):

    1) invoke CreateThread,NULL,NULL,eax,hwind,0,ADDR ThreadID



    2) invoke CreateThread,NULL,NULL,eax,addr hwind,0,ADDR ThreadID



    В обоих случаях выдает:



    error A2133: register value overwritten by INVOKE



    :dntknw:
     
  9. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    invoke MessageBoxA, hwind, addr MBoxTxt, addr MBoxCap, MB_OK

    А так не прокатит?

    invoke MessageBoxA, NULL, addr MBoxTxt, addr MBoxCap, MB_OK



    и вот


    Код (Text):
    1.  
    2. section '.data' data readable writeable
    3. ...
    4.   hwind     dd ?
    5.   ThreadID  dd ?
    6.  
    7. section '.code' code readable executable
    8.  
    9.   start:
    10.         ...
    11.         invoke CreateThread,NULL,NULL,eax,[hwind],0,ThreadID
    12. ...
    13. section '.idata' import data readable writeable
    14.  
    15. library kernel,'KERNEL32.DLL'
    16.   import kernel,\
    17.          CreateThread,'CreateThread',\
    18.          ExitProcess,'ExitProcess'    
    19. ...
    20.  


    примерно так всё работает - мож ты не учел особенности компилера?
     
  10. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Да полный бред! Если я прописываю в .data

    hwind dd ?

    то он мне выдает ошибку Symbol Redefinition на строку инициализации моей главной подпрограммы:

    MainDlgProc proc hwind:lol: WORD, wmsg:lol: WORD, wparam:lol: WORD, lparam:lol: WORD



    А если я убираю эту строчку из .data, то ругается на подпрограмму thread'a, что "Undefined symbol hwind" где я вызываю

    invoke MessageBoxA, hwind, addr MBoxTxt, addr MBoxCap,MB_OK



    или



    invoke SendDlgItemMessage,hwind,WM_FINISH,NULL,NULL



    Мне же надо как-то передать семафор для основного процесса.



    :dntknw:(((((((((((((((
     
  11. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    Что мешает тебе изменить имя переменной?
     
  12. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Так вот в том-то все и дело, что я не пойму, какая это переменная должна быть. Ведь эта hwind - это у меня главный хэндлер главного диалогового окна. Соответственно мне она нужна и для работы в главной процедуре, и для посылки сообщений из моего второго процесса на главную процедуру. Что, где мне изменить? У меня это должна быть одна и та же переменная.
     
  13. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    Под Винду я редко пишу но вроде так - не обращай внимания на лишнии импорты - это я кое что переделывал
     
  14. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
  15. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Yes! Все, я сделал. Не знаю как, но сделал. :)



    Я изменил процедуру вторичного процесса:



    ThreadProc PROC USES ecx hwind:lol: WORD



    у меня было



    ThreadProc PROC USES ecx Param:lol: WORD



    :)



    И плюс вначале программы написал



    CreateThread PROTO :lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD,:lol: WORD



    Одно непонятно. Почему здесь:



    invoke CreateThread,NULL,NULL,eax,[hwind],0,ADDR ThreadID



    [hwind] работает, а addr hwind не работает и компилятор ругается?
     
  16. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    Потому что [hwind] - переменная а addr hwind - получается указатель
     
  17. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    Гыгы вот так у нас все пишут - не знаю как но зделал вроде работает ну и ладно:)
     
  18. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    >Потому что [hwind] - переменная а addr hwind - получается указатель



    Нет, но раньше в DOSе в асме было так:

    hwind -> переменная

    [hwind], offset hwind -> все одно, передавался адрес на hwind
     
  19. jack_theripper

    jack_theripper New Member

    Публикаций:
    0
    Регистрация:
    9 янв 2005
    Сообщения:
    14
    Адрес:
    Russia
    Ураааааааааааа! Заррррработало!!!!!!!!!! Считает, падлюка, серийники! :))))))))))))))))



    Спасибо всем, кто помогал.
     
  20. Same

    Same New Member

    Публикаций:
    0
    Регистрация:
    23 окт 2003
    Сообщения:
    114
    1 dd 01010h

    mov eax,[1] ;eax = 01010h !!!

    mov eax,offset 1 ;eax = OFFSET 1 !!!