вызов Api при помощи asm

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ShkiperLol, 2 Jan 2011.

  1. ShkiperLol

    ShkiperLol Banned

    Joined:
    17 Apr 2010
    Messages:
    182
    Likes Received:
    1
    Reputations:
    0
    Подкинте пожалуйста оп код,который по image base
    адресу библиотеки даст адрес определенной Api функции.Или поделитесь ссылочкой на ресурс где такой код есть.
    Помогите плиз,давно интересует эта тема.
    Вот например мне нужно внедрить в сторонние ехе такой код:

    push 400
    push 200
    call Kernel32.Beep

    Я ведь немогу в ехе записать этот код:
    Code:
    call Kernel32.Beep
    его нужно записать так:
    Code:
    call rva адрес функции
    
    Как мне узнать RVA функции?
    Нужно к базовому адресу по которому спроецирована dll добавить VA интересующей меня функции,и так я получу RVA?

    Данная инфа меня интересует только в целях самообразования.
     
  2. slesh

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

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    kernel32 - это системная либа которая грузится всегда по одному и томуже адерсу в пределах всех процессов в конкретной винде.
    По этому делай всё проще. В проге которая внедряет этот код, получи адрес нужной функции, а затем его юзай там где надо. И будет пахать отлично (проверено от win 2k до win7)/ И можешь заюзать абсолютный переход а не относительный.
    И тогда в твоем случае будет так:
    push 400
    push 200
    mov eax, адерс_Kernel32_Beep
    call eax
     
  3. yuran666666

    yuran666666 Member

    Joined:
    18 Jan 2009
    Messages:
    84
    Likes Received:
    19
    Reputations:
    11
    самый простой способ - на стеке находясь в EP будет лежать адрес функи из кернел32, то есть адрес внутри нужной длл у тебя уже есть, ищешь базу кернел32, делаешь адрес кратным 10000h в сторону убывания адресов и далее начинаешь отнимать также по 10000h, ища спроецированную в виртуальную память сигнатуру пе-файла, то есть MZ - таким образом находишь базу кернел32, далее разбираешь пе-заголовок ища адрес таблицы экспорта функций, далее разбираешь саму таблицу экспорта ища нужную тебе функцию по имени, ну или адрес функции GetProcAddress, для этого нужно конечно же немного почитать по структуре пе-файла, расписывать здесь это не имеет смысла ибо уже триста раз описано в пятистах мануалах:)
    например недурственно описано тут:
    http://wasm.ru/series.php?sid=14
    или вообщем куча матчасти по теме тут:
    http://wasm.ru/publist.php?list=6