ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование_OLD > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 20.11.2007, 14:07
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


Talking

>>В svchost выделили нужные адреса

>>Так вот работает все отлично, но как только доходит до выделения памяти выкидует
>>сообщение о ошибке и просьбе отослать отчет в Microsoft.

не знаю, имхо код был просто скопирован
 

  #12  
Старый 20.11.2007, 19:03
razzzar
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме:
725870

Репутация: 208
По умолчанию

Цитата:
Сообщение от ZaCo  
>>В svchost выделили нужные адреса

>>Так вот работает все отлично, но как только доходит до выделения памяти выкидует
>>сообщение о ошибке и просьбе отослать отчет в Microsoft.

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

2КЕЗ, да, вы телепат )
 

  #13  
Старый 20.11.2007, 19:59
ZaCo
Banned
Регистрация: 20.06.2005
Сообщений: 880
Провел на форуме:
4610226

Репутация: 1332


По умолчанию

>>ничего там скопированого не было. все писал я.
я про код процесса, а не программы на C)
 

  #14  
Старый 20.11.2007, 21:20
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

> не знаю, имхо код был просто скопирован

При инжекте у ТС с текущего процесса в адресное пространство другого по _одинаковым_ адресам копируется какой-либо код/+данные/+етц
иначе все слетело бы ещё задолго до вызова malloc()
о чем тут спорить можно ? : DDD
 

  #15  
Старый 20.11.2007, 21:36
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
Сообщение от KEZ  
> не знаю, имхо код был просто скопирован

При инжекте у ТС с текущего процесса в адресное пространство другого по _одинаковым_ адресам копируется какой-либо код/+данные/+етц
иначе все слетело бы ещё задолго до вызова malloc()
о чем тут спорить можно ? : DDD
Почему, есть инструкция call, адресующая функцию относительно текущего EIP, она кстати и используется, данные все можно формировать на стеке, api функции подключать в ходе выполнения...
 

  #16  
Старый 20.11.2007, 22:13
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Не от EIP, а от своего месторасположения.

Цитата:
она кстати и используется, данные все можно формировать на стеке, api функции подключать в ходе выполнения...
что тут написано и как это относится к бедному razzzar, которому уже все давно объяснили - я пока ещё не понял

есть большой кусок кода, сгенерированый компилятором, который при перемещении в другой процесс надо либо релочить, либо перемещать на тот же VA, где он и должен быть в процессе, либо записывать его VA-независимым, например, вместо call [addr] делать mov eax,[addr]\call eax.
тут, вроде как, неочем спорить больше.
 

  #17  
Старый 20.11.2007, 22:25
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
Сообщение от KEZ  
Не от EIP, а от своего месторасположения.
"от своего месторасположения" это как? 0xE8 опкод инструкции вызова функции, адрес функции вычисляется как EIP + операнд.


Цитата:
Сообщение от KEZ  
что тут написано и как это относится к бедному razzzar, которому уже все давно объяснили - я пока ещё не понял

есть большой кусок кода, сгенерированый компилятором, который при перемещении в другой процесс надо либо релочить, либо перемещать на тот же VA, где он и должен быть в процессе, либо записывать его VA-независимым, например, вместо call [addr] делать mov eax,[addr]\call eax.
тут, вроде как, неочем спорить больше.
Ну а почему именно такие варианты? Что мешает не использовать абсолютных адресов, формируя все данные на стеке (а глобальные переменные вынося в динамиечкую память, выделяемую уже в контексте "проинжектинного" процесса, подгружая все системные функции на лету и прыгая с функции на функцию 0xE8 call'ами (или вообще не прыгая, а делать все в __inline)

Последний раз редактировалось DWORD; 20.11.2007 в 22:30..
 

  #18  
Старый 21.11.2007, 03:17
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

Цитата:
"от своего месторасположения" это как? 0xE8 опкод инструкции вызова функции, адрес функции вычисляется как EIP + операнд.
Это так, что можно вычислять как EIP+операнд в момент выполнения CALL, а можно - в общем случае - адрес инструкции CALL + её операнд. Так как заранее известно, каким будет EIP в момент выполнения инструкции (когда она где-то расположена в виртуальной памяти) - думаю, уж можно сказать, что адрес процедуры будет равен адресу инструкции CALL + её операнду. Да, процессору все равно что и где там расположено, но с точки зрения чисто-человеческой логики, можно сказать про адрес инструкции call, а не про EIP в момент её выполнения, который, по сути, является тем же самым. Ладно, ок, от EIP зависит - это правильно.

Цитата:
прыгая с функции на функцию 0xE8 call'ами
ну и?)) e8 call то должен быть расположен либо там, где и был, либо его надо корректировать. это и есть "использование абсолютных адресов"

Цитата:
Что мешает не использовать абсолютных адресов, формируя все данные на стеке
Компилятор мешает. Я уже сказал, что можно использовать базонезависимый код - ты как раз и говоришь про такой. Который будет где угодно выполняться. Да, да, это формирование в стеке, глобальные данные в куче, может быть замена call mem на mov reg,mem\call reg и т.п. неудобства.
Как видно по первому посту в топике - компилятор c/cpp.
Вот он, к примеру, очень часто будет ставить свои __CRT_CheckESP и тому подобное.
И ещё много чего делать будет. Про __inline - без комментариев, это явно тут "ни приштопай ни пришей".
А так, если самому писать код - да без проблем, можно полно всего придумать.

Последний раз редактировалось KEZ; 21.11.2007 в 03:22..
 

  #19  
Старый 21.11.2007, 09:52
DWORD
Участник форума
Регистрация: 24.07.2007
Сообщений: 138
Провел на форуме:
165671

Репутация: 215
По умолчанию

Цитата:
ну и?)) e8 call то должен быть расположен либо там, где и был, либо его надо корректировать. это и есть "использование абсолютных адресов"
Этого я так и не понял, почему? В непосредственном операнде стоит только смещение и ему глубоко фиолетово какой там EIP, если код весь копировать монолитно, что видимо является единственно-адекватным решением, все будет работать по любым адресам.

Кстати, чтобы call'ы имели такой вид, на сколько я понял, извращаться ненужно, я, например, смог получить call по абсолютному адресу только для 0xFF call'а при вызове функции через функциональную переменную (Borland C++), но что-то мне подсказывает что на MSVS тоже самое.
 

  #20  
Старый 21.11.2007, 19:00
KEZ
Banned
Регистрация: 18.05.2005
Сообщений: 1,981
Провел на форуме:
1941233

Репутация: 2726


По умолчанию

> Этого я так и не понял, почему?

А релоки в длл придумали просто так?
Проблема в том, что каким-то инструкциям нужна VA, а каким-то - смещение, относительно EIP. Поэтому - либо релочишь колы и джампы, либо mov'ы и все остальное.
Как у тебя CRT инициализируется с таким кодом:

Цитата:
Сообщение от mainCRTStartup  
00413D12 . 56 PUSH ESI ; /pVersionInformation
00413D13 . FF15 4CD24200 CALL DWORD PTR DS:[<&KERNEL32.GetVersion>; \GetVersionExA
00413D19 . 8B4E 10 MOV ECX,DWORD PTR DS:[ESI+10]
00413D1C . 890D 20AF4200 MOV DWORD PTR DS:[_osplatform],ECX
00413D22 . 8B46 04 MOV EAX,DWORD PTR DS:[ESI+4]
00413D25 . A3 2CAF4200 MOV DWORD PTR DS:[_winmajor],EAX
00413D2A . 8B56 08 MOV EDX,DWORD PTR DS:[ESI+8]
00413D2D . 8915 30AF4200 MOV DWORD PTR DS:[_winminor],EDX
?

где _osplatform == 0x42AF20

перенесешь код - будет уже совсем неправильный адрес.
 
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