Сейчас на форуме: ManHunter, rmn, _MBK_, tyns777, UniSoft (+10 невидимых)

 eXeL@B —› Программирование —› Как запустить packer
Посл.ответ Сообщение

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

Создано: 23 апреля 2012 05:43
· Личное сообщение · #1

Всем привет , в обшем , решился написать пакер .exe , на одном из форyмов откoпал иcxодник самого простого пакера ,
слегка подправил его , в результате он вроде запустился , правдa всего один раз . Начал разбираться что да как , и понел что иногда
при попытки выделеня виртуалиной памяти , данный процесс не исполняется.

Тогда решил установить вместо базового адреса(ImageBase) ,распакованного exe(в процессе резервации памяти "Error 1"), Значение "NULL",
дал таким образом чтобы операционная система сама выбрала место под резерв . В результате при второй попытки виделить память
(установив атрибут "MEM_COMMIT" в фунцтсии VirtualAlloc) опеать же не всегда протцэс исполнялся верно . Но если даже и исполнялся то в процессе выделения памяти под
каждую секцию , процесс виделения прерывался на сегменте ".data" .

В итоге я пришол к выводу что стоит при процесе базогого виделеня памяти "Error 1" , начальный адрес установить тот который
был выдан в итоге резервации(в коде указано :VirtualAlloc(Mapping,...) ) . После этого , все необходимые операции для загрузки PE- faila
увенчались успехом , кроме операции по запуску этого файла .

Грубо говоря , софт просто выбивает , такое ощущение что он не находит точку входа(AddressOfEntryPoint) распакованного exe ,
хотя таковой указан как полагается.


Мой вопрос таков : - В чем же я ошибся ???

P.S. TYT приведен код софта (VIEW ) , а также полный source download .




Ранг: 105.6 (ветеран), 36thx
Активность: 0.10
Статус: Участник

Создано: 23 апреля 2012 08:03
· Личное сообщение · #2

Если код ошибки вызывает VirtualAlloc(хотя наверно там с параметрами напутал), то если пишешь на с++ можешь использовать new char[poh->SizeOfImage] для первого а для второго сам сообразишь.
(после использования памяти, её надо будет удалить с помощью оператора delete.
Если чистый С.
http://en.cppreference.com/w/cpp/memory/c/calloc
malloc(1,poh->SizeOfImage)
потом free на нужный объект.
И ещё. Проверь валидность параметров у файла испытуемого.




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

Создано: 23 апреля 2012 09:56
· Личное сообщение · #3

Во-первых, при выделении блока можно сразу указать COMMIT, если адрес нулевой, и память сразу будет выделена.
Во-вторых, после удачного резерва блока памяти коммит можно делать на любые страницы из этого блока и с любого места, в том числе и несколько раз. Так что проверяй свой код, а именно адреса коммита, если это не работает.
В-третьих, если файл загружен не по базе, релоки надо применять, иначе он вряд ли будет работать.



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

Создано: 23 апреля 2012 13:42
· Личное сообщение · #4

ок , понятно , спасибо за помощь .



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

Создано: 24 апреля 2012 08:39
· Личное сообщение · #5

проблема решена , вся загвоздка била в базових поправках .




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

Создано: 24 апреля 2012 10:04
· Личное сообщение · #6

Раз решена, закрою тогда топик.


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