Сейчас на форуме: vsv1, _MBK_ (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Какой РЕ редактор может растянуть секцию?
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 18 января 2007 20:12
· Личное сообщение · #1

Нужно слегка увеличить размер секции (кода) в файле (в пределах Virtual-размера). Какая прога это может?



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 20 июля 2007 03:18
· Личное сообщение · #2

Аттач

5e89_19.07.2007_CRACKLAB.rU.tgz - Sheeter.png



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 20 июля 2007 05:16
· Личное сообщение · #3

0xy
У тебя 3-х гиговое узерское АП? Ты писать пытаешься за 0x80000000, хотя олька видит что там. Для какого размера ты пытаешься вызвать VirtualProtect ? Что говорит GetLastError?



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 20 июля 2007 19:10
· Личное сообщение · #4

asd пишет:
Что говорит GetLastError?

57h

Вот код:
004010DC |> \6A 00 PUSH 0 ; /hTemplateFile = NULL
004010DE |. 6A 00 PUSH 0 ; |Attributes = 0
004010E0 |. 6A 03 PUSH 3 ; |Mode = OPEN_EXISTING
004010E2 |. 6A 00 PUSH 0 ; |pSecurity = NULL
004010E4 |. 6A 01 PUSH 1 ; |ShareMode = FILE_SHARE_READ
004010E6 |. 68 00000080 PUSH 80000000 ; |Access = GENERIC_READ
004010EB |. 68 60554000 PUSH SHEETER.00405560 ; |FileName = "c:\temp\rb\zet8-100u.exe.bak"
004010F0 |. FF15 1C404000 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA
004010F6 |. 8BF0 MOV ESI,EAX
004010F8 |. 83FE FF CMP ESI,-1
004010FB |. 75 13 JNZ SHORT SHEETER.00401110
004010FD |. 68 A4504000 PUSH SHEETER.004050A4 ; ASCII "Cannot open file!"
00401102 |. E8 F9FEFFFF CALL SHEETER.00401000
00401107 |. 83C4 04 ADD ESP,4
0040110A |. 5F POP EDI
0040110B |. 5E POP ESI
0040110C |. 5D POP EBP
0040110D |. 5B POP EBX
0040110E |. 59 POP ECX
0040110F |. C3 RET
00401110 |> 6A 00 PUSH 0 ; /MapName = NULL
00401112 |. 6A 00 PUSH 0 ; |MaximumSizeLow = 0
00401114 |. 6A 00 PUSH 0 ; |MaximumSizeHigh = 0
00401116 |. 68 02000001 PUSH 1000002 ; |Protection = PAGE_READONLY|SEC_IMAGE
0040111B |. 6A 00 PUSH 0 ; |pSecurity = NULL
0040111D |. 56 PUSH ESI ; |hFile = 00000048
0040111E |. FF15 18404000 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileMappingA
00401124 |. 8B3D 14404000 MOV EDI,DWORD PTR DS:[<&KERNEL32.CloseHa>
0040112A |. 56 PUSH ESI ; /hObject = 00000048
0040112B |. 8BE8 MOV EBP,EAX ; |
0040112D |. FFD7 CALL EDI ; \CloseHandle
0040112F |. 85ED TEST EBP,EBP
00401131 |. 75 13 JNZ SHORT SHEETER.00401146
00401133 |. 68 8C504000 PUSH SHEETER.0040508C ; ASCII "Cannot create mapping!"
00401138 |. E8 C3FEFFFF CALL SHEETER.00401000
0040113D |. 83C4 04 ADD ESP,4
00401140 |. 5F POP EDI
00401141 |. 5E POP ESI
00401142 |. 5D POP EBP
00401143 |. 5B POP EBX
00401144 |. 59 POP ECX
00401145 |. C3 RET
00401146 |> 6A 00 PUSH 0 ; /MapSize = 0
00401148 |. 6A 00 PUSH 0 ; |OffsetLow = 0
0040114A |. 6A 00 PUSH 0 ; |OffsetHigh = 0
0040114C |. 6A 04 PUSH 4 ; |AccessMode = FILE_MAP_READ
0040114E |. 55 PUSH EBP ; |hMapObject = 00000058
0040114F |. FF15 10404000 CALL DWORD PTR DS:[<&KERNEL32.MapViewOfF>; \MapViewOfFile
00401155 |. 8BF0 MOV ESI,EAX
00401157 |. 85F6 TEST ESI,ESI
00401159 |. 75 16 JNZ SHORT SHEETER.00401171
0040115B |. 68 74504000 PUSH SHEETER.00405074 ; ASCII "Cannot create map view!"
00401160 |. E8 9BFEFFFF CALL SHEETER.00401000
00401165 |. 83C4 04 ADD ESP,4
00401168 |. 55 PUSH EBP
00401169 |. FFD7 CALL EDI
0040116B |. 5F POP EDI
0040116C |. 5E POP ESI
0040116D |. 5D POP EBP
0040116E |. 5B POP EBX
0040116F |. 59 POP ECX
00401170 |. C3 RET
00401171 |> 8B46 3C MOV EAX,DWORD PTR DS:[ESI+3C]
00401174 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00401178 |. 51 PUSH ECX ; /pOldProtect = 0063FAB0
00401179 |. 6A 04 PUSH 4 ; |NewProtect = PAGE_READWRITE
0040117B |. 8B7C30 50 MOV EDI,DWORD PTR DS:[EAX+ESI+50] ; |
0040117F |. 57 PUSH EDI ; |Size = 5A6000 (5922816.)
00401180 |. 56 PUSH ESI ; |Address = 83F00000
00401181 |. FF15 0C404000 CALL DWORD PTR DS:[<&KERNEL32.VirtualPro>; \VirtualProtect

Размер региона также не изменяется:

Memory map, item 292
Address=83F00000
Size=003A0000 (3801088.)
Owner= 83F00000 (itself)
Section=
Type=Priv 00021002
Access=R
Initial access=

Но проблема вызвана не ресайзом, а именно попыткой открыть даступ на запись.

ЗЫ
Всё это под Win 9x, само собой!



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 20 июля 2007 19:17 · Поправил: asd
· Личное сообщение · #5

0xy
в MSDN в пояснении написано
Windows Me/98/95: You cannot use VirtualProtect on any memory region located in the shared virtual address space (from 0x80000000 through 0xBFFFFFFF).

К томуже так
8B7C30 50 MOV EDI,DWORD PTR DS:[EAX+ESI+50] ; |
0040117F |. 57 PUSH EDI ; |Size = 5A6000 (5922816.)
00401180 |. 56 PUSH ESI ; |Address = 83F00000
не получится сделать даже для образа загруженного в нормальное место. На сколько помню SEC_IMAGE ставит атрибуты такие, какие они заданы в заголовках секций. Поэтому нельзя обращаться к этой памяти как к единому региону, что ты и пытаешься сделать.



Ранг: 218.5 (наставник), 2thx
Активность: 0.090
Статус: Участник

Создано: 20 июля 2007 20:34
· Личное сообщение · #6

asd пишет:
На сколько помню SEC_IMAGE ставит атрибуты такие, какие они заданы в заголовках секций.

Чет не похоже: в файле ВСЕ секции Writeable (C0000040), а регион этот получается ReadOnly.
К тому же, под NT вроде всё работает.

PS
А код не мой, а из тулзы HoBleen
И проблема в том, что прога дальше пишит в этот регион. И нужно как-то открыть доступ на запись.
Может, это можно сделать СРАЗУ, подобрав правильные атрибуты CreateFileMappingA/MapViewOfFile?
Хотя ведь и ресайз региона не пройдет...



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 20 июля 2007 21:20 · Поправил: asd
· Личное сообщение · #7

0xy
читай уже мсдн, прежде чем использовать код

SEC_IMAGE Sets the file that is specified to be an executable image file.
Because the mapping information and file protection are taken from the image file, no other attributes are valid with SEC_IMAGE.

Windows Me/98/95: This flag is not supported.

ps Если задача всё таже - растянуть секции, то об этом флаге можешь забыть и под nt. Чтобы править образ надо мапить его обычным образом.




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 21 июля 2007 07:37
· Личное сообщение · #8

0xy
Ээ.. давно писал, исходников не осталось, влом еще раз набивать
Ну ты сам напиши - читаешь всесь файл, разбераешь таблицу секций и по ним проецируй все секции. У тебя должен получиться образ РЕшника в памяти. Потом в таблице секций заменяй raw offset значения значениями virtual offset и сохраняй весь образ. Всё! Ничего сложного. Заодно подучишь формат РЕ

Насчет exception'a - я делал так: проецировал системой, через CreateFileMapping с флагом SEC_IMAGE, изменял атрибуты сеций в таблице секций и сохранял образ. VirtualProtect нужен был для того, чтобы не заморачиваться с пересохранением образа - если его открыть как writeable, то все изменения, естейственно, сохраняться, а мне в оригинальном файле это не нужно. Если эта фича не поддерживается в 9х, то надо делать то же самое вручную.


<< . 1 . 2 .
 eXeL@B —› Вопросы новичков —› Какой РЕ редактор может растянуть секцию?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати