Сейчас на форуме: asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Подскажите по теории распака.
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 24 апреля 2012 01:50 · Поправил: Kuzya69
· Личное сообщение · #1

Проблема в следующем.
Нашел ОЕП, сдампил, вроде разобрался с ресурсами (был один инвалидный адрес, оказался ExitProcess), но не запускается.
Нашел первый "косяк"
Внутри распака и оригинала есть такое.
Code:
  1. 00455EBF     Call 003864C6

В оригинале, соответственно эта пп-мма выполняется.
А в распаке этой секции просто нет, вот и вылетает при запуске.
Как мне поступить? Вернее как-бы Вы поступили?



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

Создано: 24 апреля 2012 02:05 · Поправил: tihiy_grom
· Личное сообщение · #2

Так как адрес $003864C6 меньше чем стандартная ImageBase у модуля ($00400000), то обычно пакеры выделяют этот участок памяти через VirtualAlloc.
Поэтому можно сначала посмотреть размер этого региона памяти, добавить секцию такого же размера к экзешнику, дождаться пока пакер соберётся выделить память, и после VirtualAlloc подменить получившийся адрес на адрес этой нашей новой секции.

Как-то так. Не мешало бы уточнить что за пакер, ну и саму программу выложить. А то гадать можно долго.

| Сообщение посчитали полезным: Kuzya69

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 24 апреля 2012 02:47
· Личное сообщение · #3

http://zalil.ru/33126971
Пакер PCGuard наверно 5-ой версии.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

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

Code:
  1. PUSH 0DE
  2. CALL 00E264C6

Это крипта PCGuard'а. Расшифровывает код идущий после этого вызова и выполняет его:
Code:
  1. 00455EC4    E8 8F8A0000     CALL VCM.0045E958
  2. 00455EC9    BE C4CB8800     MOV ESI,VCM.0088CBC4
  3. 00455ECE    56              PUSH ESI
  4. 00455ECF    E8 7A890000     CALL VCM.0045E84E
  5. 00455ED4    56              PUSH ESI
  6. 00455ED5    E8 14880000     CALL VCM.0045E6EE
  7. 00455EDA    8378 14 6A      CMP DWORD PTR DS:[EAX+14],6A
  8. 00455EDE    59              POP ECX
  9. 00455EDF    59              POP ECX
  10. 00455EE0    7D 07           JGE SHORT VCM.00455EE9
  11. 00455EE2    C605 ADCC8800 0>MOV BYTE PTR DS:[88CCAD],1
  12. 00455EE9    68 70144900     PUSH VCM.00491470
  13. 00455EEE    68 547D4900     PUSH VCM.00497D54                        ; ASCII "VAGCOM.CFG"
  14. 00455EF3    881D ACCC8800   MOV BYTE PTR DS:[88CCAC],BL
  15. 00455EF9    891D A4CC8800   MOV DWORD PTR DS:[88CCA4],EBX
  16. 00455EFF    891D D8CB8800   MOV DWORD PTR DS:[88CBD8],EBX
  17. 00455F05    E8 77710000     CALL VCM.0045D081
  18. 00455F0A    8BF0            MOV ESI,EAX
  19. 00455F0C    59              POP ECX
  20. 00455F0D    3BF3            CMP ESI,EBX
  21. 00455F0F    59              POP ECX
  22. 00455F10    74 2D           JE SHORT VCM.00455F3F
  23. 00455F12    8D85 ECFEFFFF   LEA EAX,DWORD PTR SS:[EBP-114]
  24. 00455F18    50              PUSH EAX
  25. 00455F19    56              PUSH ESI
  26. 00455F1A    E8 CD2AFCFF     CALL VCM.004189EC
  27. 00455F1F    59              POP ECX
  28. 00455F20    83F8 FF         CMP EAX,-1
  29. 00455F23    59              POP ECX
  30. 00455F24    74 10           JE SHORT VCM.00455F36
  31. 00455F26    8D85 ECFEFFFF   LEA EAX,DWORD PTR SS:[EBP-114]
  32. 00455F2C    8BCF            MOV ECX,EDI
  33. 00455F2E    50              PUSH EAX
  34. 00455F2F    E8 D8000000     CALL VCM.0045600C
  35. 00455F34  ^ EB DC           JMP SHORT VCM.00455F12
  36. 00455F36    56              PUSH ESI
  37. 00455F37    E8 506F0000     CALL VCM.0045CE8C
  38. 00455F3C    59              POP ECX
  39. 00455F3D    EB 0D           JMP SHORT VCM.00455F4C
  40. 00455F3F    891D 60374A00   MOV DWORD PTR DS:[4A3760],EBX
  41. 00455F45    C605 A0CC8800 0>MOV BYTE PTR DS:[88CCA0],1
  42. 00455F4C    381D 68AB8800   CMP BYTE PTR DS:[88AB68],BL
  43. 00455F52    68 00008000     PUSH VCM.00800000
  44. 00455F57    BE D0E0E000     MOV ESI,0E0E0D0
  45. 00455F5C    74 05           JE SHORT VCM.00455F63
  46. 00455F5E    BE FFFFFF00     MOV ESI,0FFFFFF
  47. 00455F63    56              PUSH ESI
  48. 00455F64    8BCF            MOV ECX,EDI
  49. 00455F66    E8 7CEB0100     CALL VCM.00474AE7
  50. 00455F6B    8935 A8CC8800   MOV DWORD PTR DS:[88CCA8],ESI
  51. 00455F71    8B35 D0D24700   MOV ESI,DWORD PTR DS:[47D2D0]            ; kernel32.GetCurrentProcess
  52. 00455F77    68 80000000     PUSH 80
  53. 00455F7C    FFD6            CALL ESI
  54. 00455F7E    50              PUSH EAX
  55. 00455F7F    FF15 B8D24700   CALL DWORD PTR DS:[47D2B8]               ; kernel32.SetPriorityClass
  56. 00455F85    6A 01           PUSH 1
  57. 00455F87    FFD6            CALL ESI
  58. 00455F89    50              PUSH EAX
  59. 00455F8A    FF15 BCD24700   CALL DWORD PTR DS:[47D2BC]               ; kernel32.SetProcessAffinityMask
  60. 00455F90    6A 0F           PUSH 0F
  61. 00455F92    FF77 28         PUSH DWORD PTR DS:[EDI+28]
  62. 00455F95    FF15 C0D24700   CALL DWORD PTR DS:[47D2C0]               ; kernel32.SetThreadPriority
  63. 00455F9B    8BCF            MOV ECX,EDI
  64. 00455F9D    E8 EA050000     CALL VCM.0045658C
  65. 00455FA2    68 DE000000     PUSH 0DE
  66. 00455FA7    E8 BC069D00     CALL 00E26668
  67. 00455FAC    8D8D 10F9FFFF   LEA ECX,DWORD PTR SS:[EBP-6F0]
  68. 00455FB2    E8 44CDFDFF     CALL VCM.00432CFB
  69. 00455FB7    A1 983A4A00     MOV EAX,DWORD PTR DS:[4A3A98]
  70. 00455FBC    33F6            XOR ESI,ESI
  71. 00455FBE    8BC8            MOV ECX,EAX
  72. 00455FC0    0FAFC8          IMUL ECX,EAX
  73. 00455FC3    85C9            TEST ECX,ECX
  74. 00455FC5    7E 1A           JLE SHORT VCM.00455FE1
  75. 00455FC7    68 88130000     PUSH 1388
  76. 00455FCC    E8 9361FDFF     CALL VCM.0042C164
  77. 00455FD1    A1 983A4A00     MOV EAX,DWORD PTR DS:[4A3A98]
  78. 00455FD6    59              POP ECX
  79. 00455FD7    8BC8            MOV ECX,EAX
  80. 00455FD9    46              INC ESI
  81. 00455FDA    0FAFC8          IMUL ECX,EAX
  82. 00455FDD    3BF1            CMP ESI,ECX
  83. 00455FDF  ^ 7C E6           JL SHORT VCM.00455FC7
  84. 00455FE1    8D8D 10F9FFFF   LEA ECX,DWORD PTR SS:[EBP-6F0]
  85. 00455FE7    885D FC         MOV BYTE PTR SS:[EBP-4],BL
  86. 00455FEA    E8 DEB0FDFF     CALL VCM.004310CD
  87. 00455FEF    834D FC FF      OR DWORD PTR SS:[EBP-4],FFFFFFFF
  88. 00455FF3    8D4D EC         LEA ECX,DWORD PTR SS:[EBP-14]
  89. 00455FF6    E8 6FAF0100     CALL VCM.00470F6A
  90. 00455FFB    8B4D F4         MOV ECX,DWORD PTR SS:[EBP-C]
  91. 00455FFE    5F              POP EDI
  92. 00455FFF    5E              POP ESI
  93. 00456000    33C0            XOR EAX,EAX
  94. 00456002    5B              POP EBX
  95. 00456003    64:890D 0000000>MOV DWORD PTR FS:[0],ECX
  96. 0045600A    C9              LEAVE
  97. 0045600B    C3              RETN


У этих продуктов под PCGuard вроде ещё VMProtect и/или Virtualizer )))




Ранг: 79.4 (постоянный), 183thx
Активность: 0.110
Статус: Участник

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

unpacking PC Guard 5.07 by PassingThrough
http://tuts4you.com/download.php?view.3286



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 25 апреля 2012 15:45 · Поправил: Kuzya69
· Личное сообщение · #6

NikolayD
Спасибо, но......
Чуть поподробнее можно объяснить. Вижу что в вашем коде переадресована подпрограмма
Code:
  1. 00455FA2    68 DE000000     PUSH 0DE
  2. 00455FA7    E8 BC069D00     CALL 00E26668

Наверно имеется ввиду перенос кода из участка 00376668..., в участок 00E26668..., с созданием там секции?
Но где вот это лежит, или лежать должно, и что с этим делать?
Code:
  1. PUSH 0DE
  2. CALL 00E264C6

Или имелось ввиду именно то-что я выделил в предыдущем коде, просто ошиблись?
Я еще новичек, и с двух слов не всегда понимаю.

AKAB
Спасибо, интересный тутор. Но возникла проблема. Там перед вызовом функции VirtualAlloc, автор изменяет свойства окна, (WinXP=5.1 ---> Win7=6.1) в GetVersionExA. А на моей программе этот "финт ушами" не проходит. У меня VirtualAlloc вызывается раньше чем GetVersionExA. Но все равно спасибо. Пока пробую "адаптировать" способ под свой случай.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 25 апреля 2012 16:21
· Личное сообщение · #7

Крипта работает так, что сначала расшифрованный участок выполняется и затем снова шифруется. Ну как-то так:
Code:
  1. 00455EBA      68 DE000000   PUSH 0DE
  2. 00455EBF      E8 02069D00   CALL 00E264C6                            ; процедура расшифровывает кусок кода
  3. ------------------------------------------Здесь участок с кодом-----------------------------
  4. 00455FA2   .  68 DE000000   PUSH 0DE
  5. 00455FA7   .  E8 BC069D00   CALL 00E26668                            ; процедура зашифровывает кусок кода

Таким образом получается тебе нужно выполнить расшифровку (просто установить железный/мемори бряк на байт идущий после вызова), перенести код в свой дамп и занопить обе процедуры.

| Сообщение посчитали полезным: Kuzya69

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 25 апреля 2012 16:41 · Поправил: Kuzya69
· Личное сообщение · #8

NikolayD
А заставить крипту создать зашифрованный код в другом участке, а потом шифровать-дешифровать в том участке, где и создает, не будет правильней?
Извини если вопрос покажется "глупым". Просто скажи "Ты не прав".



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 25 апреля 2012 16:53
· Личное сообщение · #9

Это называется из пустого в порожнее )))



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 25 апреля 2012 18:21
· Личное сообщение · #10

Kuzya69
Нормальным тоном считается выдирать скрытый код и вставлять его на место.
ЗЫ. У мну просто тоже самое и с виртуальной машиной SecuROM'а 7 было: что лучше выполнить 30k асм инструкций VM или 10 эквивалентных асм инструкций?



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 01:10 · Поправил: Kuzya69
· Личное сообщение · #11

tihiy_grom
Вы писали
добавить секцию такого же размера к экзешнику, дождаться пока пакер соберётся выделить память, и после VirtualAlloc подменить получившийся адрес на адрес этой нашей новой секции.
А нельзя через VirtualAlloc добавить секцию? Зачем там параметр "Базовый адрес"? Пробовал в Олли изменить это значение перед вызовом VirtualAlloc, возвращается ошибка (00000000).
Пробовал задать базовый адрес такой-же, который автоматом создается. То-есть перед вызовом базовый адрес задается NUL, а возвращается 00360000. Я пробовал перед вызовом подменить базовый адрес сразу на 00360000, но АПИ вернула ошибку (00000000).
Если все мои действия неверны, то как нужно создавать секцию при помощи Олли?

И еще один вопрос, где подсмотреть числовые значения параметров функции?
Например хочу изменить параметр с PAGE_EXECUTE_READ на PAGE_EXECUTE, и не знаю какое значение ввести. Олли-то это знает, но как это мне увидеть? Не перебирать-же все возможные значения.




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

Создано: 26 апреля 2012 01:30
· Личное сообщение · #12

Kuzya69, вы должны прикрутить секцию которую будете размещать где требуется к файлу. Потом вызывать VirtualAlloc с параметров "желательный адрес" не NULL, а тот который у вас был ранее.



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 01:51
· Личное сообщение · #13

Dart Sergius
...вы должны прикрутить секцию которую будете размещать где требуется к файлу...
Вот тут можно поподробнее, как это сделать в Олли? Или ссылку если не трудно?




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

Создано: 26 апреля 2012 02:34
· Личное сообщение · #14

Kuzya69, прикрутить секцию надо любым PE редактором.
Потом
VirtualAlloc(<наш желаемый адрес>...)
и копируем всё что в нашей новой секции в выделенную память.

| Сообщение посчитали полезным: Kuzya69

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 14:18
· Личное сообщение · #15

А секцию создавать с размерами RawSize=нулевой, а VirtualSize=такой как VirtualAlloc создает, только округлить до ближайшей большей 1000h? Правильно я понимаю?
Просто никак не получается создать секцию в диапазоне (виртуальном) 00А20000 размером 18000. Если с помощью LordPE создавать автоматом (не меняя VOffset и ROffset), то создается.
Понятно, что можно оставить и так, но нужно и по другому научиться?

И все равно остался вопрос. При запуске секции 360000 еще нет. После вызова VirtualAlloc с параметрам для адреса секции "по усмотрению Винды" эта секция появляется. Как программа создает эту секцию при выполнении? Даже так, какой код вписать мне в Олли, чтоб программа сама создала нужную мне секцию?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 26 апреля 2012 14:34
· Личное сообщение · #16

Клуб телепатов собрался,по сущевству в 4 постеNikolayD отписался

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 15:33 · Поправил: Kuzya69
· Личное сообщение · #17

Так в чем вопрос-то? Я вроде все написАл.
Просто надо понять, как секции создаются, самой программой? И почему вручную не получается, с моими установками ?
Code:
  1. 009C65E0 Main     PUSH    40 ; Protect_VirtualAlloc_1
  2. 009C65E5 Main     PUSH    1000 ; AllocationType_VirtualAlloc_1
  3. 009C6602 Main     PUSH    ESI ; Size_VirtAlloc_1
  4. 009C6609 Main     PUSH    0 ; Address_VirtAlloc_1
  5. 009C660E Main     CALL    DWORD PTR SS:[EBP+429314] ; kernel32.VirtualAlloc

После выполнения этого куска кода появляется секция
Code:
  1. Memory map, item 15
  2.  Address=00360000
  3.  Size=00018000 (98304.)
  4.  Owner=         00360000 (itself)
  5.  Section=
  6.  Type=Priv 00021040
  7.  Access=RWE
  8.  Initial access=RWE

Мне надо чтоб эта секция появилась в другом месте
Code:
  1. ...Address=00E20000....

Как исправить код?
А по первой части предыдущего сообщения.
Создаю в LordPE секцию. Так мне надо.
Code:
  1. Voffset=00A20000 (чтоб в Олли эта секция была 00E20000 как советовал NikolayD)
  2. Vsize=   00018000
  3. Rsize=   00000000

Остальное оставляю на усмотрение LordPE.
Файл не запускается.
Если создаю секцию.
Code:
  1. Vsize=   00018000
  2. Rsize=   00000000

Остальное оставляю на усмотрение LordPE.
Секция создается, но в другом месте и файл запускается.
Почему не могу создать, как я хочу?




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 26 апреля 2012 15:45 · Поправил: ClockMan
· Личное сообщение · #18

Code:
  1. /00455EBA*/  PUSH 0DE=========>New origin here
  2. /00455EBF*/  CALL 003B64C6
  3. /00455EC4*/  LES EBP,[EAX+1C]==========>Breakpoint>Hardware,on execution


-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 16:07
· Личное сообщение · #19

Это я понял как сделать. Я спрашивал в предыдущем посте совсем о другом.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 26 апреля 2012 16:14
· Личное сообщение · #20

Kuzya69 пишет:
Остальное оставляю на усмотрение LordPE.
Файл не запускается.


И не запустится, если нарушена непрерывность образа. В таком случае можно, чтоб не париться, юзать опцию Validate PE в Pe Tools.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 16:26 · Поправил: Kuzya69
· Личное сообщение · #21

ARCHANGEL пишет:
И не запустится, если нарушена непрерывность образа.
Так образ в месте RawOffset непрерывен, да и секцию в файл я нулевую добавляю.
Смотрел FlexHex-ом.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 26 апреля 2012 16:37 · Поправил: ARCHANGEL
· Личное сообщение · #22

Kuzya69
Непрерывность должна быть по Virtual Offset. Дырок в виртуальной памяти проекции образа быть не должно, т.е. если хотите выделить память в адресах типа 00Е00000 - пожалуйста, а если хотите обязать загрузчик это делать, значит надо сделать предыдущую секцию больше по виртуальным адресам так, что пространство перед вашим заветным адресом принадлежало предыдущей секции.

-----
Stuck to the plan, always think that we would stand up, never ran.


| Сообщение посчитали полезным: Kuzya69

Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 17:01 · Поправил: Kuzya69
· Личное сообщение · #23

Виртуальную память когда смотреть? На ЕР, OEP, после прохода всех VirtualAlloc, или уже когда программа запустилась?
Чтоб узнать куда секцию можно вписать, и какую соответственно увеличивать?


Пардон, кажется понял.
Можно не обязательно увеличивать предыдущую, а создать пустую секцию в этом разрыве.
Посчитал Voffset-ы Vsize-ы всех секций в таблице LordPE. И вроде дошло. Спасибо!!!

А как с заданием адреса секции для VirtualAlloc? Что я чуть выше писАл.



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

Создано: 26 апреля 2012 18:05
· Личное сообщение · #24

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



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 26 апреля 2012 18:12 · Поправил: ELF_7719116
· Личное сообщение · #25

Kuzya69
Секции создаются загрузчиком. Для этого существуют низкоуровневые API типа ZwCreateSection и макросы для них другие.
VirtualAlloc(Ex) - выделяет виртуальную память, которая может быть освобождена. По существу все же это не одно и тоже.
например типичный код:
Code:
  1. VirtualAlloc((void*)0x1000000,0x1000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READ);

В первом аргументе задается желаемый адрес выделяемой памяти(в данном случае 0x1000000), который не NULL.



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 18:36
· Личное сообщение · #26

tihiy_grom
Да что вам так упёрлись эти адреса.
Парни, ну я заодно и учусь. Я хочу понять как это происходит. Просто повторять действия тутора не интересно. Параллельно хочу понять, как создаются эти секции.
ELF_7719116
В первом аргументе задается желаемый адрес выделяемой памяти(в данном случае 0x1000000), который не NULL.
Вот именно так я и делал, только аргумент адреса засовывал прямо в стек, перед вызовом VirtualAlloc.
Я так понял, чтоб VirtualAlloc "выделил секцию", нужно чтоб эта секция уже была создана загрузчиком?
Но почему тогда VirtualAlloc создает ее в свободном пространстве 00360000, и не создает в созданной мной, через LordPE секции. Может нужно, при создании в LordPE, задать моей секции, какие-то атрибуты "что она свободна"?




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 26 апреля 2012 19:04
· Личное сообщение · #27

Уффф. Так, начнём сначала. Есть три разных понятия: объект "секция", секция Portable Executable и участок виртуальной памяти, именуемый во всяких утилитах как регион (region).

1.Итак, объект "секция" не стоит путать с термином "секция" из PE-файла, это вовсе не одно и тоже. Section object создается в ЕДИНСТВЕННОМ экземпляре на файл. Доказательство: функция NtCreateSection, вызывается ОДИН раз - в коде лоадера (ntdll.dll) из LdrpCreateDllSection (эта, в свою очередь, из LdrpMapDll), и в коде CreateProcess также единожды, в последовательности...

Продолжение --> Здесь <--

2. Секция Portable Executable имеет больше схожих черт с регионом, но разница в том, что секция проецируется на адресное пространство загрузчиком операционной системы, и от нас с вами не требуется никаких дополнительных программерских телодвижений. Подробнее --> Здесь <--

3. Регион - самое простое из этих понятий. Регионом называют множество последовательно расположенных виртуальных страниц с одинаковыми атрибутами доступа. VirtualAlloc выделяет именно регион.

Если вы хотите сдампить некоторую ВМ, то тут есть два различных способа её хранения - либо в секции (термин 2), которую вы сразу настраиваете на загрузку по требуемому виртуальному адресу, либо просто где-то в файле, неважно где, но т.к. это дамп, то по иронии судьбы, простейшим способом будет всё то же создание новой секции. В чём же разница? Разница в том, что в первом случае вы добиваетесь загрузки ВМ по требуемому адресу благодаря элементам IMAGE_SECTION_TABLE заголовка, а во втором случае выделяете регион программно и копируете туда код из вашей новой секции.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 20:31
· Личное сообщение · #28

ARCHANGEL
Отлично, я действительно путал термины. Трудновато для понимания с первого взгляда, но попробую вкурить. Еще раз двадцать перечитаю.
Докладываю, распаковал, все запускается. Сделал так
1)создал новую секцию
2) До прихода в ОЕП дважды вызывался VirtualAlloc. И создавал секции до ImageBase. После ОЕП секции создавались после ImageBase.(поэтому я их не трогал).
Так вот, я по выходу из процедуры просто подменял адреса создаваемых секций на созданную мной секцию, с учетом, что области не должны пересечься.
3) Пришел в ОЕП и сдампил. Работает.
С П А С И Б О В С Е М ! ! !
Будем дальше учиться.




Ранг: 79.4 (постоянный), 183thx
Активность: 0.110
Статус: Участник

Создано: 26 апреля 2012 21:02
· Личное сообщение · #29

вот тебе сам PassingThrough распакававал
http://ar.rghost.net/37783852



Ранг: 30.1 (посетитель)
Активность: 0.070
Статус: Участник

Создано: 26 апреля 2012 21:23
· Личное сообщение · #30

AKAB
Спасибо. Но согласитесь, самому научиться и понять куда приятней.
Я просто начал с младшей версии. А в принципе хочу старшие освоить.


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


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