|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 17, 2004 00:31:40 Народ, посоветуйте че-нибудь... вот есть у меня файл следующего содержания: +++++++++++++++++ [Settings] SoundTrack=1 SoundEffects=0 [HighScores] Count=8 Name0=otec Score0=1 Dommelsch0=3940 Code0=MLNOWNNNQSQKUDXW Name1=otec Score1=1 Dommelsch1=3816 Code1=BIZDZFJRSJDZZPBX Name2=otec Score2=1 Dommelsch2=3641 Code2=UJMPMTGBXBTGAXBR Name3=otec Score3=1 Dommelsch3=3473 Code3=LXSWOKSQCALNGHIX Name4=otec Score4=1 Dommelsch4=3088 Code4=BVJVCXZQYDXMRVXJ Name5=otec Score5=1 Dommelsch5=3067 Code5=FRLHLQBCRQRGSQWM Name6=otec Score6=1 Dommelsch6=2981 Code6=BITKNJIIBKTNYKNA Name7=otec Score7=1 Dommelsch7=2874 Code7=ONNNQHLGKRPAZHTV +++++++++++++++++ Это от игры. Как видно, в этот файл игра скидывает результаты, типа список лучших. Так вот, в каждой записи присутствует поле code, в котором записана херня. Эта херня зависит от имени, числа очков и от порядкового номера записи. При изменении имени или числа очков запись просто не отображается в окне лучших. Если взять и скопировать данные из записи 1 в запись, например, 5, даже вместе с херней, то запись тоже не отображается. Задача: как определить алгоритм генерации херни? Че делать, в каком направлении шагать? Самое первое, что пришло в голову – дизасмить прогу и искать место, в котором все это дело происходит. Но не умею я этого. Как нить без этого можно обойтись, только анализируя имеющиеся значения? А то, блин, некоторые товарищи достигли такого мастерства, что окончательно выжили меня из списка лучших, причем справиться с ними честным способом не представляется возможным ;-) |
|
|
Дата: Окт 17, 2004 02:21:37 похоже на какой-то хеш + base32, внутри программы копать надо |
|
|
Дата: Окт 17, 2004 09:49:39 Да, тут надо дизасмить и искать место. Достаточно толково сделали. :) |
|
|
Дата: Окт 17, 2004 12:42:25 мдя.... Вот думаю, что проще - научиться пользоваться идой или научиться играть в бильярд лучше отца. ПО всей видимости, первое потребует меньше времени ;-) |
|
|
Дата: Окт 17, 2004 13:06:17 2 Stariy А если посмотреть с той плоскости, когда одно другому не мешает? Насчет кода - это конечно сложная тема без отладчика. Так что имеет смысл научиться пользоваться им, потом все равно пригодиться. |
|
|
Дата: Окт 17, 2004 13:36:30 одно другому не мешает? За двумя зайцами погонишься... сложная тема без отладчика. Отладчика или дизассемблера? Софтайсом я вроде слегка владею - малость наловчился, пока драйвера отлаживал. Но хачить че-то пока ни разу не пробовал. Если бы мне кто-нить хоть в общих чертах описал, как и в каких направлениях двигаться - я был бы весьма рад. Не представляю даже, с какой стороны подобраться. |
|
|
Дата: Окт 17, 2004 20:05:18 IMHO в бильярде не будет суперкриптография применяться, можно попробовать поиграть, составить различные таблицы рекордов: имена aaaaa, bbbbb,... Dommelsch различающиеся на 1,2,.. моможет что и видно будет.. |
|
|
Дата: Окт 17, 2004 22:00:07 Dommelsch-ом играть сложно, ибо как шары закатятся, так и закатятся... именами можно... Я попробую. |
|
|
Дата: Окт 17, 2004 22:03:44 Если хочешь поработать с Сайсом - путь может быть примерно таким: необходимо "поймать" буфер с одним из критичных полей (видимо, это Name,Score,Dommelsch,Code но лучше Code - с ним будет сравнение скорее всего) и увидеть, как оно используется. Надо найти в памяти буфер и поставить breakpoint по использованию на чтение или запись: bpm в айсе. Найти можно либо командой "s" (справка - help s), либо предварительно установив breakpoint на функцию чтения поля из файла. Скорее всего это GetPrivateProfileStringA ну или ReadFile, что вряд ли. Те перед показом формы с рекордами заходишь в Sice(CTRL+D), ставишь первый breakpoint: bpx GetPrivateProfileStringA После этого заходишь в форму. Если теория верна, ты должен вывалиться в отладчик на вызове этой API. Набрав d esp->4 ты увидешь имя секции, в котором ищется запрашиваемый параметр, d esp->8 - имя параметра, а d esp->18 - имя файла, в котором ищется параметр. Буфер ответа для функции виден по d esp->10. Набери эту команду, потом data 0 (откроется окно данных) и "p ret" (выполнить и вернуться). Если параметр известен, и функция его прочла, то в окне данных будет его значение. Если ты таким образом найдешь требуемое значение (например, значение Code1), то после p ret поставь bpm на доступ к этому полю: bpm <адрес> ; Адрес будет слева от окна данных. Продолжи выполнение программы. Если предположение было верным, программа использует это поле, то ты должен опять попасть в отладчик и увидеть, что с ним делают. |
|
|
Дата: Окт 17, 2004 23:18:12 Stariy > Dommelsch-ом играть сложно, ибо как шары закатятся, так и закатятся. Тогда уж лучше не играй - 3 переменные величины - это слишком много. В файле что ты привёл, и так меняется 2: № записи и Dommelsch, причём хаотично. Вот если б его менять предскуазуемо, то можно свести к одной.. Лучше делай как _Chingachguk_ говорит - быстрее будет. А что бы ещё быстрее - первый раз посмотри, что с Code1 делают, а потом поменяй какой-нить байт его. Потом ещё раз пройдись пошагово по коду проверки - один из Jcc пойдёт другую сторону, дык ты его и попровь, что бы куда не надо не ходил :). Тогда можно будет не вникать в алгоритм. |
|
|
Дата: Окт 17, 2004 23:20:43 блин, скоко полезной инфы тут выдали :-) Спасибо, буду пробовать! |
|
|
Дата: Окт 18, 2004 01:31:09 Тогда можно будет не вникать в алгоритм. Но тогда нельзя будет слабать прогу для редактирования этого самого файла :-) Но это задача-максимум... Я сейчас научился отслеживать момент, когда происходит обращение к Code или Name, теперь ковыряюсь дальше... |
|
|
Дата: Окт 18, 2004 01:44:12 А ноутпадом нельзя редактировать? Если прога не будет реагировать на неправильный Code, то задачу можно считать выполненой ;-) |
|
|
Дата: Окт 18, 2004 01:47:43 Хе... Дык что тогда мешает сопернику поправить назад? Надо, чтоб только я умел править рекорды, и больше никто :-) |
|
|
Дата: Окт 19, 2004 14:08:49 Попробуй ArtMoney или что-нибудь подобное. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.103 |