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

 eXeL@B —› Вопросы новичков —› Loader
Посл.ответ Сообщение

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

Создано: 31 мая 2006 16:33
· Личное сообщение · #1

Вопрос: У меня есть очень клевенькая игрушка Street War (Constructor Underground). Дело в том, что выпустили её ещё в эпоху 95ых... есть лоадер, который что-то загружает в памяти и игрушка запускается на русском... в директории лежит файлик Text.eng в котором собственно и есть перевод... просто подменить этим файлом аналогичный англицкий не могу, т.к. все запакованно в архивах которые открыть не представляется возможным... А лоадер не запускается под ХР... так вот: можно ли как-то узнать, что он правит??... а то на англицком совсем не то...

f180_31.05.2006_CRACKLAB.rU.tgz - sw.exe



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

Создано: 31 мая 2006 19:42
· Личное сообщение · #2

SniperOK пишет:
все запакованно в архивах которые открыть не представляется возможным.

Почему что за архивы?
SniperOK пишет:
А лоадер не запускается под ХР... так вот: можно ли как-то узнать, что он правит??...

Да пишет что не может создать процесс (хотя что ему создавать это ж один лоадер) В нём указывается мол лицензия правильная и чё то ещё



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

Создано: 01 июня 2006 09:47
· Личное сообщение · #3

Программа пытается создать процесс на основе _sw.exe, вытаскивает из kernel32.dll адреса функций
LoadLibraryA, GetProcAddress Затем с их помощью грузит patch.dll и извлекает из нее адрес
процедуры InitPatch и начинает править память процесса : ReadProcessMemory/WriteProcessMemory
Далее следует ResumeThread и вызов подпрограммы. Можно еще чуть-чуть понять, но без patch.dll и _sw.exe - это мартышкин труд



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

Создано: 01 июня 2006 17:09
· Личное сообщение · #4

crazyalex пишет:
patch.dll и _sw.exe


540 кб в архиве... че то я туплю... сорри =)
rapidshare.de/files/21932716/Street_Wars.rar.html

crazyalex пишет:
Почему что за архивы?


некие .fil
даже не знаю что это... да и пираты видать тоже не знали раз патч сделали =)))



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

Создано: 03 июня 2006 11:21
· Личное сообщение · #5

SniperOK
Два вопроса есть:
1) Под 95-м(98) это работает ?!
2) Не мешало бы список файлов выложить. Кое-что я уже достал, но теперь прога _sw.exe после манипуляций с ее памятью и ResumeThread вылетает. И непонятно - то ли ей чего-то нехватает, то ли надо запускать под 98-м.
===============
И есть вопрос к спецам. Как подхватить в олли второй процесс, который по ResumeThread запускается.
Дело в том, что создается второй процесс( несмотря на название функции), а второй олли поцепить его можно уже после ошибки. Правда есть идея запустить его еще раз или с точки входа, но это все неправильно...




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 03 июня 2006 13:27 · Поправил: PE_Kill
· Личное сообщение · #6

Вообще официально ставишь бряк на тред (взять из КреатеТред(клава сдохла)). Запускаешь. Когда тред начнет работать, твой бряк отклинется. НО! В олли написано, что если ты хочешь отлаживать только один тред, то надо юзать ЮзерТрассировку. В общем читай мануал по олле (хотя я и без мануала нормально треды трассирую). Есть такое окно !Треды! (кде клава?!..) там можешь заморозить все треды, кроме интересующего (или кильнуть) и отлаживыть только его. Мне протев ЭгзеКриптора (твою мать ну где же клава) очень помогает...

-----
Yann Tiersen best and do not fuck




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

Создано: 03 июня 2006 15:34
· Личное сообщение · #7

tundra37 пишет:
Под 95-м(98) это работает ?!

Прекрасно работает...

tundra37 пишет:
Не мешало бы список файлов выложить. Кое-что я уже достал, но теперь прога _sw.exe после манипуляций с ее памятью и ResumeThread вылетает. И непонятно - то ли ей чего-то нехватает, то ли надо запуска

список того, что в директории...

\DATA\DATA.FIL
\FLICS\DATA.FIL
\GFX\DATA.fil
\PALETTES\ дребедень к делу не относящаяся...
\SETTINGS\ пара конфигов с настройками типа инсталл паз и т.п. ничего вразумительного
\SFX\ENG\DATA.FIL - вот в этот архив если поместить текст.енг все заработает на русском скорее всего...
\SFX\DATA.fil
\_sw.exe
\arial.fnt
\CMS16.DLL
\cms32_98.dll
\CMS32_NT.DLL
\micra.fnt
\mss16.dll
\mss32.dll
\mssb16.tsk - hmm...
\patch.dll
\SETUPREG.exe
\SMACKW32.dll
\sw.exe
\sw.idb - hmm...
\text.eng - собственно то, чем и заменяется оригинальный текст.енг



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

Создано: 03 июня 2006 15:57
· Личное сообщение · #8

Ситуация такая : скачал игру(английскую). Под 2000-м русификатор естественно вылетает.
Под 98-м русификатор запускает игру, но т.к. нужных файлов нет, то накрывается.
Точно нужны файлы : arial.fnt micra.fnt (эти имена есть внутри русификатора) и text.eng

Желательно cms32_98.dll (в моей 95) и может пригодится sw.idb.

Русификатор звука есть здесь :
zoneofgames.ru/index.php/gb/game/506

SniperOK пишет:
Прекрасно работает...

