IPB

Добро пожаловать, гость ( Вход | Регистрация )

История благодарностей участнику -=CHE@TER=- ::: Спасибо сказали: 311 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
Jun 14 2018, 17:15 Работа с отладчиком
Ты прям хочешь руководство в две строчки. Так не бывает.
Короче (для x86 - 32х битных приложений) - только самое основное:
1) Скачиваешь Ольку 1.10 (слева в меню "Odbg110.zip").
2) Скачиваешь CommandBar для неё: CommandBar
3) Распаковываешь Ольку, распаковываешь CommandBar и кидаешь в каталог к Ольке.
4) Запускаешь и открываешь там свой исполняемый файл (F3 или File - Open).
5) Т.к. ты брезгуешь нормальными системами, то запускаешь Ольку от имени Администратора, плюс помни, что первый вылет в ней будет не на OEP, а где-то в дебрях системы, ибо Windows Vista и выше - гоумно. Так что делай сразу F9, чтобы оно до OEP дошло.
6) Теперь жмёшь Ctrl+D или переключаешься на CommandBar снизу.
7) Пишешь там и жмёшь Enter:
bpx CreateFileA
Убедись, что там появилось "+ Breakpoint is set" или вводи CreateFileW или ещё чем там игра файлы открывает.
8) Отпускаешь программу на выполнение (F9). Если там нет антиотладочных приёмов, то она должна выпасть на вызове CreateFileA или на чём ты бряк ставил.
9) Когда выпадет - смотри окно справа-снизу. Это стек - смотри там имя открываемого файла. Жмёшь F9, пока там не будет интересующий тебя файл.
10) Теперь делаешь F8 - Step over, чтобы функция открытия выполнилась. Смотришь окно в верхнем-правом углу - это регистры, тебя интересует eax - это дескриптор только что открывшегося файла. Если там -1 (0xFFFFFFFF), значит файл не открылся - смотри в том же окне сообщение об ошибке (LastErr).
11) Теперь ты знаешь дескриптор файла. Ставишь бряк на:
bpx ReadFile
и отпускаешь на выполнение F9.
12) Выпал на чтении файла - смотри в стеке какой там дескриптор. Если твой - значит читается тот файл, которые тебя интересует, иначе - F9. Если файл твой - щёлкай правой кнопкой мышки в стеке на втором параметре сверху (адрес буфера) и выбираешь там "Follow in Dump" (третий пункт снизу). Теперь у тебя в окне слева-снизу показано начало памяти, куда будет прочитан файл.
13) Читаешь файл - F8. Теперь в окне памяти смотришь, что прочиталось именно то что нужно (можешь ещё на всякие SetFilePointer бряков понаставить, если файл не сначала читается, но больше лишних телодвижений будет). Ставишь на эту память бряк - щёлкаешь на первом байте левой клавишей, затем со Shift'ом щёлкаешь на каком-нибудь ещё, чтобы они выделились, затем правой клавишей на выделении и выбираешь Breakpoint - Memory, on access. Можешь выбрать на "on write", будет быстрее, но это только при условии, что буфер расшифровывается сам в себя, а не записывается куда-то ещё. К тому же "on access", позволит перехватить момент, когда прочитан первый байт, чтобы понять что дальше с ним делается.
14) Отпускаешь программу на выполнение (F9) и, теоретически, ты должен выпасть в месте, где память читают и расшифровывают.
15) Обрати внимание, что есть программы написанные наркоманами, так что там перед расшифровкой блок память могут таскать между буферами: buf1 - buf2 - buf3. Тогда бряк выпадет на копировании памяти из первого буфера во второй. А расшифровка, как ты понимаешь, будет третьего. Т.к. копирование выполняется в большинстве случаев стандартными средствами, то смотри регистр edi - это адрес памяти назначения. Переходим туда (правой клавишей мышки - Follow in Dump), и, после копирования, ставим там бряк на это место памяти. Этот бряк добавится к уже существующему, так что остальные можешь удалить, если не нужны, чтоб лишний раз не дёргало - Breakpoint - Remove memory breakpoint (после этого ставишь новый бряк, ибо эта функция удаляет все бряки).
Будут вопросы - задавай. Только с конкретными деталями что именно не получается.
Siberian GRemlin,
May 28 2018, 10:16 Программы запуска
Из того, что я видел - по степени убывания частоты использования:
1) Зачастую launcher передаёт game определённый параметр командной строки. Ловится очень просто - заменяешь game свой программой, которая сообщает с какими ключами её запустили.
2) Пару раз видел как launcher создавал ключ в реестре, запускал game, та проверяла ключ, если он есть - запускалась, если нет - выходила. Уже не помню подробностей, кто именно удалял ключ после запуска - game или launcher. Ловится такое дело через RegMon.
3) Ещё было - создавался/изменялся файл настроек с определённым значением. Это можно отследить через FileMon.
4) Какая-то программа была, которая запускала свой основной модуль в спящем режиме, что-то там расшифровывала в уже загруженном в памяти процессе, и только потом делала ResumeThread(). При обычном запуске там то ли точка входа другая была, то ли команды по адресу точки входа были обычным завершением работы, так что без launcher сама game тупо без всяких сообщений сразу выходила.
5) Также попадалось совсем дикое, но это под DOS - launcher перехватывал прерывания, на них садились сервисные функции игры, а уже потом запускался game, который проверял есть ли на этих прерываниях нужный сервис.
Может, что-то ещё забыл, но это основное.
Siberian GRemlin,
Nov 30 2017, 16:37 STUNS - STupid UNcompreSsor
Собрал новую версию v1.0.

