Асм, не пойму где ошибка

Тема в разделе "WASM.BEGINNERS", создана пользователем verdizela, 22 май 2010.

  1. verdizela

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    Доброго времени суток всем!
    Подскажите, где ошибка в коде, а именно вопрос состоит в том, что решил написать Key finder для конкретной проги, в которой знаю адрес в памяти, где хранится правильный серийный номер. Проблема в том, что после прохождения ReadProcessMemory в буфер попадает только первый символ правильного серийника, ну и соответственно после SetDlgItemText на экран выводится только один символ. Хотя в отладчике при пошаговом выполнении я вижу этот сериал. Подскажите пожалуйста, в чем ошибка?
    Ниже выложен листинг *.asm * и .inc Пишу на RadAsm
    Код (Text):
    1. .386
    2. .model flat, stdcall  ;32 bit memory model
    3. option casemap :none  ;case sensitive
    4.  
    5. include Key Finder.inc
    6.  
    7. .code
    8.  
    9. start:
    10.  
    11.     invoke GetModuleHandle,NULL
    12.     mov     hInstance,eax
    13.  
    14.     invoke InitCommonControls
    15.     invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
    16.     invoke ExitProcess,0
    17.  
    18. ;########################################################################
    19.  
    20. DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
    21.  
    22.  
    23.     mov     eax,uMsg
    24.     .if eax==WM_INITDIALOG
    25.  
    26.     .elseif eax==WM_COMMAND
    27.       mov eax,wParam
    28.      
    29.       .if eax==1003 ;button Open
    30.       mov ofn.lStructSize,SIZEOF ofn
    31.       mov ofn.lpstrFilter,offset strFilter
    32.       mov ofn.lpstrFile, offset ApplicationName
    33.       mov ofn.nMaxFile, 512
    34.       mov ofn.Flags,OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST+\
    35.                     OFN_LONGNAMES+OFN_EXPLORER+OFN_HIDEREADONLY                  
    36.       invoke GetOpenFileName,addr ofn  
    37.       cmp eax,1
    38.       jnz ExitProcess
    39.  
    40.       invoke GetStartupInfo,ADDR startInfo
    41.      
    42.       invoke CreateProcess,ADDR ApplicationName,NULL,NULL,NULL,FALSE,\
    43.               CREATE_SUSPENDED+NORMAL_PRIORITY_CLASS,\
    44.                        NULL,NULL,ADDR startInfo,ADDR pInfo
    45.        
    46.         invoke WriteProcessMemory,pInfo.hProcess,offset 05C87E6h,\
    47.               addr bytewrite,2,NULL    
    48.        
    49.         invoke ResumeThread,pInfo.hThread
    50.            
    51.         call kont
    52.         invoke SuspendThread,pInfo.hThread
    53.        
    54.         invoke ReadProcessMemory,pInfo.hProcess,context.regEdx,\
    55.                  addr buffr,99,NULL
    56.        
    57.         invoke TerminateProcess,pInfo.hProcess,NULL
    58.        
    59.         invoke SetDlgItemText,hWin,1002,addr buffr
    60.        
    61.  
    62.  
    63.       .elseif eax==1005 ;button About
    64.         invoke MessageBox,hWin,addr TEXT,addr TITULO,MB_ICONINFORMATION
    65.        
    66.       .elseif eax==1004 ;button Exit
    67.         invoke EndDialog,hWin,0
    68.       .endif
    69.     .elseif eax==WM_CLOSE  
    70.         invoke EndDialog,hWin,0
    71.     .else
    72.         mov     eax,FALSE
    73.         ret
    74.     .endif
    75.     mov     eax,TRUE
    76.     ret
    77.  
    78. DlgProc endp
    79. kont:
    80. L000:
    81.       mov  context.ContextFlags, CONTEXT_FULL
    82.       invoke GetThreadContext,pInfo.hThread,offset context
    83.       mov  eax, 05C87E6h
    84.       cmp context.regEip,eax
    85.       jnz  L000
    86.       ret
    87.      
    88. ret      
    89. end start
    Код (Text):
    1. include windows.inc
    2. include kernel32.inc
    3. include user32.inc
    4. include Comctl32.inc
    5. include shell32.inc
    6. include comdlg32.inc
    7.  
    8. includelib kernel32.lib
    9. includelib user32.lib
    10. includelib Comctl32.lib
    11. includelib shell32.lib
    12. includelib comdlg32.lib
    13.  
    14. DlgProc         PROTO   :HWND,:UINT,:WPARAM,:LPARAM
    15.  
    16. .const
    17.  
    18. IDD_DIALOG1         equ 101
    19.  
    20.  
    21. ;#########################################################################
    22. .data
    23. TITULO      db "About Key Finder",0
    24. TEXT        db "...",0
    25.  
    26. strFilter   db "Executable Files (*.exe)",0
    27. ApplicationName db ".exe",0
    28.  
    29. adres       dd ?
    30. adres1      dd 05C87E6h
    31. buffr       dd 16 dup(0)
    32. bytewrite   dw  0FEEBh
    33.  
    34. .data?
    35.  
    36. hInstance     dd ?
    37. ofn    OPENFILENAME <>
    38. startInfo STARTUPINFO <>
    39. pInfo PROCESS_INFORMATION <>
    40. CommandLine LPSTR ?
    41.  
    42. align dword
    43. context CONTEXT <>
    44.  
    45. ;#########################################################################
    А также добавлю скрин с отладчика, чтобы было более понятно, в чем проблема.
    [​IMG]
     
  2. verdizela

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    Сорри, не правильно оформил ссылку на скрин отадчика.
    Вот прямая ссылка
    http://rghost.ru/1680737/image.png
     
  3. kweed

    kweed New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    81
    мб WideCharToMultiByte() поможет.. просто я заметил что там UNICODE на скрине...
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Все просто, строка с серийником в Unicode, т.е. в формате '1', 0, '4', 0, '9', 0, 'С', 0 и т.д., а вы работаете с ней как с ANSI строкой, типа '149c'.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    SetDlgItemTextW выведет правильный серийник.
     
  6. verdizela

    verdizela New Member

    Публикаций:
    0
    Регистрация:
    21 янв 2009
    Сообщения:
    9
    kweed, KeSqueer
    Большое спасибо Вам за подсказки, действительно WideCharToMultiByte - это то, что нужно.
    Теперь все получилось!!!