Доброго времени суток всем! Подскажите, где ошибка в коде, а именно вопрос состоит в том, что решил написать Key finder для конкретной проги, в которой знаю адрес в памяти, где хранится правильный серийный номер. Проблема в том, что после прохождения ReadProcessMemory в буфер попадает только первый символ правильного серийника, ну и соответственно после SetDlgItemText на экран выводится только один символ. Хотя в отладчике при пошаговом выполнении я вижу этот сериал. Подскажите пожалуйста, в чем ошибка? Ниже выложен листинг *.asm * и .inc Пишу на RadAsm Код (Text): .386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive include Key Finder.inc .code start: invoke GetModuleHandle,NULL mov hInstance,eax invoke InitCommonControls invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL invoke ExitProcess,0 ;######################################################################## DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax,uMsg .if eax==WM_INITDIALOG .elseif eax==WM_COMMAND mov eax,wParam .if eax==1003 ;button Open mov ofn.lStructSize,SIZEOF ofn mov ofn.lpstrFilter,offset strFilter mov ofn.lpstrFile, offset ApplicationName mov ofn.nMaxFile, 512 mov ofn.Flags,OFN_FILEMUSTEXIST+OFN_PATHMUSTEXIST+\ OFN_LONGNAMES+OFN_EXPLORER+OFN_HIDEREADONLY invoke GetOpenFileName,addr ofn cmp eax,1 jnz ExitProcess invoke GetStartupInfo,ADDR startInfo invoke CreateProcess,ADDR ApplicationName,NULL,NULL,NULL,FALSE,\ CREATE_SUSPENDED+NORMAL_PRIORITY_CLASS,\ NULL,NULL,ADDR startInfo,ADDR pInfo invoke WriteProcessMemory,pInfo.hProcess,offset 05C87E6h,\ addr bytewrite,2,NULL invoke ResumeThread,pInfo.hThread call kont invoke SuspendThread,pInfo.hThread invoke ReadProcessMemory,pInfo.hProcess,context.regEdx,\ addr buffr,99,NULL invoke TerminateProcess,pInfo.hProcess,NULL invoke SetDlgItemText,hWin,1002,addr buffr .elseif eax==1005 ;button About invoke MessageBox,hWin,addr TEXT,addr TITULO,MB_ICONINFORMATION .elseif eax==1004 ;button Exit invoke EndDialog,hWin,0 .endif .elseif eax==WM_CLOSE invoke EndDialog,hWin,0 .else mov eax,FALSE ret .endif mov eax,TRUE ret DlgProc endp kont: L000: mov context.ContextFlags, CONTEXT_FULL invoke GetThreadContext,pInfo.hThread,offset context mov eax, 05C87E6h cmp context.regEip,eax jnz L000 ret ret end start Код (Text): include windows.inc include kernel32.inc include user32.inc include Comctl32.inc include shell32.inc include comdlg32.inc includelib kernel32.lib includelib user32.lib includelib Comctl32.lib includelib shell32.lib includelib comdlg32.lib DlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM .const IDD_DIALOG1 equ 101 ;######################################################################### .data TITULO db "About Key Finder",0 TEXT db "...",0 strFilter db "Executable Files (*.exe)",0 ApplicationName db ".exe",0 adres dd ? adres1 dd 05C87E6h buffr dd 16 dup(0) bytewrite dw 0FEEBh .data? hInstance dd ? ofn OPENFILENAME <> startInfo STARTUPINFO <> pInfo PROCESS_INFORMATION <> CommandLine LPSTR ? align dword context CONTEXT <> ;######################################################################### А также добавлю скрин с отладчика, чтобы было более понятно, в чем проблема.
Сорри, не правильно оформил ссылку на скрин отадчика. Вот прямая ссылка http://rghost.ru/1680737/image.png
Все просто, строка с серийником в Unicode, т.е. в формате '1', 0, '4', 0, '9', 0, 'С', 0 и т.д., а вы работаете с ней как с ANSI строкой, типа '149c'.
kweed, KeSqueer Большое спасибо Вам за подсказки, действительно WideCharToMultiByte - это то, что нужно. Теперь все получилось!!!