· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.HEAP —› алгоритм генерации контрольного кода - нужен совет

Посл.отвђт Сообщен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