eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: user99, SDK (+7 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› R!SC's Process Patcher -- RPP
Посл.ответ Сообщение

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 16 июля 2017 21:09 · Поправил: dosprog New!
Цитата · Личное сообщение · #1

R!SC's Process Patcher -- RPP
=====================

Это старинный генератор лоадеров.

Утилита очень не новая, на паблике её версия 1.5.1 (с сорсами для TASM'а) аж с 2000-го года.
Здесь расскажу о её слегка (ну, может, и не слегка..) осовремененном ремейке, которым иногда пользуюсь, мне нравится.

**********************************************
--> RPP v.1.5.1.006p [(c)2000-2018] <-- Только RPP.EXE
**********************************************

За основу взята та старая версия 2000-го года, но там поправлены пара багов,
сделана б.м. корректная передача арументов целевой программе и добавлены пара-тройка полезных опций.
Например, добавлен поиск целевых байтов по маске и безусловный патч по заданному адресу.
Также поддержка ASLR, в далёком 2000-м никто не предполагал, что микрософт дойдёт до таких низостей.
Ещё из добавленного можно отметить такую опцию, когда в скрипте .RPP не задаётся имя запускаемого процесса (";;;;;;f=FileName.EXE:").
Тогда сгенерённым лоадером будет выводиться диалог для выбора целевого файла для запуска.
Такое может быть полезно, если лоадер должен патчить байты с поиском их по маске в разных версиях софта, имеющего разные же и имена EXE-файлов. - Нужный файл можно выбрать в диалоге.

Изначально программа была на TASM'е, но при возне с нею стало окончательно ясно,
что от использования TASM'а всё же придётся уходить.

А вцелом идеология программы и синтаксис .RPP файлов остались прежними,
совместимость "сверху вниз" соблюдена.

Более того, бывали случаи, когда лоадеры, сгенерированные оригинальной версией RPP от 2000-го года оказывались нерабочими в новых системах, а будучи заново сгенерёнными новой версией RPP 1.5.1.00x оказывались работоспособными. И не только из-за ASLR'а. - Добавлена опция повторов попыток патчения не только по числу этих самых попыток, но и до истечения определённого интервала времени.
Хотя задание этих интервалов это мутное решение, нужно стараться его избегать, может пострадать работоспособность в других системах.

Программа проста, как велосипед, и в некоторых случаях очень удобна,
поскольку работает со скриптами, на основе которых генерируется лоадер-патчер.
Скрипты эти бывает полезно хранить, поскольку там сжато и компактно описан процесс запуска и патча целевого процесса.
Сам же лоадер часто хранить нет смысла, его можно быстро заново сгенерировать на основе хранящегося скрипта RPP.

Никакой документации нет, только та, что к оригинальной версии RPP 1.5.1 от 2000-го года, её можно найти в архивах,

--> RPP v.1.5.1 (2000 г.) + TASM Sources <-- - Это оригинальная версия 2000-го года, с сорсами.

а также имеется подсказка по использованию в самой программе, которая генерируется по ключу командной строки "/h".
Эта подсказка, сохранённая в файл, является одновременно же и шаблоном файла-скрипта RPP.

Вообще, ремейк сделан в виде консольной программы, это оказалось удобнее всяких GUI.

Вот пример скрипта, выдаваемого в виде подсказки по ключу "/h" - видны опции программы.
Видно, что ненужные опции в шаблоне закомментированы.

Code:
  1. T=2000:     ; HOW MANY ATTEMPTS IT HAS FOR FINDING THE SEARCH BYTES
  2. ;.......................... BEFORE QUITTING (default is 8000h)
  3. F=test.exe:           ; PROCESS TO PATCH (*OPTIONAL-NAME OF PROCESS FOR LOAD*)
  4. O=test!.exe:          ; LOADER TO CREATE
  5. R:                    ; RESUME PROCESS
  6. P=40A61B/6A,0/EB,62:  ; VA/CHECK/REPLACE
  7. d=7d0:                ; msecs,hex, Resume & delay (7d0h=~2 secs)
  8. P=40001A/75,0/EB,62:  ; VA/CHECK/REPLACE
  9. ; --- v.1.5.1.005p --New keys available:---
  10.  w=7d0:           ;;(~2 secs) ; msecs,hex, if wrong patch -terminate after
  11. ;u=1F4: ; msecs,hex, wait before patch, default is 0
  12.  B=400000:  ; Orig. PE base. If not 0 then use ASLR
  13. ;a=401000/404000/34,75,?/?,EB,03: ; VASTART/VAEND/SEARCH?/REPLACE?
  14. ;m=40001A/EB: ; VA/REPLACE FORCE
  15. ;h=My Loader ; Loader messages window title
  16. ;h1=Now starting\n Ok? ; Loader logo MBox text
  17. ;h2=Patched Ok \n Enjoy! ; Loader Bye MBox text
  18. ;s: ; if wrong patch - no error message
  19. ;n: ; types target filename if errors
  20. $


В природе есть ещё GUI для подготовки аргументов запуска RPP.EXE, старая версия, 2000-го года:
--> (с)NchantA - GUI for using with RPP.EXE <--
(Не знаю, зачем оно нужно, - но есть).

| Сообщение посчитали полезным: gajemuxi, zNob, sendersu, GMAP, HandMill


Ранг: 10.2 (новичок)
Статус: Участник

Создано: 16 июля 2017 21:31 New!
Цитата · Личное сообщение · #2

dosprog, а сырков от свежака не пробегало? Хоть глянуть что в коде намутили. Старая версия с сырками давно лежит в закромах, пользовался несколько раз.

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 16 июля 2017 21:36 · Поправил: dosprog New!
Цитата · Личное сообщение · #3

Нет, сорсы только старые, в архиве 2000-го года.
В новых - там и поменялось-то немногое, просто малость допилено/пофиксено по мелочам. Не уходя от концепции.

Программа транслировалась с ASM'а, дизассемблировать одно удовольствие. В общем, надо пробовать.

-- Добавлено 01.01.2018 --

Перезалита версия в стартпосте [1.5.1.006p (2018)] - добавлена реакция лоадера на отсутствие файла под заданным изначально именем.
Тогда файл для запуска предлагается поискать самостоятельно.
Так, как это сделано в DUP2.


Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 6 февраля 2018 06:54 · Поправил: dosprog New!
Цитата · Личное сообщение · #4

Такой вопрос - есть ли рабочие генераторы лоадеров x64, загружающих и патчащих x64 же и программы?
Поиском находятся только обсуждения поведения x32 лоадеров в x64-системах.
Ну, и ещё всякий мутняк с запуском PE-файлов из памяти, для малвари.

А интересует штатный, приличный алгоритм, x64-аналог вызова x32<CreateProcess()>.
Понадобилось такое на днях - так ничего путного и не нашлось.

.. Неужели с этим всё пичально?


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

Создано: 12 февраля 2018 10:52 New!
Цитата · Личное сообщение · #5

dosprog
AT4RE Patcher v0.7.5 не подходит? Только что им лодырь делал для x64 софтины. В W7 x64 все нормально работает.

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


Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 12 февраля 2018 21:30 · Поправил: dosprog New!
Цитата · Личное сообщение · #6

Спасибо. Не следил за ним в последнее время.
Буду пробовать.
.. Размер создаваемого лоадера, конечно, устрашающий..
Во всяком случае, под x32 генерирует лоадер для x64, как оно и должно быть.


Ранг: 314.0 (мудрец)
Статус: Участник

Создано: 13 февраля 2018 00:57 · Поправил: difexacaw New!
Цитата · Личное сообщение · #7

dosprog

#4 - так вы посмотрите на блэк площадках, где школьники собирают загрузчики/крипторы для установки всякого говна, их навалом на каждом ресурсе. Не знаю рабочее ли оно, но такого типа софт там является базовым.

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 13 февраля 2018 06:12 · Поправил: dosprog New!
Цитата · Личное сообщение · #8

Говно не нужно. Школьники увлекаются подгрузками его в память и настройками там его самостоятельно,
ссылаются даже на некоего клерка, который такое якобы умеет.
Но это не интересует.
Посмотрю по свободе на at4re patcher, вроде, должно работать.
Просто нет сейчас в распоряжении x64 системы.


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

Создано: 22 февраля 2018 11:30 New!
Цитата · Личное сообщение · #9

dosprog
Подскажи пожалуйста в чем проблема. Делаю лодырь с S&R для нескольких софтов, во всех нужно изменить один байт, после этого софт регистрируется и лодырь уже не нужен, все софты запускаются напрямую.
Вот что выдает RPP:
Error in script, line 4
'=' expected, found nothing

ldr.rpp
---------------------
T=2000:
O=*.exe:
B=400000:
a=401000/83FFFF/8B,55,F4,58,E8,?,?,?,?,75,0C,C7,83/8B,55,F4,58,E8,?,?,?,?,75,00,C7,83:
$
--------------------
Делаю обычный лодырь с параметром P, тогда все работает, но для одного экзешника и одного конкретного байта.

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 22 февраля 2018 14:06 · Поправил: dosprog New!
Цитата · Личное сообщение · #10

Это нормально.
"O=*.EXE:" лишняя. Закомметрировать вообще или исправить на что-то вроде "O=reg!.exe:".
Это имя файла для создаваемого лоадера, - как можно создать файл с именем "*.EXE" ?
А запускаемую программу EXE тогда нужно будет выбрать ручками, в диалоге.
Поскольку имя файла для запуска и патчения не задано (";F=")
Так работает:
Code:
  1. T=2000:
  2. B=400000:
  3. a=401000/83FFFF/8B,55,F4,58,E8,?,?,?,?,75,0C,C7,83/8B,55,F4,58,E8,?,?,?,?,75,00,C7,83:
  4. $

.. Только с таким диапазоном "a=401000/83FFFF/..." лоадер будет работать очень вяло. Лучше сузить.
Эта опция хороша в пределах разницы адресов ~1000h, а иначе получается слишком медленный запуск целевой программы.
Хотя, если требуется только единичный запуск, для регистрации, тогда можно и подождать.

(
Проверил запуск с таким диапазоном "a=401000/83FFFF/..."
- процесс стартует примерно через 10 секунд, на довольно шустрой машине. Это безобразно долго.
Это потому, что лоадеру приходится наугад читать все адреса из указанного в "a=" диапазона,
даже если уже пошли и невалидные адреса.
//Хотя, может быть, в этом случае можно было бы и прекратить поиск байтов//.
Это опция "a=" требует понимания происходящего.
).


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

Создано: 23 февраля 2018 09:29 New!
Цитата · Личное сообщение · #11

dosprog пишет:
Так работает

У меня не работает, та же ошибка. Да, с "О" я косякнул, думал это wildcard для выбора файлов. Пробовал как показано выше, пробовал с O=reg!.exe:, результат тот же - '=' expected, found nothing. И не очень понимаю какие признаки у патчера и лодыря? RPP их отличает только по заданным параметрам или это "!" в имени лодыря?

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 23 февраля 2018 09:35 · Поправил: dosprog New!
Цитата · Личное сообщение · #12

Патчение файлов в этой программе изначально не предусмотрено. Только запуск процесса и патчение его в памяти.
Что и отражено в названии программы - "Процесс патчер".

Имя файла для лоадера ("O=...") может быть любым желаемым, без масок, а может и вообще отсутствовать строка "O=",
тогда по умолчанию создаётся файл "loader.exe".

У себя проверил - лоадер создаётся нормально с приведенным выше скриптом (добавлен в аттаче).
Пишет: "No problems creating loader.exe".

Кстати, под какой системой запускается?
Пробуй версию из стартпоста, 2018-го года, - пользуюсь ею.
Должна, в принципе, нормально работать любая из версий. Новых, не 2000-го года.

Файл скрипта должен быть чисто текстовым, без UNICODE.
Это как бы подразумевается, - это же скрипт.
Вот так: { Атач доступен только для участников форума } - 1.rpp



--Добавлено--

Кстати, в современной версии в том числе поправлена и работа с текстом скрипта - допускаются пробелы в аргументах.
В оригинальной версии требования были строгие, пробелы не допускались.
Сейчас можно, например, и вот так:
Code:
  1. a=401000/83FFFF/8B,55,F4,58,E8,?,?,?,?,75,0C,C7,83/8B,55,F4,58,E8,?,?,?,?,75,00,C7,83:
и вот так:
Code:
  1.     a   =  401000  / 83FFFF /        8B ,55 ,F4,58,E8  ,?,?,?,?  ,75,0C,C7,83 / 8B,55,F4,58,E8   ,?,?,?,?  ,75,00,C7,83  :



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

Создано: 23 февраля 2018 14:34 New!
Цитата · Личное сообщение · #13

dosprog пишет:
без UNICODE

Ну не знаю, открыл приаттаченный файл в Бреде 2, где отродясь не было никакого юникода, опять та же ошибка, ругается на line 5, а ее, если правильно понимаю, ваще не существует, строк всего четыре. Другой комп, система XP SP3. Наверное, нечистая сила Если не трудно, скомпили в виде exe:
T=2000:
B=400000:
a=730000/8BFFFF/8B,55,F4,58,E8,?,?,?,?,75,0C,C7,83/8B,55,F4,58,E8,?,?,?,?,75,00,C7,83:
$
а я попробую как это будет работать.


Ранг: 307.7 (мудрец)
Статус: Участник

Создано: 23 февраля 2018 15:06 New!
Цитата · Личное сообщение · #14

GMAP
Ошибка в том, что используешь RPP.ver.1.5.1.English.zip, а нужно RPP.ver.1.5.1.005p.English.rar/RPP.ver.1.5.1.006p.English.rar.

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


Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 23 февраля 2018 15:07 · Поправил: dosprog New!
Цитата · Личное сообщение · #15

GMAP пишет:
попробую как это будет работать.


{ Атач доступен только для участников форума } - loader.exe

Добавлено спустя 7 минут
mysterio пишет:
используешь RPP.ver.1.5.1.English.zip

)) Похоже, да. Если текст об ошибке выводится в месиджбоксе, то это старая версия 2000-го года, она такие конструкции, как "a=", не понимает.
Новая v.1.5.1.006p сообщения выводит только в консоли.

