[ Assembler ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by !_filin_!, 25 May 2007.

  1. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    есть код -
    invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,2424
    invoke CreateRemoteThread,eax,0,0,mes,0,0

    proc mes
    invoke MessageBoxA,0,'','',0
    leave
    retn
    endp

    по идее должен создавать удаленный поток с процессом у которого pid=2424, и выводить месагебокс. но вместо этого фаталэррор. В чем проблема может быть?
     
  2. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    PID (Process Identifier) - после каждого запуска менятся.

    По этому вот здесь PID!=2424
    Code:
    invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,2424
    
    Можешь привести полный код или программку.
     
  3. 12l

    12l New Member

    Joined:
    2 Jul 2008
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Можете дать исходник антивируса на delphi 7 ( жилатильно с каминтариями )
     
  4. GALIAFF

    GALIAFF Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    45
    Likes Received:
    28
    Reputations:
    5
    а VirtualAlloc/WriteProcessMemory забыл?
     
  5. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    скорее не забыл а не знал

    Вот полный код. чисто тестовая прога
    PHP:
    format PE GUI 4.0
    entry start

    include 'INCLUDE/win32ax.inc'


    section '.code' code readable executable
    start
    :
    invoke    OpenProcess,PROCESS_ALL_ACCESS or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD or PROCESS_CREATE_PROCESS,FALSE,1908 ;1908 тут пид любого процессакогда я тестил у оперы был такой пид
    invoke    CreateRemoteThread
    ,eax,0,0,mes,0,0

    invoke    ExitProcess
    ,0

    proc    mes
    invoke    MessageBoxA
    ,0,'','',0
    leave
    retn
    endp

    section 
    '.idata' import data readable writable

    library kernel32
    ,'KERNEL32.DLL',user32,'USER32.DLL'

    import    user32,MessageBoxA,'MessageBoxA'

    import    kernel32,CreateRemoteThread,'CreateRemoteThread',OpenProcess,'OpenProcess',ExitProcess,'ExitProcess'
     
    #345 ntldr, 3 Jul 2008
    Last edited: 3 Jul 2008
  6. none222

    none222 Guest

    Reputations:
    0
    Помогите найти ДОКИ, чтобы подробно понять архитектуру процессора. Начинаю изучать асм - пока тяжело даётся. Ещё было бы неплохо, если бы статей подкинули интересных.
    всё кто откликнется - огромное спасибо!
     
  7. 0x0c0de

    0x0c0de Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    441
    Likes Received:
    396
    Reputations:
    297
    >>Помогите найти ДОКИ, чтобы подробно понять архитектуру процессора. Начинаю изучать асм - пока тяжело даётся. Ещё было бы неплохо, если бы статей подкинули интересных.
    всё кто откликнется - огромное спасибо!


    http://wasm.ru/publist.php?list=11

    И вообще весь васм)
     
    1 person likes this.
  8. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    1) Открываем процесс
    Code:
    invoke OpenProcess,PROCESS_ALL_ACCESS or PROCESS_VM_WRITE or PROCESS_CREATE_THREAD or PROCESS_CREATE_PROCESS,FALSE,PID
    
    2) Выделяем память в чужом процессе

    Code:
    invoke VirtualAllocEx, Process, NULL, size, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE
    mov zzz, eax
    
    3) Копируем память в процесс
    Code:
    invoke  WriteProcessMemory, Process, zzz, Memory, size, BytesWritten
    
    4) Создаем удаленный поток

    Code:
    invoke CreateRemoteThread, hProc, NULL , 0 , pfnStatAddr, szPathtoDLL, 0, NULL
    
    Внедряем библу DLL, в которой и находится твой
    внедряемый код

    Code:
    proc    mes 
    invoke    MessageBoxA,0,'','',0 
    leave 
    retn 
    endp
    
     
    #348 0verbreaK, 3 Jul 2008
    Last edited: 3 Jul 2008
  9. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    спасибо, а без dll нельзя так?
     
  10. 0verbreaK

    0verbreaK Elder - Старейшина

    Joined:
    30 Apr 2008
    Messages:
    318
    Likes Received:
    42
    Reputations:
    -3
    // Ошибся здесь
    Code:
    ; -=-=-=-=-=-=-=-=-=-=-=-=-=-
    ;   Code injection in FASM
    ;      Created by Ct757
    ; -=-=-=-=-=-=-=-=-=-=-=-=-=-
    ;
    ; Use FASM to compile this shit
    
    
    format PE GUI 4.0
    entry start
    
      include '%fasminc%\win32a.inc'
    
    
    section '.code' code readable writeable executable
    
    
        target_name     db 'explorer.exe',0
    
    
    ;...............[INJECT CODE]..................;
    
    remote_thread:
    
        call    .delta
      .delta:
        pop     ebp
        sub     ebp,.delta
    
        xor     esi,esi
    
        lea     eax,[ebp+_user32]
        push    eax
        call    [ebp+pLoadLibrary]
    
        push    esi
        lea     eax,[ebp+_title]
        push    eax
        lea     eax,[ebp+_message]
        push    eax
        push    esi
        call    [ebp+pMessageBox]
    
        ret
    
      .data:
    
        pMessageBox     dd 0
        pLoadLibrary    dd 0
    
        _user32	    db 'USER32.DLL',0
        _message	    db 'Hello world!',0
        _title	    db 'Injected',0
    
    thread_end:
    
    ;...............[END INJECT CODE]..............;
    
        p_ent	    PROCESSENTRY32
    
    find_target:
        xor     esi,esi
    
     .shot:
        mov     [p_ent.dwSize],sizeof.PROCESSENTRY32
        invoke  CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,esi
        inc     eax
        je	    .not_found
        dec     eax
        xchg    eax,edi
    
        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,[MessageBox]
        mov     [pMessageBox],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'
    
      include '%fasminc%\APIA\kernel32.inc'
      include '%fasminc%\APIA\user32.inc'
    
    
     
    #350 0verbreaK, 3 Jul 2008
    Last edited: 5 Jul 2008
  11. *CHEL*

    *CHEL* New Member

    Joined:
    3 Jul 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    wsprintf сишная функция и ответственность за выравнивание стека не несёт.
    Вызывающая программа сама должна его выравнивать (add esp,PushedSize где PushedSize колво байт, переданных через стек проге).

    В FASM'e для вызова сишных функций существует макрос cinvoke
     
  12. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    и снова я с косяками:

    хочу вывести exe имя процесса(любого) в консоль

    process32First и Next
    в упор не заполняет структуру
    возвращяет что записал,а в odbg видит- пусто :(

    fasm
    Code:
     push 0
     push 0x00000002
    call dword [CreateToolhelp32Snapshot]
    mov [SnapHandle],Eax
    
    mov [ProcBuffer.size],4*9+255
    
    push ProcBuffer
    push [SnapHandle]
    call dword [Process32First]
    
    
    push ProcBuffer
    push [SnapHandle]
    call dword [Process32Next]
    
    
    push 0
    push 0
    push 255
    push ProcBuffer.exeFile
    push [StdOutputHandle]
    call dword [WriteConsoleA] 
    Code:
    section '.data' data readable writeable
    
    struc PROCESSENTRY32
    {
        .size            dd 4*9+255   
        .usage           dd ?   
        .processID       dd ?   
        .defaultHeapID   dd ?    
        .moduleID        dd ?  
        .threads         dd ?   
        .parentProcessID dd ?    
        .priClassBase    dd ?   
        .flags           dd ?  
        .exeFile db 255 dup(?)  
    }
    ProcBuffer PROCESSENTRY32 
    полный исходник пример
     
    1 person likes this.
  13. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Jes, что-то у тебя какое-то извращение идёт...
    воТ код на cpp, переделать его в асм нетрудно:
    Code:
    TCHAR Name[MAX_PATH];
    int pid = 4;//pid Процесса
    HANDLE p = OpenProcess(PROCESS_QUERY_INFORMATION, false, pid);
    GetModuleFileNameExW(p, 0, Name, MAX_PATH);
    CloseHandle(p);
    _putts(Name); //единственная не-апишка на выводе.
    
    Чистый апи, так что разберёшься ;)

    Add: Ай, забыл закрытия дескриптора.. не бейте меня! :rolleyes:
     
    #353 desTiny, 8 Jul 2008
    Last edited: 8 Jul 2008
    1 person likes this.
  14. Jes

    Jes Elder - Старейшина

    Joined:
    16 Apr 2007
    Messages:
    370
    Likes Received:
    391
    Reputations:
    34
    не , мне как раз все процессы нада просмотреть (скорее всего поочередно) , хотябы через тулхэлп ...
    , а хотя , во ,лучше через NtQuerySystemInformation попробую , а затем exe по pid'у как в примере...
    ps: anyway , thanks
     
    #354 Jes, 8 Jul 2008
    Last edited: 8 Jul 2008
    1 person likes this.
  15. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    хошь на cpp дам исходник по проверке всех процессов и определению заметных через NtQuerySystemInformation?

    вот: http://webfile.ru/2075644
    пасс: Jes
     
    #355 desTiny, 8 Jul 2008
    Last edited: 8 Jul 2008
    1 person likes this.
  16. xGOR

    xGOR Elder - Старейшина

    Joined:
    25 Nov 2007
    Messages:
    83
    Likes Received:
    38
    Reputations:
    -5
    Всем привет.

    Я тут немного асм начал... ну понимаете. Ошибка какаето вылезла. Немогу скомпилить. Скачал масм. версия: "Macro Assembler Version 6.14.8444 & Incremental Linker Version 5.12.8078".


    [​IMG]
     
  17. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    дай исходник асм файла
     
    3 people like this.
  18. xGOR

    xGOR Elder - Старейшина

    Joined:
    25 Nov 2007
    Messages:
    83
    Likes Received:
    38
    Reputations:
    -5
    Да здесь типа программа "Хелло ворд".

    Code:
    CSEG segment
    org 100h
    
    Begin:
    
    	mov ah,9
    	mov dx,offset Message
    	int 21h
    
    	int 20h
    
    Message db 'Hello, world!$'
    
    CSEG ends
    end Begin
    
     
    1 person likes this.
  19. izlesa

    izlesa Elder - Старейшина

    Joined:
    3 Jan 2008
    Messages:
    112
    Likes Received:
    32
    Reputations:
    5
    линкуй линкером который в папке binr (при установке необходимо указать что нужно ставить и winNT и win9x версии) находится. Мне это помогло.
    У мну трансляторолинкер ml.exe сразу после переноса линкера из binr подхватил его самостоятельно.
    Если не подхватит транслируй с опцией /c
    и линкуй руками, чтобы получить .com, линкуй с опцией /t

    btw, имхо под рассылку Калашникова лучше использовать TASM - проблем меньше будет ^____^
     
  20. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    ml.exe hello.asm /AT - по идее должен работать
    ЗЫ Конпелятор должен быть 6.11-6.13, т.к. компоновщик должен быть 16-битным
     
    1 person likes this.