Русским языком:
- нафиг дропнут старый код и всё переписано начисто;
- GCC 3.2 с хаками вместо MSVC 6.0 - меньше занимает;
- обновлены puff и blast из последних исходных кодов zlib;
- алгоритмы UCL/NRV (ucl2b and ucl2d) выброшены как малоиспользуемые;
- изменён текст вывода сообщений: смещение (в hex), размер (десятичный), алгоритм, информация;
- новая опция, чтобы всё распакованное сохранялось в один файл (Corak просил);
- новая опция, позволяющая ничего не сохранять - давно надо было такое сделать: сначала всё настраиваешь, а когда видишь, что будет распаковываеться только то что нужно, то уже распаковываешь.

Т.к. переписывал начисто и заново, то возможны появления ошибок в самых неожиданных местах.
Если заметили - сообщайте.
Старую версию v0.5 оставил кому нужна в первом сообщении.
Corak,
Nov 17 2017, 11:31 Open Source Projects
Короче, меня все и всё достало, так что публикую свои правки в открытую.

Первая сторона конфликта: Resident Evil 3: Restoration Project.
Основной сайт (обновляется редко).
Основное обсуждение здесь.
Тут ещё.

Вторая сторона конфликта:
Сайт.
Форум.

Т.к. дерьмо, наверняка, ещё полетит в ближайшее время, то сообщаю что я уожу из проекта и из конфликта по Resident Evil 3: Restoration Project.
Все свои правки я делаю открытыми и публичными. Каждый может:
- украсть и присвоить их себе и заявить что он автор;
- продавать в GOG / Steam / CAPCOM / куда угодно;
- использовать по любому другому усмотрению.
Я разрешаю - мне глубоко фиолетово.

Все дальнейшие проблемы меня не касаются. Обе стороны вместо того чтобы найти компромисс предпочитают устроить скандал и поливать друг друга дерьмом - мне это всё нахрен не сдалось и я не хочу в этом участвовать.
Поэтому если кто-то попытается втянуть меня в этот скандал, то я легко и непринуждённо утоплю в их собственном дерьме любую сторону конфликта.
Больше комментариев не будет. Все свободны.

Все правки ниже работают только для USA версии ResidentEvil3.exe (1 273 856 байт от 2000.10.02). Для RE3_MERCE.EXE адреса переменных будут теми же, но секция кода чуть больше, поэтому смещения для дополнительного кода будут другими. Я не буду их здесь описывать - кто захочет сам разберётся.

1) Сдвиг текста с 6 до 34 пикселей слева как в PS-версии:
[codebox]0002DAB0: 06 22 ; статичные области, типа всякого мусора на полу
0002DB0D: 06 22 ; активные объекты: пиш.машинка, двери с ключом и т.д.
0002F56C: 06 22 ; line1: init // Farewell to my life.
0002F584: 06 22 ; line2: init // Farewell to my home.
0002F5A9: 06 22 ; line1: show
0002F5BB: 06 22 ; line2: show
0003E883: 06 22
0003EF7F: 06 22 ; текст на электростанции
000495E9: 06 22
0002E1BD: 02 1E ; текст для головоломок[/codebox]

2) Фикс, чтобы использовался каталог "zmovie", если в bio3.ini нет ключа "Movie" в секции "General".
[codebox]; empty string => "zmovie/bdino.str"
00004082: 80 E6
00004083: 49 BA
00004084: 53 51
; "/" => 0 in "zmovie/bdino.str"
; от трейлера DinoCrisis
; (отсутствует и не используется в PC-версии игры)
0011BAEC: 2F 00[/codebox]

3) Дололнительный код - публикуется впервые и никто такого ещё не делал - полный сброс игры по F9 в главное меню из любого места (даже из FMV роликов) с исправлением состояния и сбросом необходимых флагов, а также переключение автоприцела по F1.
[codebox]; extend .text section size
; VirtSize => PhysSize (0010847A => 00109000)
; for additional code
000001F8: 7A 00
000001F9: 84 90
; call to additional code
00004908: 25 E8
00004909: FF 6F
0000490A: FF 4B
0000490B: 00 10
; additional code
0010947C: 00 25
0010947D: 00 FF
0010947E: 00 FF
00109481: 00 66
00109482: 00 3D
00109483: 00 45
00109484: 00 9C
00109485: 00 75
00109486: 00 07
00109487: 00 80
00109488: 00 35
00109489: 00 BE
0010948A: 00 28
0010948B: 00 A6
0010948D: 00 40
0010948E: 00 66
0010948F: 00 3D
00109490: 00 46
00109491: 00 9C
00109492: 00 75
00109493: 00 2C
00109494: 00 80
00109495: 00 25
00109496: 00 9B
00109497: 00 87
00109498: 00 A5
0010949A: 00 FD
0010949B: 00 66
0010949C: 00 C7
0010949D: 00 05
0010949E: 00 80
0010949F: 00 87
001094A0: 00 A5
001094A4: 00 C6
001094A5: 00 05
001094A6: 00 B4
001094A7: 00 28
001094A8: 00 A6
001094AA: 00 01
001094AB: 00 80
001094AC: 00 25
001094AD: 00 81
001094AE: 00 C8
001094AF: 00 A5
001094B1: 00 FB
001094B2: 00 80
001094B3: 00 0D
001094B4: 00 82
001094B5: 00 C8
001094B6: 00 A5
001094B8: 00 20
001094B9: 00 C6
001094BA: 00 05
001094BB: 00 5A
001094BC: 00 FD
001094BD: 00 A4
001094BF: 00 02
001094C0: 00 C3
; F1: 44 -> 45 new ID (40004 -> 40005)
001369F4: 44 45
; F9: 41 -> 46 new ID (40001 -> 40006)
00136A1C: 41 46[/codebox]
Код из блока additional code с комментариями:
[codebox]and eax, 00000FFFFh
cmp ax, 09C45h
jne @next
; toggle autoaim
xor b, [00A628BE], 040h
@next:
cmp ax, 09C46h
jne @quit
; drop radar flag
and b, [00A5879B], 0FDh
; drop invert state
mov w, [00A58780], 00000h
; set normal menu speed
mov b, [00A628B4], 001h
; drop unknown flag
and b, [00A5C881], 0FBh
; set hard reset bit
or b, [00A5C882], 020h
; stop playing FMV movies
mov b, [00A4FD5A], 002
@quit:
retn[/codebox]