GMAP, текст в консоли или в месиджбоксе?

--Добавлено--
Ну, ясно. А то удивился, что RPP путает номера строк скрипта с ошибками. Такого, вроде бы, быть не должно.
В современной версии.


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

Создано: 23 февраля 2018 15:19 New!
Цитата · Личное сообщение · #16

dosprog
Спасибо, все ОК! Крайне нужная фича и, похоже, уникальная.
mysterio
Совершенно верно! Благодарю за подсказку, попробовал, все получилось как и у dosprog. Все вопросы решены.

Добавлено спустя 4 часа 33 минуты
dosprog
Забыл спросить есть ли ограничения и какие на количество обрабатываемых байт в лодырях? Как редактируемых напрямую: P=..., так и S&R: a=...

Ранг: 408.5 (мудрец)
Статус: Участник

Создано: 24 февраля 2018 00:43 · Поправил: dosprog New!
Цитата · Личное сообщение · #17

GMAP пишет:
Спасибо, все ОК! Крайне нужная фича и, похоже, уникальная.

Да, это так.
Программа вышла в паблик как раз после обсуждения этой фичи в теме лоадеров у ManHunter'a.
Ссылку не дам - туда у меня сейчас нет доступа.


--Добавлено--

Это здесь --> Link <--

--Конец добавленного--



