Написание программы на основе листинга ida pro

Тема в разделе "WASM.BEGINNERS", создана пользователем end3r, 17 дек 2007.

  1. end3r

    end3r New Member

    Публикаций:
    0
    Регистрация:
    17 дек 2007
    Сообщения:
    1
    я реверсил no-cd лоадер к старенькой игрушке war2bne
    этот генеренный идой код, я только его подредактировал, удалив ненужные куски, ну и поправив начало
    компилируется, но не линкуется

    C:\masm32\bin>build loader
    Microsoft (R) Macro Assembler Version 6.14.8444
    Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

    Assembling: loader.asm
    Microsoft (R) Incremental Linker Version 5.12.8078
    Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

    loader.obj : error LNK2001: unresolved external symbol ___imp_ExitProcess
    loader.obj : error LNK2001: unresolved external symbol ___imp_GetModuleHandleA
    loader.obj : error LNK2001: unresolved external symbol ___imp_VirtualProtectEx
    loader.obj : error LNK2001: unresolved external symbol ___imp_WriteProcessMemory

    loader.obj : error LNK2001: unresolved external symbol ___imp_CreateProcessA
    loader.obj : error LNK2001: unresolved external symbol _CreateProcessA
    loader.obj : error LNK2001: unresolved external symbol _ExitProcess
    loader.obj : error LNK2001: unresolved external symbol _GetModuleHandleA
    loader.obj : error LNK2001: unresolved external symbol _VirtualProtectEx
    loader.obj : error LNK2001: unresolved external symbol _WriteProcessMemory
    loader.exe : fatal error LNK1120: 10 unresolved externals

    Код (Text):
    1. .386
    2. .model flat,stdcall,C
    3. option casemap :none
    4.  
    5.    include \masm32\include\windows.inc
    6.    include \masm32\include\user32.inc
    7.    include \masm32\include\kernel32.inc
    8.  
    9.    includelib \masm32\lib\user32.lib
    10.    includelib \masm32\lib\kernel32.lib
    11.  
    12.     extrn __imp_ExitProcess:dword ; DATA XREF: ExitProcessr
    13. ; HMODULE __stdcall __imp_GetModuleHandleA(LPCSTR lpModuleName)
    14.         extrn __imp_GetModuleHandleA:dword ; DATA XREF: GetModuleHandleAr
    15. ; BOOL __stdcall __imp_VirtualProtectEx(HANDLE hProcess,LPVOID lpAddress,DWORD dwSize,DWORD flNewProtect,PDWORD lpflOldProtect)
    16.         extrn __imp_VirtualProtectEx:dword ; DATA XREF: VirtualProtectExr
    17. ; BOOL __stdcall __imp_WriteProcessMemory(HANDLE hProcess,LPVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD lpNumberOfBytesWritten)
    18.         extrn __imp_WriteProcessMemory:dword ; DATA XREF: WriteProcessMemoryr
    19. ; BOOL __stdcall __imp_CreateProcessA(LPCSTR lpApplicationName,LPSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,
    20. ;BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCSTR lpCurrentDirectory,LPSTARTUPINFOA lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation)
    21.         extrn __imp_CreateProcessA:dword ; DATA XREF: CreateProcessAr
    22.  
    23.  
    24.  
    25. .code
    26. start:
    27.         invoke  GetModuleHandle, NULL
    28.         push    offset hProcess ; lpProcessInformation
    29.         push    offset StartupInfo ; lpStartupInfo
    30.         push    0       ; lpCurrentDirectory
    31.         push    0       ; lpEnvironment
    32.         push    20h     ; dwCreationFlags
    33.         push    0       ; bInheritHandles
    34.         push    0       ; lpThreadAttributes
    35.         push    0       ; lpProcessAttributes
    36.         push    0       ; lpCommandLine
    37.         push    offset aWarcraftIiBne_ ; lpApplicationName
    38.         call    CreateProcessA
    39.         cmp eax, 0
    40.         jnz short loc_401035
    41.         jmp short loc_40104A
    42.  
    43. loc_401035:             ; CODE XREF: start+31j
    44.         push    1       ; nSize
    45.         push    offset Buffer   ; lpBuffer
    46.         push    428E17h     ; lpBaseAddress
    47.         push    0       ; int
    48.         push    0       ; int
    49.         call    sub_401051
    50.  
    51. loc_40104A:             ; CODE XREF: start+33j
    52.         push    0       ; uExitCode
    53.         call    ExitProcess
    54.  
    55. sub_401051  proc near       ; CODE XREF: start+45p
    56.  
    57. lpBaseAddress   = dword ptr  10h
    58. lpBuffer    = dword ptr  14h
    59. nSize       = dword ptr  18h
    60.  
    61.         push    ebp
    62.         mov ebp, esp
    63.         push    offset flOldProtect ; lpflOldProtect
    64.         push    40h     ; flNewProtect
    65.         push    [ebp+nSize] ; dwSize
    66.         push    [ebp+lpBaseAddress] ; lpAddress
    67.         push    hProcess ; hProcess
    68.         call    VirtualProtectEx
    69.         push    0       ; lpNumberOfBytesWritten
    70.         push    [ebp+nSize] ; nSize
    71.         push    [ebp+lpBuffer]  ; lpBuffer
    72.         push    [ebp+lpBaseAddress] ; lpBaseAddress
    73.         push    hProcess ; hProcess
    74.         call    WriteProcessMemory
    75.         leave
    76.         retn    14h
    77. sub_401051  endp
    78.  
    79. end start
    что нужно сделать, чтобы слинковалось?
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    советую ознакомится
    http://www.wasm.ru/article.php?article=coderip01

    также если подключаются стандартные инкулуды то вот это
    Код (Text):
    1. extrn __imp_ExitProcess:dword ;DATA XREF: ExitProcessr
    2. ; HMODULE __stdcall __imp_GetModuleHandleA(LPCSTR lpModuleName)
    3. extrn __imp_GetModuleHandleA:dword ; DATA XREF:GetModuleHandleAr
    надо убрать, и имена в листинге поправить, убрав A в конце функций
     
  3. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ТС советую ознакомиться с понятием манглинга имен