4) Впервые во всём мире - пропуск анимации дверей для Resident Evil 3. Дело в том что на PC она абсолютно бесполезна, т.к. сначала грузится сцена (вся), затем анимация двери и только потом игра начинает её проигрывать и ждать нажатия кнопки вызывающей карту (с её помощью анимацию можно пропустить).
CODE
; animation door skip
0006975E: B9 00


5) Также прикладываю утилиты, которые я написал во время работы:
- ddrawold - попытка сделать враппер и решить проблему с патчами для сцен в низком разрешении (незаконченая разработка);
- re3frame - позволяет менять количество кадров в видеороликах в игре (т.е. длительность видеороликов - да оно там через задницу считается);
- flagtest - что-то типа ArtMoney, но позволяет менять битовые флаги игры - дело в том, что вся игра, по сути, это одна большая (и кривая) виртуальная машина, так что там не только какие-то определённые значения за что-то отвечают, но и байт или двойное слово может отвечать сразу за кучу параметров, если зажжены или погашены какие-либо биты.
Скачать можно здесь: re3tools.zip.

QUOTE
This page in web archives as proof: 1, 2.
useretail,
Apr 19 2017, 05:19 Software patches
QUOTE(useretail @ Apr 19 2017, 00:42) [snapback]4229[/snapback]
А почему не 2.95? Вроде она последняя из вторых...
Потому что после 2.81 туда засунули поддержку проигрывания видео и всё пропало (обрати внимание на постфикс Classic - это была последняя версия, из которой ещё не пытались комбайн сделать). Впрочем, я от 2.95 взял плагины для проигрывание трекерных форматов in_mod.dll - там пофиксили падение плагина, когда у тебя открыта информация о файле и файл закончил играть. А ещё я взял оттуда in_mp3.dll (обновил на всякий случай), он, вроде, даже .AAC должен проигрывать (во всяком случае в два раза толще обычного), но почему-то у меня он ничего не играет (просто не запускает на проигрывание файл и всё), поэтому без in_mp4.dll никуда.
useretail,
Mar 25 2017, 07:20 .DDS DirectX 10
Не совсем в тему, но всё ж.
.DDS (DirectDraw Surface) to .TGA texture converter v1.4
В самом низу страницы. Утилита конвертирующая .DDS в .TGA, основанная на ReadDXT от nVIDIA из DDS Utilities версии 8.30 от 2007 года. С новыми .DDS (DirectX 10+ и прочие) работать не будет! С исходными кодами на Си (VS C++ 6.0).
Вообще, утилиту писал 12 лет назад, тупо добавив в ReadDXT работу с маской "*.dds". Потом, когда появился The Compressonator и другие утилиты, я её с сайта убрал (лет 10, наверное, назад). Однако, примерно месяц назад со мной связался Aka Sektor и сказал что в сообществе мододелов для S.T.A.L.K.E.R. моей утилитой до сих пор пользуются. Попросил поглядеть что там с новыми файлами и прозрачностью - утилита, мол, на них не работает. Однако, исправить я ничего не мог, потому что там .LIB файл без исходных кодов, только с заголовочным файлом. Бибилиотека эта была у меня от версии DDS Utilities 6.74 - я обновил до 8.30 - это последняя на сайте nVIDIA (на сайте написано 8.31, но в библиотеке указано 8.30), до того как они болт на эту библиотеку положили. И тут выяснилось страшное: все .LIB файлы для 8.30 собраны под 7-ой студией, а у меня только 6-ая. Искать и собирать под 7-ку мне очень не хотелось, так что пришлось изрядно попариться (особенно с частью отсутствующих функций), чтобы собрать под 6-ку, но я всё ж собрал и теперь программа будет работать под любым Windows (см. исходные коды - там много интересного). К тому же к новой версии ReadDXT исходных кодов не было (не говоря уже о том, что .LIB переписали на классы) и часть .DDS файлов она не конвертировала, которые конвертировала старая верси 6.74. В общем, Aka Sektor мне присылал .DDS файлы которые неправильно конвертировались старой версией dds2tga или старой они конвертировались, а новой нет. В итоге, общими усилиями, собрали таки обновлённую версию, правда, Volume Mip Map я не проверял, ибо не на чем. И хотя утилита не поддерживает новых расширений .DDS, зато, как сказал Aka Sektor, она небольшая, шустрая и везде работает - за это мододелы её и ценят.
Я думал стоит здесь про это писать или нет, потом вспомнил, что Axsis как-то писал, что утилиты от nVIDIA более или менее правильно .DDS конвертируют, в отличие от многих других, поэтому решил всё же об этой утилите упомянуть - может кому-нибудь тоже пригодится.
Siberian GRemlin,
Mar 16 2017, 07:44 Прогресс и программы
Долго думал написать здесь или в Software Patches, но всё ж решил в этой теме, ибо там патчи чтобы починить, а тут чтобы тупо заставить работать. Короче, отказался у меня сегодня Skype запускаться с ошибкой:
QUOTE
Вы были отключены от сети потому что пользуетесь устаревшей версией Skype.
Как пишут сами разработчики версии 7.16 and below более не поддерживаются.
Т.е. они тупо блочат по номеру версии.
Ну, я тоже не будь дураком - запустил ArtMoney, сделал поиск строки "6.20" (моя версия Skype, где ещё не успели окончательно весь интерфейс испоганить). Нашлось что-то около 20-30 совпадений, но, как оказалось, достаточно было поменять лишь в первом "6" на "7" чтобы Skype благополучно продолжил работать. Сделал себе небольшую программку, которая запускает Skype, ждёт, пока в этом месте памяти (адрес фиксированный) не появится "6", патчит на "7" и выходит.
Кстати, для проверки поставил в песочнице Skype 7.17.0.106 (взять можно здесь) - тот, действительно, входит без проблем, но интерфейс уже успели угробить.
Siberian GRemlin,
Dec 31 2016, 08:42 С наступающим Новым годом!
И снова пора подводить итоги года, друзья.

