Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Запуск файла из памяти
Посл.ответ Сообщение

Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 августа 2014 10:03 · Поправил: just76
· Личное сообщение · #1

Всем привет!
Изучаю статью "Запуск файла из памяти" с ресурса WASM. Столкнулся с проблемой. не могу понять почему в одном случае файл запускается а в другом нет. Все вроде работатет отлично, но если я в исходник добаляю функцию - "invoke MessageBox, 0, 0, 0 ,0" то файл не запускается.
Прилагаю исходник + файл для заупуска ( MessageBox обычный ) + пример в котором не хочет запускатся файл. Почему так происходит? Помогите пожалуйста разобратся.

c658_09.08.2014_EXELAB.rU.tgz - fasm_run.rar



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 09 августа 2014 11:26 · Поправил: dosprog
· Личное сообщение · #2

Code:
  1.  
  2. MSG.EXE:
  3.  
  4.  .01001000: 6A00           push  0
  5.  .01001002: 6800300001     push  001003000 
  6.  .01001007: 6805300001     push  001003005 
  7.  .0100100C: 6A00           push  0
  8.  .0100100E: E813000000     call  MessageBoxA ;user32.dll
  9.  .01001013: 6A00           push  000
  10.  .01001015: E800000000     call .00100101A 
  11.  .0100101A: FF2500204000   jmp   d,[000402000]  <------------ Что в том DWORD'e ?
  12.  


Всё нормально запускаетс и с- и без MessageBox'а в файле START.ASM.
Завершается в обоих случаях с GP#.
В листинге обозначил ошибку.





Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 августа 2014 12:00
· Личное сообщение · #3

Спасибо! )



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 августа 2014 12:22
· Личное сообщение · #4

переделал пример на masm. прилагаю 2 бинарника, оба запускают файл ( простое окно ) из ресурсов. первый ( good.exe ) работает отлично, ко второму ( notgood.exe ) я добавил функцию MessageBox, и он перестал запускать файл ( простое окно ). в чем дело я понять не могу. не понимаю почему так происходит. кому не лень гляньте в ольке. в чем может быть дело. а то я всю голову сломал.
да, после проецирования файла, в ольке такая картина:

-----------------------------------------------------------------------------------------------
CPU Disasm
Address Hex dump Command Comments
00401000 6A 00 PUSH 0
00401002 E8 95010000 CALL <JMP.&user32.MessageBoxA> ; Jump to KERNEL32.GetModuleHandleA
00401007 A3 18304000 MOV DWORD PTR DS:[403018],EAX
0040100C E8 85010000 CALL <JMP.&kernel32.ExitProcess> ; Jump to KERNELBASE.GetCommandLineA
00401011 A3 1C304000 MOV DWORD PTR DS:[40301C],EAX
00401016 6A 0A PUSH 0A
00401018 FF35 1C304000 PUSH DWORD PTR DS:[40301C]
0040101E 6A 00 PUSH 0
00401020 FF35 18304000 PUSH DWORD PTR DS:[403018]
00401026 E8 06000000 CALL 00401031
0040102B 50 PUSH EAX
0040102C E8 5F010000 CALL <JMP.ExitProcess> ; Jump to KERNEL32.ExitProcess
-----------------------------------------------------------------------------------------------

00401002 E8 95010000 CALL <JMP.&user32.MessageBoxA> ; Jump to KERNEL32.GetModuleHandleA - почему так?
0040100C E8 85010000 CALL <JMP.&kernel32.ExitProcess> ; Jump to KERNELBASE.GetCommandLineA - почему так?

спасибо за внимание, надеюсь на помощь в решении вопроса.

пароль к файлу: 123asd

69c7_11.08.2014_EXELAB.rU.tgz - example.rar




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 11 августа 2014 12:24 · Поправил: ajax
· Личное сообщение · #5

заипали. тем 20 уже с этим вопросом. вир/протмейкеры, идите в ...

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 августа 2014 12:29
· Личное сообщение · #6

я прошу помощи, в решении вопроса. ведь для этого и существует форум. разве я не прав? кому есть что посоветовать или помочь по решению вопроса, выскажите свои мысли пожалуйста. всю голову уже сломал.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 11 августа 2014 13:47 · Поправил: DenCoder
· Личное сообщение · #7

just76 пишет:
Jump to KERNEL32.GetModuleHandleA - почему так?

По воле компилятора, а он исходя из опций так компилит
не понял сразу всей проблемы, что-то с исходником не так...

-----
IZ.RU




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 августа 2014 13:58
· Личное сообщение · #8

да нет. с исходником все нормально. это после проецирования файла и перехода на точку входа, получается такая история. и все падает на функции CreateWindowsEx. понять не могу почему так.




Ранг: 324.3 (мудрец), 222thx
Активность: 0.480.37
Статус: Участник

Создано: 11 августа 2014 14:16
· Личное сообщение · #9

Не знаю, что у Вас, но у меня всё работает.
И, кстати, ничего похожего на листинг 5ю постами выше не нашёл ни в одном из exe, приложенных там же

-----
IZ.RU




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 августа 2014 14:24
· Личное сообщение · #10

хммм... на XP работает, а вот на 7 и 8 почему то нет ( у вас на какой ОС работает? ХП 7 8 ( x86, x64 )?




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 11 августа 2014 14:35
· Личное сообщение · #11

ASLR/релоки. ну, попробуйте погуглить хоть чуть

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 августа 2014 14:42
· Личное сообщение · #12

нет не в релоках дело. собрал с простым окном ( без релоков ) в ресурсах. все равно не хочет работать ((((

Добавлено спустя 1 минуту
именно в 7 8 не хочет (



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 11 августа 2014 17:16 · Поправил: dosprog
· Личное сообщение · #13

Loadlibrary/GetProcAddress нормально работают. Почему не пользуетесь?



Ранг: 3.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 августа 2014 17:35
· Личное сообщение · #14

такая реализация. они там ненужны.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 11 августа 2014 18:32
· Личное сообщение · #15

Значит меняй реализацию, клади файл на диск и запускай по-человечески. Здесь не в почёте вся околовирусная/протекторная тематика. Тем более, что тема избита и изжёвана, и весь вопрос-взять и отладить свой кривокод.


 eXeL@B —› Программирование —› Запуск файла из памяти
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати