![]() |
eXeL@B —› Вопросы новичков —› Подскажите, каким генератором лоадера такое можно сделать. |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 18 июля 2013 16:20 · Личное сообщение · #1 Проблема в следущем. В каждой очередной версии одной программы, приходится подменять несколько байт. Адрес подмены ищу всегда одеим и тем-же способом. Поэтому и хочется создать один "универсальный для всех версий" лоадер. Способ поиска адреса и байт для патча: Есть определенная текстовая сигнатура. Ищу по ней адрес. Выше этого адреса в определенном интервале ищу вторую текстовую сигнатуру. Перевожу текст этой сигнатуры в НЕХ-значение. Подставляю это хекс значение в третью, но уже нех-сигнатуру. Ищу адрес этой третьей сигнатуры . И чуть выше адреса этой третьей сигнатуры нахожу адрес места куда буду вносить нужные изменения. Может сумбурно написал, но если понадобится, могу написать пример. Вопрос, каким генератором лоадеров можно это осуществить, так сказать сделать "умный лоадер". Тоесть какой генератор лоадеров позволит ввести такой алгоритм поиска, а не просто поиск по сигнатуре? ![]() |
|
Создано: 18 июля 2013 16:41 · Личное сообщение · #2 |
|
Создано: 18 июля 2013 16:53 · Личное сообщение · #3 |
|
Создано: 18 июля 2013 16:55 · Поправил: Kuzya69 · Личное сообщение · #4 Archer Насчет "проще", не уверен. Для меня большая проблема, как аттачиться лоадером к проге, обойдя защиты. Потом как открыть дамп процесса, как обходить проверку црц (или хотя-бы задержку сделать). Я такое точно на асме не напишу. А можно готовые лоадеры (исходники) посмотреть? Дайте ссылочки, пожалуйста. Лучше если язык лоадеров будет делфи, даже пусть с "асм-вставками". Меня именно интересует, как запустить программу, и открыть ее виртуальную память. Ну и потом завершить лоадер не навредив процессу. DenCoder Да видел я в ВИН-ХЕКСе скрипты. Но никак не могу найти команду открывания RAM, запущенного процесса. ![]() |
|
Создано: 18 июля 2013 17:01 · Личное сообщение · #5 Разберешься? делфи Code:
масм: Code:
----- xchg dword [eax], eax ![]() |
|
Создано: 18 июля 2013 17:07 · Поправил: Kuzya69 · Личное сообщение · #6 |
|
Создано: 18 июля 2013 17:32 · Личное сообщение · #7 |
|
Создано: 18 июля 2013 18:06 · Поправил: Kuzya69 · Личное сообщение · #8 Vovan666 Извиняюсь, бегло посмотрел. Привык, что основной код вверху, а процедуры внизу. Извиняюсь, а как поисковики по сигнатуре пишутся в готовых лоадерах? Они всю память процесса копируют в массив, а потом в массиве ищут? Или побайтно делают ReadProcessMemory? Или еще есть какие приемы в плане, размер-быстродействие? ![]() |
|
Создано: 18 июля 2013 19:27 · Поправил: void · Личное сообщение · #9 Kuzya69 пишет: Они всю память процесса копируют в массив, а потом в массиве ищут? Или побайтно делают ReadProcessMemory? Или еще есть какие приемы в плане, размер-быстродействие? Ненадо ничто никуда копировать, работаешь напрямую с памятью. Code:
Ищем: Code:
PS: надеюсь следующим твоим вопросом не будет "ребят, я чет туплю, напишите за меня" ----- xchg dword [eax], eax ![]() |
|
Создано: 18 июля 2013 19:39 · Личное сообщение · #10 |
|
Создано: 18 июля 2013 19:48 · Личное сообщение · #11 |
|
Создано: 18 июля 2013 20:00 · Личное сообщение · #12 Archer пишет: Напрямую с памятью, видимо, имеется в виду, что уже в адресном пространстве нужного процесса код. В общем случае проще считать в буфер и искать там. Спорно, зачем делать ненужную работу, когда можно уже в адресном пространстве нужного процесса Kuzya69 пишет: Ну не пинайте, я понимаю, надоел. Но это мой первый лоадер. Раньше с готовыми "делалками лоадеров" занимался. Поэтому и вопрос был про готовый генератор. Но тут тема резко сменила свое направление. И стала еще более интересной. Сейчас у тебя есть почти все готовое. Осталось это соеденить воедино и тестировать. ----- xchg dword [eax], eax ![]() |
|
Создано: 18 июля 2013 21:25 · Личное сообщение · #13 void, а как твоя функция dwFindPattern окажется в адресном пространстве нужного процесса, чтобы можно было, как ты выражаешься: void пишет: работаешь напрямую с памятью. ...а? ----- the Power of Reversing team ![]() |
|
Создано: 18 июля 2013 21:46 · Личное сообщение · #14 |
|
Создано: 19 июля 2013 16:12 · Личное сообщение · #15 |
|
Создано: 19 июля 2013 16:32 · Поправил: DenCoder · Личное сообщение · #16 DillerInc пишет: void, а как твоя функция dwFindPattern окажется в адресном пространстве нужного процесса, чтобы можно было, как ты выражаешься: Одним из способов 1) перевести в базонезависимый асм-код на асме и внедрить в процесс 2) перевести в асм-код, подсчитать необходимые смещения и внедрить в процесс 3) перенести функцию в shared-секцию и подгрузить shared-секцию в процесс (Recommended) ----- IZ.RU ![]() |
|
Создано: 19 июля 2013 16:50 · Поправил: DillerInc · Личное сообщение · #17 |
|
Создано: 19 июля 2013 16:55 · Личное сообщение · #18 |
|
Создано: 19 июля 2013 17:06 · Личное сообщение · #19 |
|
Создано: 19 июля 2013 17:16 · Личное сообщение · #20 |
|
Создано: 19 июля 2013 18:14 · Поправил: Kuzya69 · Личное сообщение · #21 ajax пишет: файл с диска возможно считать/отмапить А можно ссылочку на аналогичный код? Vovan666 пишет: ...сначала читаем файл -> ищем искомое место (по сигнатуре или как нибудь еще) -> RVA to VA минус imagebase -> CreateProcess SUSPENDED -> ... Сам файл упакован и распаковывается в памяти. Искать сигнатуры и вычислять место патча приходится именно в памяти. Или я вас неправильно понял? void Спасибо за примеры кода. пробую разобраться, почему я не могу считать определенную область из памяти в буфер. Вернее ReadProcessMemory в последнем параметре выдает, что считал например 10 байт, но при попытке перезаписать эти байты из буфера в файл или вывести на печать, срабатывают эксепшоны: 1) Application Error Exception EExternalException in module ntdll.dll at 0000e4ff. External exception C0000008. 2) Application Error Exception EAccessViolation in module Loader1.exe at 00005924. Access violation at address 00405924 in module 'Loader1.exe'. Write of address 63206D59. Видимо я или с адресацией напутал, или с типами переменных. Не думайте, я не прошу написать за меня код. Попробую сам разобраться, как правильно пользоваться этими АПИ, и как работать с памятью процесса, спасибо и за то, что вы уже выложили. Я просто поясняю почему "затих". ![]() |
|
Создано: 19 июля 2013 18:28 · Поправил: ajax · Личное сообщение · #22 Kuzya69 пишет: Сам файл упакован и распаковывается в памяти только из памяти тогда. валится - что-то из параметров не так пользуешь. стоп. а как ты узнаешь, что он уже в памяти типа распаковался? добавил: тогда все уже рассказали, кодь ----- От многой мудрости много скорби, и умножающий знание умножает печаль ![]() |
|
Создано: 19 июля 2013 18:39 · Поправил: Kuzya69 · Личное сообщение · #23 ajax пишет: а как ты узнаешь, что он уже в памяти типа распаковался? Ставлю паузу. Когда использую готовый лоадер, то и 3-х секунд для паузы хватает, чтоб потом правильно пропатчить. Code:
![]() |
|
Создано: 19 июля 2013 22:49 · Личное сообщение · #24 DillerInc пишет: Похоже, что влияние клерка не проходит бесследно... Ой, и меня посчитали ![]() Kuzya69 пишет: Ставлю паузу. Когда использую готовый лоадер, то и 3-х секунд для паузы хватает В зависимости от языка, на котором писалась прога, в начале обязательно вызываются специфические ф-ции. Даже после распаковки. VirtualAlloc, например, но не факт. Перехватывая её, мы знаем что уже всё распаковалось. Ну в этом духе более точнее ) ----- IZ.RU ![]() |
|
Создано: 20 июля 2013 05:20 · Поправил: ADMIN-CRACK · Личное сообщение · #25 В тему вопрос. Вот если я нахожу имя файла MSIMG32 proc hInstDLL:DWORD fn GetModuleFileName,0,OFFSET fName,128h fn CreateFile,[OFFSET fName],GENERIC_READ,0,0,OPEN_EXISTING,0,0 MOV[FileHandle],EAX fn GetFileSize,[FileHandle],0 CMP EAX,1E6F30h JNZ @EXIT fn CloseHandle,[FileHandle] fn GetModuleFileName,0,OFFSET fName,256h fn LoadLibrary,OFFSET fName ADD EAX,2BFCD0h MOV EBX,EAX fn VirtualProtect,EBX,4h,PAGE_EXECUTE_READWRITE,ADDR old_addr MOV BYTE PTR DS:[EBX],033h MOV BYTE PTR DS:[EBX+1],0C0h MOV BYTE PTR DS:[EBX+2],040h MOV BYTE PTR DS:[EBX+3],0C3h @EXIT: MOV EAX,1 LEAVE RETN 2Ch MSIMG32 Endp Это заголовок библы. как там пропатчить по сигнатуре? С лодырем понятно все. А с загружаемой библы не совсем. Буду благодарен за советы. ![]() |
|
Создано: 20 июля 2013 07:08 · Личное сообщение · #26 |
|
Создано: 20 июля 2013 10:20 · Личное сообщение · #27 ADMIN-CRACK у автора dup2 было что-то фришное на масме для поиска паттернов PS: так не красивее? ![]() ADD EAX,2BFCD0h push eax fn VirtualProtect,EAX,4h,PAGE_EXECUTE_READWRITE,ADDR old_addr pop eax MOV DWORD PTR [EAX],0C340C033h fn VirtualProtect,EAX,4h,old_addr,ADDR tmp_addr ; не забывай возвращать аттрибуты @EXIT: xor eax,eax inc eax LEAVE RETN 2Ch ----- От многой мудрости много скорби, и умножающий знание умножает печаль ![]() |
|
Создано: 20 июля 2013 10:29 · Личное сообщение · #28 ajax пишет: у автора dup2 было что-то фришное на масме для поиска паттернов в аттаче ![]() ![]() |
|
Создано: 23 июля 2013 20:27 · Поправил: ADMIN-CRACK · Личное сообщение · #29 ajax Благодарю. ![]() Это уже есть в принципе давно. Это я так со старого исходника на скорую руку вставил. Vovan666 Этим давно пользуюсь для патча екзешки. Дьявол сам не сделал такой штуки без помощи отдельного файла с шаблоном. Мне интересно немного другое. Поиск сигнатур в памяти. У меня подгружаемая длл, и из неё при старте проги нужно найти косяк и устранить его. Собственно вопрос как, найти в памяти этого проца эти данные. А как исправить это не вопрос. ![]() |
|
Создано: 23 июля 2013 21:45 · Личное сообщение · #30 |
. 1 . 2 . >> |
![]() |
eXeL@B —› Вопросы новичков —› Подскажите, каким генератором лоадера такое можно сделать. |