В этом году нашему проекту исполнилось целых 10 лет - взят некоторый рубеж, так сказать.

За этот год у нас было не так уж много распаковщиков, в основном правили старые (иногда даже 10-ти летней выдержки), но лучше поздно чем никогда, верно?
Спасибо всем, кто не ленился писать комментарии, тестировать и сообщать об ошибках!

Самое главное - в этом году все наши нужды по финансовой части проекта взял на себя товарищ kampaster - наш казначей. Я по прежнему кое-что накалымливаю, а товарищи BLACK и sssss помогают закидывая на копилку. Не то чтобы много было, но мне как-то всё ж совестно все наши расходы целиком на казначея сваливать.
Большое спасибо всем, кто помогает нам в такое непростое время и делится своими сбережениями (очень хочется надеяться, что не последними)!

И, конечно же, спасибо всем нашим форумчанам, участникам команды CTPAX-X!
Я уверен, что мы много чего интересного и хорошего за этот год сделали.
Спасибо вам, друзья!

Хочу пожелать всем счастливого Нового Года!
А также вам и вашим близким исполнения всех ваших желаний!
Не жадничайте только сильно с желаниями, хорошо? (*улыбается*)
Пусть в Новом Году у нас у всех будут силы, желание и возможность для тех дел, которые мы не успели завершить в этом!
С Новым Годом!
Axsis,
Nov 23 2016, 15:03 Delphi, Asm, C, WinAPI, PHP, ...
QUOTE(-=CHE@TER=- @ Feb 13 2014, 14:49) [snapback]3648[/snapback]
Натолкнулся на то, что в нескольких играх используется LZSS, описанный в моём сообщении выше.
Но, есть одно отличие MS-LZSS (Microsoft LZSS) от классического LZSS (который, похоже, используется во многих играх), без которого на выходе получится не файл, а что попало.
Нашёл ещё одну вариацию - применялась в старых играх от Blizzard:
- Warcraft: Orcs and Humans
- Blackthorne
- Lost Vikings
В ближайшее время распаковщик на сайт добавлю (там нет имён и через флаги у размера / смещения файла определяется сжат он или нет). Кому интересно, описываю изменения в том алгоритме что я приводил ранее.

Вот эти строки:
CODE
FillChar(buff[0], $FFF + 1, 32);
I:=($FFF + 1) - 16;
...
J:=J + ((Len And $F0) ShL 4);
Len:=(Len And $0F) + 3;

Заменяются этими:
CODE
FillChar(buff[0], $FFF + 1, 0);
I:=0;
...
J:=J + ((Len And $0F) ShL 8);
Len:=((Len And $F0) ShR 4) + 3;

И всё.
Grom PE, Siberian GRemlin,
Oct 31 2016, 18:46 Полезные ссылки
Помнится товарищ jTommy 8 лет назад поделился исходными кодами GAP 1.28.
А последняя версия 1.32, если вы помните.
Так вот, полгода назад Валерий Анисимовский таки выложил исходные коды не только к последней версии GAP, но и видеофильтрам - GMFCore.
Game Audio Player v1.32 source codes
Game Media Formats Core Filters Package v1.00 source codes
Так что кому нужны алгоритмы распаковки видео и/или звука - может подглядеть.
Siberian GRemlin,
Aug 17 2016, 10:15 STUNS - STupid UNcompreSsor
Собрал новую версию v0.5.

Русским языком:
Натолкнулся на падение STUNS из-за minilzo, причём на потоке, где был, как оказалось, только deflate. Блин, давно надо было обновить все библиотеки распаковщиков. Также, на всякий случай, обновил UCL. Там, кстати, есть новые алгоритмы сжатия, типа NRV2E и NRV2E-99, но их тогда надо отдельными ключами командной строки добавлять - сейчас нет времени и желания с этим копаться, так что лишние файлы просто выкинул для уменьшения размера дистрибутива. Главное, что не падает больше. Все библиотеки в STUNS сейчас должны быть последних версий.
Axsis, Siberian GRemlin,
Jul 13 2016, 10:45 The Last Express Gold Edition
Ух, ты!
Первый раз вижу .EXE файл, который реально использует reloc'и!
$0054E2F8 => $00B0E2F8
Во всяком случае у меня оно сюда грузится.
Проверь у себя - такой же адрес будет или нет.
Если нет, то придётся тебе получать адрес, куда загружен процесс, затем прибавлять к нему $0014E2F8 ($0054E2F8 - $00400000), чтобы получить смещение до своей строки. Гугли как можно по ProcessInfo.hProcess или ProcessInfo.dwProcessId (PID) получить HMODULE / HINSTANCE (это как раз адрес загрузки).
Я попробовал строчку Arial заменить на Comic - вроде бы, ошибок нет, но и шрифт в меню и Credits не поменялся (во всяком случае на Comic не похож).
Возможно, Arial, он везде Arial, а Comic нужно было писать полным именем как "Comic Sans MS", поэтому и не сработало. Но WriteProcessMemory() возвращет True, так что всё отрабатывает без проблем.
Кстати, всё забываю сказать - у тебя дескрипторы текут - после ResumeThread() нужно обязательно его закрывать: CloseHandle(ProcessInfo.hThread); Закрытие дескриптора - это не завершение процесса.
Siberian GRemlin,
Jul 4 2016, 14:39 Кто чего слушает?
Kaleo - Way Down We Go (Official Video)
Kaleo - "Way Down We Go" (LIVE in a volcano)
Во втором клипе они реально в недра вулкана спустились. Правда уже недействующего. (*улыбается*)
Axsis,
Jun 26 2016, 18:28 The Last Express Gold Edition
Это просто адрес кода. Его можно посмотреть в HIEW или IDA например (это из другой программы):

.0040117A: E8D1FD0200 call ExitProcess ; KERNEL32

Вот это $0040117A и есть адрес в памяти загруженного процесса. Учти, что это виртуальный адрес, а не смещение в файле.

var buff, dw: DWORD;
...
if (ReadProcessMemory(pHandle, $0040117A, @buff, 4, @dw) = true) then
writeln(buff); // buff == $02FDD1E8
...

.EXE не используют relocations, так что для исполняемого файла адрес всегда будет абсолютный и одинаковый на любой системе.
А для .DLL тебе нужно будет к базе (GetModulaHandle() / LoadLibrary()) прибавлять относительный адрес (т.е. от начала модуля).
Вообще, проверить можешь - читаешь память по указаному адресу (ReadProcessMemory()) и смотришь "Arial" ли там. Если да - значит попал куда надо. (*улыбается*)
Siberian GRemlin,
Jun 26 2016, 13:00 The Last Express Gold Edition
QUOTE(Siberian GRemlin @ Jun 26 2016, 12:12) [snapback]4113[/snapback]
Печально, но ни один из вариантов не помог. Может игра как-то иначе субтитры выводит, не через эту функцию / DLL.
Наверное.
Насчёт .EXE и "Arial", попробуй так (малой кровью проверить):
1) Пишешь программу, которая через CreateProcess() создаёт процесс игры в спящем (CREATE_SUSPENDED) режиме.
2) Патчишь своё "Arial" в памяти (WriteProcessMemory()) на что нужно (не забудь права на память поменять и обратно - VirtualProtectEx()) или что ты там хотел изменить.
3) "Отпускаешь" процесс на исполнение через ResumeThread().
Если этот финт с ушами пройдёт (игра не проверят свой код в памяти и после изменения начала видеть русские буквы), то можно, в принципе, так в виде запускалки и оставить.
Siberian GRemlin,
Jun 26 2016, 11:22 The Last Express Gold Edition
Если не проверяется, то ок.
Попробуй, пока что, такое:

libcocos2d.dll
0005F0EC: 01 -> 00 ; DEFAULT_CHARSET (1) -> ANSI_CHARSET (0)

Если не поможет, то попробуй вместо 00 вписать CC - это RUSSIAN_CHARSET (204).

Если и так не сработает, значит в ту ветку, почему-то, управление не передаётся и можно попробовать перед самым созданием шрифта заменить качество на кодировку:

// это то, что мы выше меняли
.1005FCE9: C6 45 83 01 mov b,[ebp][-7D], 001 => mov b,[ebp+var_94.lfCharSet], 1

// а это - установка качества непосредственно перед вызовом CreateFontIndirect()
.1005FE64: C6 45 86 04 mov b,[ebp][-7A], 004 => mov b,[ebp+var_94.lfQuality], 4 ; (ANTIALIASED_QUALITY 4)
Т.е. меняешь 86 на 83 и вместо 04 пишешь 00 или CC (смещение начала этой инструкции 0005F264).
Шрифт, правда, вместо ANTIALIASED будет с обычным, простым, начертанием, зато с нужной кодировкой.
Siberian GRemlin,
Jun 25 2016, 21:03 STUNS - STupid UNcompreSsor
Собрал новую версию v0.4.
Описание на английском (спасибо Grom PE за его пруфрид, а также справки по командной строке!) и ссылку в первом сообщении обновил.
Пришлось правда в справке по ключам командной строки кое-чего тут и там подсократить, чтобы в стандартный экран 80x25 влезало. Вообще, хотел всё это ещё в октябре прошлого года выложить, но забыл.

Русским языком:
- появилась возможность задать смещение (только в hex) откуда сканировать, что помогает пропустить лишние данные в начале файла (по умолчанию 0 - с начала файла)
- появилась возможность задать максимальное количество файлов (например, 25) после распаковки которых программа завершает работу (по умолчанию 0 - неограниченно)
- наконец, появилась та штука, которую, видимо, планировал сделать ещё сам автор оригинальной программы - если вы помните, то ключи с именами алгоритма указываются просто и с "-" на конце если алгоритм нужно отключить; при этом т.к. по умолчанию все алгоритмы включены, то простое использование любого алгоритма без "-" на конце ничего не меняло; т.е. если в сканируемом файле использовался только один, скажем, deflate, то все остальные приходилось отключать:
stuns -pkware- -lzo- -ucl2b- -ucl2d- ...
что раздувало командную строку, да и раздражало набирать; теперь же достаточно написать:
stuns -deflate ...
и все остальные алгоритмы сами отключатся; если нужно два каких-то, то пишем:
stuns -deflate -pkware ...
будут использованы только deflate и pkware, а остальные отключатся - по-моему очень удобно.
Axsis, Siberian GRemlin,
Feb 7 2016, 13:45 Новости сайта
Друзья! Нам сегодня исполнилось 10 лет!
Поздравляю всех с этой круглой датой!
Кое-что я написал в новостях на главной, но хотелось бы вспомнить всю историю нашего проекта...