Добавлено спустя 12 минут
GMAP пишет:
есть ли ограничения и какие на количество обрабатываемых байт в лодырях? Как редактируемых напрямую: P=..., так и S&R: a=...

Есть.
Под двоичные данные патчей зарезервировано 8Kб (2000h байт).
(Поэтому, кстати, неупакованный лоадер выглядит "рыхлым". Много "пустого" места).
Вместе с тем, в одной строке типа "p=" можно задать до 1'0000h байтов OLD + 1'0000h байтов NEW.
То есть, фактически, только одной строкой "p=" можно превысить общий лимит данных. Теоретически.
Если суммарный размер данных в скрипте будет превышать эти лимиты, то будет выдано сообщение
об ошибке на этапе чтения скрипта/создания лоадера. - Лоадер создан не будет.
В оригинальной версии 1.5.1 2000-го года под данные патчей было зарезервировано на порядок меньше места
(что-то около 200h байтов, можно уточнить в архивных сорсах).
Как вариант, - можно было бы сделать весь пакет данных патча в виде оверлея, что существенно
увеличило бы их предельный размер, но это решение было признано сулящим головняк и принято не было.
Кроме того, оверлей такого файла не сжимался бы упаковщиками EXE.
- А если данных патча поболе 8Кб, то лучше уже не возиться с RPP, а запатчить сам исполняемый файл.
Пожалуй, что так.

(
Напрягать новый RPP на объёмные патчи приходилось только пару раз,
нового размера данных хватило с избытком,
- но делалось это больше из спортивного интереса
).

Таким образом, RPP 2018-го года это уже немного [и даже очень] другая программа, чем RPP 2000-го.
Но с концептуальной преемственностью. Продукт эволюции.
- Потому и сохранено оригинальное название программы.
К тому же лень было перебивать копирайты, да и не гоже.

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

 eXeL@B —› Софт, инструменты —› R!SC's Process Patcher -- RPP

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS