eXeL@B —› Программирование —› Как запустить packer |
Посл.ответ | Сообщение |
|
Создано: 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 приведен код софта ( |
|
Создано: 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 на нужный объект. И ещё. Проверь валидность параметров у файла испытуемого. |
|
Создано: 23 апреля 2012 09:56 · Личное сообщение · #3 Во-первых, при выделении блока можно сразу указать COMMIT, если адрес нулевой, и память сразу будет выделена. Во-вторых, после удачного резерва блока памяти коммит можно делать на любые страницы из этого блока и с любого места, в том числе и несколько раз. Так что проверяй свой код, а именно адреса коммита, если это не работает. В-третьих, если файл загружен не по базе, релоки надо применять, иначе он вряд ли будет работать. |
|
Создано: 23 апреля 2012 13:42 · Личное сообщение · #4 |
|
Создано: 24 апреля 2012 08:39 · Личное сообщение · #5 |
|
Создано: 24 апреля 2012 10:04 · Личное сообщение · #6 |
eXeL@B —› Программирование —› Как запустить packer |
Эта тема закрыта. Ответы больше не принимаются. |