Тогда подозрение на неправильно работающие ReadProcessMemory/WriteProcessMemory ,
точнее наверно параметры разные у них в NT и 98. Копай в этом направлении.
Возможно, когда получу файлы, то больше смогу сказать.



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

Создано: 03 июня 2006 18:51
· Личное сообщение · #9

вот все, что есть в директории кроме _sw.exe и sw.exe
rapidshare.de/files/22105327/SWFiles.rar.html
у меня была пиратка уже и со звуком и с текстом...

tundra37 пишет:
Тогда подозрение на неправильно работающие ReadProcessMemory/WriteProcessMemory


я пытался понять, что они делают, но нифига =)



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

Создано: 04 июня 2006 10:02 · Поправил: tundra37
· Личное сообщение · #10

SniperOK пишет:
я пытался понять, что они делают

Это функции для чтения и записи памяти "чужого" процесса - внешний патчер. Применяются в loader-ах.
Поищем по форуму и Интернет-у насчет их особенностей в 98-м.
SniperOK пишет:
у меня была пиратка уже и со звуком и с текстом...

Ну звук значит уже загнали в data.fil Скорее всего и тексты там же. А loader просто защиту снимает и проверки по CRC для файлов ресурсов.
+++++++++++++++++++++++++
1) Все подтвердилось : озвучка загнана в data.fil , а вот текст видимо в большом файле - поэтому решили просто пропатчить экзешник. Выставлять напоказ перепаковщик ресурсов пираты не захотели по понятным причинам.
2) Выхода два : подправить алгоритм записи или в 98-м сдампить экзешник и изготовить пропатченный _sw.exe Кстати можешь просто запустить _sw.exe - озвучка будет русская, а надписи - аглицкие. Проверь играбельность - у меня в 2000-м "задумывается" периодически надолго - играть трудно.
3) У меня оказалась озвучка другая - поэтому, если не трудно, сбрось файл sfx\eng\data.fil на рапиду



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

Создано: 04 июня 2006 14:34
· Личное сообщение · #11

Блин... 12 метров =)) я просто на диал-апе... но я скину... щас денег мало, не успею...
насчет играбельности - поставь совместимость с 98... тормоза прекратились... кса на счет дампа тут я че то не знаю =)) но попробую... без text.eng лоадер не работает... ещё один вариант... может он грузит первые скажем 100 хексов, там где написано: "Original eng file" из text.eng и сравнивает с загруженным оригинальным text.eng из архива... ведь если это архив, то вероятнее всего файл просто лежит в оперативке... может это и есть ReadProcessMemory, а потом правит его на то, что требуется из русского текста командой WriteProcessMemory... может и не так конечно =)



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

Создано: 04 июня 2006 18:31
· Личное сообщение · #12

SniperOK
Все нормально. Если на диалапе, то не надо - перебьюсь своей озвучкой. А текст можно подогнать.
Короче в NT лоадер не работает, т.к. надо секцию на запись открывать. Я решил эти не заморачиваться и посмотрел, что там патчится. Лоадер встраивает в экзешник загрузку и вызов InitPatch из patch.dll
и все. Я уже встроил и проверил под олли, теперь никак не могу вспомнить, как секцию расширить
Сейчас по форуму поищу и приаттачу другой лоадер - универсальный.
=========================
В patch.dll лежит подмена такого сорта : пропатчена пара вызовов на переходы в patch.dll Скорее всего просто анализируется, что тащат из data.fil и когда нужны три файла - их берут русские, а остальное тащат из data.fil При случае проверю свою догадку.



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

Создано: 05 июня 2006 10:22
· Личное сообщение · #13

Сделал новую секцию с помощью lordpe и долго и упорно ждал, когда он удлинит экзешник.
Пришлось Winhex применять - или lorpe такого делать не умеет, или я .
С трудом научился делать лодер через dup, но в ем не срабатывает ReadProcessMemory.
Пришлось все-таки остановится на патче. Запускаешь его и потом юзаешь пропатченный _sw.exe


22cb_05.06.2006_CRACKLAB.rU.tgz - street.wars-patch.exe



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

Создано: 05 июня 2006 12:09
· Личное сообщение · #14

Блин! Спасибо тебе огромное... вообще супер помог... а у меня так ничего путного и не вышло... Если что надо - обращайся =)) thx thx thx!!!



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

Создано: 05 июня 2006 15:48
· Личное сообщение · #15

SniperOK пишет:
а у меня так ничего путного и не вышло

Ну во-первых надо было в олли смотреть - там все подписано При вызове ReadProcessMemory/WriteProcessMemory параметры расписаны. Конечно опыт мне помог не смотреть "лишние" параметры. Например, сегодня разбираясь с лодером с удивлением увидел непонятный параметр. WriteProcessMemory в неправильном лодере вызывается 3 раза, патчит 6,116 и опять 6 байт.
6 и 6 - это JUMP приправленные байтом 3 зачем-то. 116 это как раз вызов InitPatch из pach.dll
Тут конечно помог опыт мучений с олли. Надо высветить буфер в окне памяти и по правой мышке вызвать disassemble. Т.к. я уже знал что лодер определил адреса функций LoadLibraryA, GetProcAddress , то манипуляции с двумя ячейками были понятны - просто вызов этих функций. Кроме этого вначале делается патч команды JUMP на точке входа в первоначальное состояние. После моих мучений с лодером я понял его смысл - мне надо добавить JMP на мой патч, а в самом патче восстановить, то что порушил.
Я же упорно правил PE-заголовок, который уже отработал.


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


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