Начать, наверное, стоит с товарища Terminus'а - автора и хозяина сайта Extractor.ru - если бы не он, то, скорее всего, и нашего проекта не было бы, потому что Extractor.ru это не просто крупнейший, а единственный русскоязычный сайт по распаковке ресурсов. Практически все из нашей команды познакомились именно там. А уже потом, в 2006 году товарищ Blade вытащил меня с моей домашней странички CTPAX-CHEATER на народе на отдельный хостинг и домен второго уровня. Мало кто знает, но в то время у меня было всё очень сложно - я крутился на нескольких работах и только после полуночи у меня появлялось время чтобы заняться свежеоткрывшимся сайтом, ответить на почту людям, а рано утром снова вставать на работу... Blade буквально на ходу писал сайт, добавлял новые вещи, исправлял и менял уже написанное и отшлифовывал сайт насколько мог. В то же время нам помогал недавно снова вернувшися в наши ряды товарищ RAYN3, который влился в нашу команду разбираясь тогда с шифрованием архивов в русской версии Bloodrayne 2. У нас практически каждый день что-то менялось. Это было безумное время, но мы выдержали. А потом мы, я считаю, отлично заявили о себе с NFS Multimedia Converter'ом - нам всем есть чем гордиться, это была отлично выполненная и качественная работа - не многие коммерческие фирмы могут сделать подобные вещи на таком же уровне. У нас была пара ошибок, которые, к слову, от нас не зависили - кривая работа eaconv.exe с русскими путями и точками в имени файлов, а также кривопересобранный пиратский "sdat.viv", кажется, от NFS:U2, для которого пришлось добавлять поддержку в конвертере, но это всё детали. У нас всех были свои "5 минут славы", когда мы делали первыми, единственными и лучше всех. Но не только у нас всех, но и каждого по отдельности - Xplorer со своим ToWav и огромной помощью с другими вещами, jTommy со многими и многими полезными и уникальными утилитами, Siberian GRemlin с утилитами для работы .VP6 и своими отличными переводами и русификаторами, Grom PE с конвертером DMM2XM, прочими утилитами и помощью с другими вещами, Axsis - человек, уникальный тем, что несмотря на то, что практически не написав ни одного распаковщика помог разобрать не один зубодробительный формат от сложности которых реально можно было крышей двинуться. А ещё с нами были Alex - первый и единственный модератор форума, товарищи Bourn - nocd и другие полезные программы, angeld29 - помощь с распаковкой и дешифровкой Resident Evil 3 (у него, кстати, свой сайт имеется - Angel Death's page с разными программами). Считаю нужным упомянуть и товарища Xexys утилиты которого, после закрытия сайта товарища jTommy теперь хостятся у нас и мы не дали столь полезным программам кануть в Лету. Также было бы несправедливо забыть про наших форумчан: xkL0#J (поддержка сайта, активное в обсуждениях на форуме), Капитан Фокин (помощь и тестирование плагина CheckSum для FAR), nickolayer (активное обсуждение на форуме), Raf-9600 (nocd для NFS2, Disciples: Sacred Lands, Star Wars: Galactic Battlegrounds music fix), useretail (активное обсуждение на форуме), geminiYO (помощь с конвертером для NFS4).
А ещё хочется сказать спасибо участникам форума Extractor.ru: конечно же Terminus'у, а также VAG (eaconv.exe, unepf и множество других утилит), CrOm (плагин к FAR для распаковки игровых ресурсов), John_Modest (полезнейшие утилиты для игр серии Silent Hill), Guru (первый конвертер для NFS:U), а также многим-многим другим!

Прошу простить, если забыл чьи-то заслуги или даже кого-то - сложно вспомнить всё, что было за эти 10 лет и объять необъятное.

Спасибо всем, кто так или иначе был с нами за это время! Без вас всё было бы иначе, а возможно и не было бы совсем ничего!
Axsis, Siberian GRemlin,
Feb 4 2016, 18:29 Новости сайта
Друзья!
К нашей команде примкнул, отлучившийся на 10 лет по жизненным обстоятельствам, товарищ RAYN3!
Кто-то, возможно, не в курсе кто это - посмотрите страницу "О проекте" на основном сайте. (*улыбается*)
Прошу любить и жаловать!
RAYN3,
Oct 2 2015, 15:08 !Вирусы!
Всё, я так больше не могу - мучительно хочется кому-нибудь в глаз дать, но не знаешь с кого начать...
Прошу отнестись серьёзно к тексту ниже, т.к. он касается всех.

Итак, с чего бы начать?.. Позавчера товарищ Siberian GRemlin прислал мне на почту письмо (за что ему спасибо), сказав что он не может зайти на мой сайт (ctpax-cheater) т.к. его блокирует Интернет-обозреватель.
Кто не знал - современные оборзеливатели тягают откуда-то список "плохих сайтов" и если ваш сайт туда угодил, то пользователи зайти к вам не смогут. Я современными программами не пользуюсь, ибо хрень на палочке, так что об этой проблеме не знал. Стал искать кто эти списки составляет - тоже, кстати, нетривиальная задача, ибо кто этим только не занимается. Вышел вот сюда:
https://www.stopbadware.org/clearinghouse/search
Вбил туда адрес своего сайта и узнал, что мой сайт аж с марта (!) в блокировке из-за какого-то ThreatTrack. Нагуглил их сайт:
http://www.threattracksecurity.com/resourc...ubmissions.aspx
Зашёл в "Blocked website" и объяснил, что у меня нет никаких вирусов и прочей фигни - потрудитесь объяснить, за что вы мой сайт заблокировали. Сегодня опять зашёл на stopbadware.org и смотрю - с моего сайта блокировка снята (1 октября - когда на ThreatTrack написал). Но теперь в истории моего сайта есть запись, что он был в блокировке с марта по октябрь. Это, конечно, не судимость, но очень неприятно.
А теперь то, что меня ОСОБЕННО БЕСИТ. Я проверил свой сайт на трёх сервисах:
virustotal.com/en/url/...
google.com/safebrowsing/diagnostic...
urlvoid.com/...
И только VirusTotal.com сказал, что мой сайт был проверен в марте (всё совпадает) и 1 (ОДИН!) антивирус что-то там нашёл - чёртов BitDefender! Самое главное - я сделал ещё раз проверку сайта на VirusTotal.com и там больше ничего не нашлось - сайт прошёл проверку всеми антивирусами.

Вы понимаете что происходит?
- какие-то уроды пишут кривой антивирус BitDefender, который всё считает вирусами;
- кто-то, на каком-то сервисе, отправляет мой сайт на проверку;
- мой сайт блокируется 1 (одним!) куском не буду говорить чего, но это был BitDefender;
- из-за 1 (одного!!!) ложного срабатывания мой сайт попадает в чёрный список, который непонятно кто распространяет и непонятно кто составляет;
- и теперь хозяину сайта, который об этом всём ни сном ни духом, нужно где-то и как-то искать кто, когда и как занёс его сайт в этот чёртов чёрный список, чтобы оттуда удалиться;
- но самое главное - хоть тебя и убрали из списка, но история о том что твой сайт был в блокировке так и останется - и это при том, что блокировка была из-за ЛОЖНОГО срабатывания!!!

Я понимаю что борьба с вирусами, фишинговыми сайтами и прочее и прочее. Но это уже маразм какой-то. Если пользователь дебил, то можно сколько угодно защищать его от подобных сайтов - он всё равно туда залезет. Зато страдают все остальные. И, вообще, благими делами вымощена дорога известно куда. На данный момент Интернет уничтожают не столько вирусы и фишинговые сайты, сколько антивирусные компании блокирующие всё подряд.
Люди, что с вами не так?!
Siberian GRemlin,
Sep 12 2015, 11:56 Полезные ссылки
QUOTE(Siberian GRemlin @ Nov 11 2009, 05:54) [snapback]2815[/snapback]
Blat -- консольный почтовый клиент.
В связи с повсеместным введением SSL/TLS толку от этого клиента теперь немного.
Недавно понадобилось организовать рассылку группе людей по интересам - пользовался вот этим: mailsend
Siberian GRemlin,
Aug 14 2015, 08:50 Баги сайта и форума
Сегодня от хостера пришло автоматическое уведомление:
QUOTE
User has used 102% of his/her allocated disk space.
Зашёл на FTP и посчитал размер всех файлов (там ещё какие-то автоматически генерируемые логи были - где-то на 50 Мб - всё потёр) - получилось 177 Мб. Но в веб-админке показывает, что использовано 307.7 Мб из 300 Мб.
Думаю, что за фигня - залез в настройки посмотреть подробнее - ах ты ж долбанный ты нафиг! Там размер БД больше 100 Мб! Что-то думаю, много. Сделал "OPTIMIZE TABLE" для всех таблиц (сайта и форума) - как-то сильно не помогло. Сделал SQL-запрос "SHOW TABLE STATUS" и поглядел что не так. С БД сайта всё было ок, а вот на форуме оказалась просто адски жирная таблица "ibf_spider_logs" - она одна аж 90 Мб с чем-то жрала. Полез в настройки форума и отключил эту хрень (Search Engine Spiders -> Log all spider visits? -> No), чтобы больше туда ничего не добавлялось. Затем очистил таблицу:
TRUNCATE TABLE ibf_spider_logs;
OPTIMIZE TABLE ibf_spider_logs;
Поглядел ещё раз статистику и сделал тоже самое с таблицей "ibf_task_logs" (правда, где отключается запись туда не нашёл - да и ладно, она не очень большая).
Так вот, после этого обновил статистику в веб-админке - БД похудела и стала занимать около 10 Мб!!!
А я раньше никак не мог понять, чего это у меня резервная копия БД форума так долго делается и так много занимает!
Siberian GRemlin,
Jul 28 2015, 08:06 Doom 3. BFG Edition [.IDWAV]
Глянул - короче, там сплошной головняк.
Формат у .idwav / .idxma примерно такой:
CODE
uint32 magic;    // const uint32 SOUND_MAGIC_IDMSA = 0x6D7A7274
int64 timestamp; // 8 bytes (ID_TIME_T)
bool loaded;     // 1 byte
int playBegin;   // 4 bytes
int playLength;  // 4 bytes
idWaveFile::waveFmt_t format; // vary - see "/neo/sound/WaveFile.h"
int num;         // 4 bytes
BYTE amplitude[num];  // num bytes
int totalBufferSize; // 4 bytes
int num;             // 4 bytes
[num] structs:
  int numSamples     // 4 bytes
  int bufferSize     // 4 bytes
  BYTE [bufferSize]  // bufferSize bytes

См. файлы:
/neo/sound/XAudio2/XA2_SoundSample.cpp
/neo/sound/XAudio2/XA2_SoundSample.h
Например метод:
bool idSoundSample_XAudio2::LoadGeneratedSample( const idStr &filename )
Это загрузка такого файла.
Определённый интерес вызывает там idWaveFile::ReadWaveFormatDirect( format, fileIn ); которая, как я понял, читает format, который, в свою очередь, будет разного размера в зависимости от типа закодированного звука (см. комментарии в XA2_SoundSample.h). И ещё я не понял что такое amplitude и зачем оно нужно. Теоретически, т.к. здесь хранится заголовок waveFmt_t от .WAV, то можно собрать .WAV файл. Практически - как ты видишь звук побит на блоки и с тем же IMA ADPCM всё не так просто.
Siberian GRemlin,
Apr 26 2015, 12:01 Нужен нормальный C/C++ компилятор
Представьте себе такую программу:

CODE
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

static char strx[] = TEXT("HELLO WORLD!");

/* 3984 => 0x0F90 */
void func(void) {
char buf[3984];
  strcpy(buf, strx);
  printf("%s\n", buf);
}

int main(int argc, char *argv[]) {
  func();
  return(0);
}

Всё компилируется и работает на отлично.
А теперь если поставить вместо 3984 число 3985 или больше, то получим что-то очень странное:
QUOTE
C:\Temp/ccsfeaaa.o(.text+0x352):test.c: undefined reference to `_alloca'

После долгих гуглений и битья головой об стол нашёл вот такое обсуждение:
QUOTE
Danny Smith
To disable stack probing, add this switch -mno-stack-arg-probe.

Randall R Schulz
Man! I scanned through the GCC man page for anything that would control
this action, and couldn't find anything. I don't see "-mno-stack-arg-probe"
listed there at all, nor is any option that includes the word "probe."

Danny Smith
Yeah, no documentation to speak of. The only reason I know about it because
I've been chasing the _alloca bug that Fish reported. It is still present in
GCC trunk (3.4). I have submitted a simple patch that fixes, but ... time for
a ping in the New Year.

Вдумайтесь в это - в документации к GCC нет ни слова об этом ключе, а единственный человек, который о нём знает, узнал о его существовании исправляя баг в компиляторе.
Словами не передать как я фрустрирую!
Siberian GRemlin,
Apr 2 2015, 11:31 Delphi, Asm, C, WinAPI, PHP, ...
Конкретизируй задачу (опиши коротко и понятно на каком-нибудь похожем примере).
Потому что если тебе просто нужно сравнить свои значения с теми что там, то всю БД в память загружать и не нужно - прочитал одну строку, распарсил, нашёл нужные занчения, сравнил, затем прочитал следующую и так далее. При таком подходе тебе нафиг грузить файл в память не упёрлось, что быстрее и проще.
Я бы читал файл блоками:
1) Скажем, известна максимальная длинна строки - пусть будет 500 символов.
2) Читал бы с запасом блок в 512 символов.
3) Парсил бы его и искал конец строки. Скажем, строка бы была длинной в 302 символа.
4) На этом шаге парсил строку и вытаскивал нужные значения.
5) Здесь перемещал бы оставшийся блок в 512-302=210 символов в начало буфера, затем читал бы из файла остаток в 302 байта и переходил бы к пункту 1. Если сделать буфер кольцевой, то даже перемещать ничего не нужно - будет быстрее, но с реализацией замороченнее.
К слову сказать, пункты 2-5 умеет делать буферизованный ввод/вывод Сишных функций fgets() - читает строку из файла. В Delphi можно подключить через external библиотеку msvcrt.dll и оттуда эту функцию тягать (ещё fopen() и fclose() понадобятся).
Если же тебе нужно постоянно что-то там сравнивать, то проще и быстрее будет загрузить твой .CSV обратно в какую-нибудь БД и уже с БД и работать.

Вот, держи, можешь замерить скорость - по идее, должно быть быстро. Учти только, что fgets() возвращает строку с символом перевода на конце (если это не последняя строка в файле) и строки там ASCIIZ (с нулём на конце).

CODE
program functest;
{$APPTYPE CONSOLE}

function fopen(filename: pchar; filemode: pchar): pointer;  cdecl; external 'msvcrt.dll';
function fgets(s: pchar; n: integer; fptr: pointer): pchar;  cdecl; external 'msvcrt.dll';
function fclose(fptr: pointer): integer; cdecl; external 'msvcrt.dll';

var
  f: pointer;
  s: array[0..1023] of char;
begin
  // open for (r)ead as (t)ext file = rt
  f:=fopen('functest.dpr', 'rt');
  // file open ok
  if (f <> nil) then
  begin
    // first line
    fgets(s, 1024, f);
    writeln(s);
    // second line
    fgets(s, 1024, f);
    writeln(s);
    // close file
    fclose(f);
  end;
end.
Siberian GRemlin,

7 Страниц V < 1 2 3 4 > » 
Упрощённая версия Сейчас: 28th March 2024 - 15:09