Сейчас на форуме: (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Пользовательский алгоритм hash суммы, нужны подсказки по псевдокоду IDA |
Посл.ответ | Сообщение |
|
Создано: 31 июля 2010 00:06 · Поправил: ohos · Личное сообщение · #1 Приветствую, из одной программы мне необходимо получить алгоритм формирования hash суммы по группе чисел, исходный код работы функции достал с помощью IDA pro, но он написан псевдокодом и некоторые небольшие его части не совсем понятны, для наглядности псевдокод: Code:
отдельный список вопросов по этому псевдокоду: //1 непонятка: что такое HIDWORD и *(_DWORD *)& ? (изменяют ли они значение переменной или просто указывают на тип?) //2 непонятка: что означают символы >> ? //3 непонятка: выражение ++v9 равносильно v9 = v9 + 1? //4 непонятка: в каком порядке выполняются действия в выражении "ItemID + v13++"? (сперва считается сумма ItemID + v13 и только потом v13 увеличивается на 1?) p.s. в качестве проверочного числа можно использовать 3185b 1 4c1dea3f 0 0 0 0 0 0 0 0 697a (символ пробела тут разделитель чисел), из-за непоняток я не могу сам проверить, по крайней мере нужно мне разъяснить возникшие непонятки, а дальше я уже сам ![]() ![]() |
|
Создано: 31 июля 2010 00:47 · Поправил: neomant · Личное сообщение · #2 Неплохо бы было для начала определиться с типами параметров. 1 Предполагаю, что v27 типа signed __int64, тогда HIDWORD должен возвращать старшее двойное слово. *(_DWORD *)& - это приведение типов. Дословно можно сказать так: адрес переменной v28 приводится к указателю на DWORD и берется его значение, а прощё, если я правильно догадываюсь и v28 имеет тип как и v27, то это LODWORD или младшее двойное слово. 2 >> стандартная операция шифта(сдвига) на >> n разрядов вправо. 3 Да. Это префексный инкремент. 4 Постфиксный инкремент и ваше предположение верно. ----- Следуй за белым кроликом ![]() |
|
Создано: 31 июля 2010 11:00 · Личное сообщение · #3 |
|
Создано: 31 июля 2010 13:09 · Личное сообщение · #4 neomant, а как эта операция сдвига выполняется, можно наглядный пример? (просто уверен, что разработчики писали исходный код не на асме и поэтому такая операция должна иметь где-то простой вид) Coderess, что значит "сделать рип асм кода"? т.е. просто взять сырой асм код и разбирать его? просто не смотря на читаемость хексрейного кода, этот исходник достаточно мал, за исключением обозначенных непоняток ![]() |
|
Создано: 31 июля 2010 14:32 · Личное сообщение · #5 |
|
Создано: 31 июля 2010 15:19 · Личное сообщение · #6 |
|
Создано: 31 июля 2010 17:20 · Поправил: ohos · Личное сообщение · #7 |
|
Создано: 31 июля 2010 18:31 · Личное сообщение · #8 |
|
Создано: 31 июля 2010 19:16 · Личное сообщение · #9 |
![]() |
eXeL@B —› Вопросы новичков —› Пользовательский алгоритм hash суммы, нужны подсказки по псевдокоду IDA |