Сейчас на форуме: bartolomeo (+4 невидимых) |
eXeL@B —› Вопросы новичков —› Loader |
Посл.ответ | Сообщение |
|
Создано: 31 мая 2006 16:33 · Личное сообщение · #1 Вопрос: У меня есть очень клевенькая игрушка Street War (Constructor Underground). Дело в том, что выпустили её ещё в эпоху 95ых... есть лоадер, который что-то загружает в памяти и игрушка запускается на русском... в директории лежит файлик Text.eng в котором собственно и есть перевод... просто подменить этим файлом аналогичный англицкий не могу, т.к. все запакованно в архивах которые открыть не представляется возможным... А лоадер не запускается под ХР... так вот: можно ли как-то узнать, что он правит??... а то на англицком совсем не то... f180_31.05.2006_CRACKLAB.rU.tgz - sw.exe |
|
Создано: 31 мая 2006 19:42 · Личное сообщение · #2 SniperOK пишет: все запакованно в архивах которые открыть не представляется возможным. Почему что за архивы? SniperOK пишет: А лоадер не запускается под ХР... так вот: можно ли как-то узнать, что он правит??... Да пишет что не может создать процесс (хотя что ему создавать это ж один лоадер) В нём указывается мол лицензия правильная и чё то ещё |
|
Создано: 01 июня 2006 09:47 · Личное сообщение · #3 Программа пытается создать процесс на основе _sw.exe, вытаскивает из kernel32.dll адреса функций LoadLibraryA, GetProcAddress Затем с их помощью грузит patch.dll и извлекает из нее адрес процедуры InitPatch и начинает править память процесса : ReadProcessMemory/WriteProcessMemory Далее следует ResumeThread и вызов подпрограммы. Можно еще чуть-чуть понять, но без patch.dll и _sw.exe - это мартышкин труд |
|
Создано: 01 июня 2006 17:09 · Личное сообщение · #4 |
|
Создано: 03 июня 2006 11:21 · Личное сообщение · #5 SniperOK Два вопроса есть: 1) Под 95-м(98) это работает ?! 2) Не мешало бы список файлов выложить. Кое-что я уже достал, но теперь прога _sw.exe после манипуляций с ее памятью и ResumeThread вылетает. И непонятно - то ли ей чего-то нехватает, то ли надо запускать под 98-м. =============== И есть вопрос к спецам. Как подхватить в олли второй процесс, который по ResumeThread запускается. Дело в том, что создается второй процесс( несмотря на название функции), а второй олли поцепить его можно уже после ошибки. Правда есть идея запустить его еще раз или с точки входа, но это все неправильно... |
|
Создано: 03 июня 2006 13:27 · Поправил: PE_Kill · Личное сообщение · #6 Вообще официально ставишь бряк на тред (взять из КреатеТред(клава сдохла)). Запускаешь. Когда тред начнет работать, твой бряк отклинется. НО! В олли написано, что если ты хочешь отлаживать только один тред, то надо юзать ЮзерТрассировку. В общем читай мануал по олле (хотя я и без мануала нормально треды трассирую). Есть такое окно !Треды! (кде клава?!..) там можешь заморозить все треды, кроме интересующего (или кильнуть) и отлаживыть только его. Мне протев ЭгзеКриптора (твою мать ну где же клава) очень помогает... ----- Yann Tiersen best and do not fuck |
|
Создано: 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 - собственно то, чем и заменяется оригинальный текст.енг |
|
Создано: 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. Копай в этом направлении. Возможно, когда получу файлы, то больше смогу сказать. |
|
Создано: 03 июня 2006 18:51 · Личное сообщение · #9 |
|
Создано: 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 на рапиду |
|
Создано: 04 июня 2006 14:34 · Личное сообщение · #11 Блин... 12 метров =)) я просто на диал-апе... но я скину... щас денег мало, не успею... насчет играбельности - поставь совместимость с 98... тормоза прекратились... кса на счет дампа тут я че то не знаю =)) но попробую... без text.eng лоадер не работает... ещё один вариант... может он грузит первые скажем 100 хексов, там где написано: "Original eng file" из text.eng и сравнивает с загруженным оригинальным text.eng из архива... ведь если это архив, то вероятнее всего файл просто лежит в оперативке... может это и есть ReadProcessMemory, а потом правит его на то, что требуется из русского текста командой WriteProcessMemory... может и не так конечно =) |
|
Создано: 04 июня 2006 18:31 · Личное сообщение · #12 SniperOK Все нормально. Если на диалапе, то не надо - перебьюсь своей озвучкой. А текст можно подогнать. Короче в NT лоадер не работает, т.к. надо секцию на запись открывать. Я решил эти не заморачиваться и посмотрел, что там патчится. Лоадер встраивает в экзешник загрузку и вызов InitPatch из patch.dll и все. Я уже встроил и проверил под олли, теперь никак не могу вспомнить, как секцию расширить Сейчас по форуму поищу и приаттачу другой лоадер - универсальный. ========================= В patch.dll лежит подмена такого сорта : пропатчена пара вызовов на переходы в patch.dll Скорее всего просто анализируется, что тащат из data.fil и когда нужны три файла - их берут русские, а остальное тащат из data.fil При случае проверю свою догадку. |
|
Создано: 05 июня 2006 10:22 · Личное сообщение · #13 Сделал новую секцию с помощью lordpe и долго и упорно ждал, когда он удлинит экзешник. Пришлось Winhex применять - или lorpe такого делать не умеет, или я . С трудом научился делать лодер через dup, но в ем не срабатывает ReadProcessMemory. Пришлось все-таки остановится на патче. Запускаешь его и потом юзаешь пропатченный _sw.exe 22cb_05.06.2006_CRACKLAB.rU.tgz - street.wars-patch.exe |
|
Создано: 05 июня 2006 12:09 · Личное сообщение · #14 |
|
Создано: 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 |