
English: 
We work with the structure. Walked through the file and
I found the structure clearly, here it is.
What is happening here, there is a reference
to the memory address, here to this dat.
If you look closely, here are a bunch
free space, no other links.
Next, use the iParam
multiplied by 30, respectively, what I think ...
I think that there is a structure,
size of 30, well, that is, 30 in hex.
Therefore, I am making a new structure. How is the structure done?
Here is our executable, I advise you to immediately make some kind of separate daddy, so as not to mix
with everyone else. It is desirable that something
begin with an underscore so that it appears above.
Suppose - _game, in it
create a structure.
Here is our structure, let's call it let's say S1.
We know that its size is 30.
More while we know nothing about her.
Now we will start it
fill.
So, look here.

Russian: 
Работаем со структурой. Гулял по файлу и
вот нашел структуру явно, вот здесь вот.
Что здесь происходит, здесь есть ссылочка
на адрес памяти, вот на этот DAT.
Если посмотреть внимательно, здесь куча
пространства свободного, нет никаких других ссылок.
Дальше, используется iParam
помноженное на 30, соответственно что я думаю...
Я думаю что там находится структура,
размером 30, ну то есть 30 в hex-е.
Поэтому делаю новую структуру. Как делается структура?
Вот наш экзешник, я советую сразу сделать какую нибудь отдельную папочку, чтобы не перемешивать
со всеми остальными. Желательно что нибудь что
начинаются с подчеркивания, чтобы наверху оказалось.
Допустим - _game, в нем
создадим структуру.
Вот наша структура, назовем ее сскажем S1.
Мы знаем что ее размер 30.
Больше пока мы о ней ничего не знаем.
Сейчас мы начнем ее
заполнять.
Так, смотрим сюда.

Russian: 
Вот эта вот штука это
начало этих самых структур, и это явно массив.
потому что здесь помножение идет. Вопрос
сколько в этом массиве элементов.
Смотрим немножко выше.
Что мы видим? Если больше чем 63
то unrecoverable error.
Ну логично предположить что это оно.
Эта же таже переменная? Да таже переменная. Вот она.
То есть логично
предположить что там будет соответственно
64 этих элементов. Жмем Control+L
и говорим что у нас есть S1 в количестве 64 штуки.
отлично. Ну и дадим какое-нибудь более вменяемое название
типа S1Array64 элемента. Что это за структура пока не знаем.
ну а iParm это индекс какой-то.
отлично
значит, в эту самую функцию передается pointer
на один из этих элементов поэтому индексу
идем в нее.
что мы здесь видим
мы видим такую функцию param_1[3],
когда мы такую штуку видим

English: 
This one is this.
the beginning of these very structures, and this is clearly an array.
because here the multiplication goes. Question
how many in this array of elements.
Look a little higher.
What do we see? If more than 63
then unrecoverable error.
Well, it is logical to assume that this is it.
Is this the same variable? Yes, the same variable. Here she is.
That is logical
assume that there will be accordingly
64 of these elements. Click Control + L
and say that we have S1 in the amount of 64 pieces.
fine. Well, we give some more sane name
type S1Array64 element. What is this structure do not yet know.
Well, iParm is an index of some kind.
fine
it means that pointer is passed to this very function.
on one of these elements therefore the index
we go into it.
what we see here
we see the param_1 function [3],
when we see such a thing

Russian: 
это значит по любому работа с памятью, то есть скорее всего это
структура.
ну, мы уже знаем что это структура S1
поэтому говорим что это S1.
Pointer на нее и вуаля код преобразился
дальше, мы еще не знаем, что в этой
структуре есть
но мы видим что по элементу со сдвигом 1c обращаются как с undefined4
то есть мы спокойно можем
этот элемент пометить как integer допустим.
помечаем его как
integer
вот и елемент C тоже самое здесь
тоже undefined4 помечаем, тоже control+l как
integer
вот поменялось отлично, это тоже integer и помечаем.
таким образом мы знаем сколько элементов
ну то есть какого размера элементы есть в этой структуре
потихонечку их размечаем. Пока мы еще не знаем что это за элементы
названия мы им давайть не можем
но мы уже можем их пометить.
Потом в последствии мы соответственно сможем

English: 
This means for any work with memory, that is, most likely it is
structure.
well, we already know that this is a S1 structure
therefore we say that it is S1.
Pointer at her and voila code changed
further we do not yet know that in this
the structure is
but we see that the element with a shift of 1c is treated as undefined4
that is, we can safely
Mark this item as an integer.
mark it as
integer
here and element C is the same here
also undefined4 mark, also control + l as
integer
Here exchanged perfectly, it is also integer and mark.
so we know how many elements
Well, that is, what size elements are in this structure
quietly mark them. We don't know yet what these elements are.
we can't give them names
but we can already tag them.
Then later we will be able to

English: 
find and rename them to something more sane.
well, that's enough for now, then I'll show you
how to continue working with it when I find what these variables are.
Here is another example of structures.
that's what's going on here
we have CustomMalloc here
It is I who decoded it, in fact allocates memory, he has
his pool is special, it makes its own pool
and here it is convenient here
it passes the file path
Incidentally, for us it will be wildly useful
because I know right from here where we are now
that is, we are now in
diablo 2 windows and ProgressBar
wonderful
and also on the 26th line it was done
that is, this malloc was
made in this file
cpp on the 26th line 
it helps us to turn right fabulous
in short, what we see here 
we see here that they allocate 68 bytes
and this whole thing goes here in this ptr
respectively this ptr is nothing more than a structure

Russian: 
найти и переименовать их во что нибудь более вменяемое.
вот, ну пока что хватит, потом покажу
как дальше с этим работать когда я найду что это за переменные собственно.
вот, ещё один пример структур.
вот что здесь происходит у нас
у нас здесь есть CustomMalloc
это я там декодирировал, по сути аллоцирует память, у него
свой пул он специальный, он делает свой собственный пул
и здесь удобно вот
он передает путь к файлу
кстати говоря для нас это будет дико полезно
потому что я прямо отсюда знаю где мы сейчас находимся
то есть мы сейчас находимся в
diablo 2 windows и ProgressBar
замечательно
и еще и на 26-й строчке это было сделано
то есть этот malloc был
сделан в этом файле
cpp на 26-й строчке 
нам это помогает реверсить прямо сказочно
короче, что мы здесь видим, 
мы здесь видим что они алоцируют 68 байт
и это все дело идет вот в этот ptr
соответсвенно этот ptr, является ни чем иным как структурой

Russian: 
делаем новую структуру
и так, new структура
причем это судя по всему WinProgressBar
можем сразу так и назвать, авось повезет
WinProgressBar
размер у него 68
жмем save
значит теперь это не ptr*
теперь это WinProgressBar*
Звездочка
То есть указатель на WinProgressBar
Ура
Единственно что, мы здесь переименуем
во что нибудь... пусть будет P
ProgressBar - p
отлично
и так
вот такая шняга сразу же
значит когда он пишет.. ну я это уже объяснял
но еще раз повторюсь
когда он
говорит что вот этот pointer равен 10
он не имеет ввиду что этот pointer нужно перезаписать десятью
он имеет ввиду что в нулевой точке этого пойнтера
есть некий variable undefined4

English: 
make a new structure
and so, new structure
and it seems WinProgressBar
we can immediately call it that, maybe lucky
WinProgressBar
he has a size of 68
click save
it means now it is not ptr *
now it's WinProgressBar *
Star
That is, a pointer to the WinProgressBar
Hooray
The only thing we will rename here
anything ... let it be P
ProgressBar - p
fine
so
Here is such shnyaga immediately
it means when he writes .. well, I already explained it
but I repeat
when he
says that this pointer is 10
he doesn't mean that this pointer needs to be overwritten by ten
he means that at the zero point of this pointer
there is some variable undefined4

Russian: 
который хочет стать 10
то есть вот здесь вот на нулевой точке есть некий integer
жмем save
и тогда он уже нормально показывает вот field на месте 0 равен 10
ну отлично проходим по всем остальным
мы видим что это uint, он подсказывает
значит это uint и есть, поверим на слово
кстати, почему uint 
по очень простой причине
раз мы видим
OR 1 или OR 4 это означает что там
происходит некая битовая операция
то есть скорее всего это поле является бит маской
бит маски это как правило uint
можем сразу себе пометить что это некая маска, mask1
нам в последствии будет легче
с этим работать
некий mask у которого бывает значение 1 и еще и 4
сразу два бита у него
не засетились
так . давайте по быстрому пробежимся
значит integer
пробегаем, не ленимся обязательно все помечаем, потому что нам впоследствии это
очень сильно поможет
Хотя с другой стороны
нам не очень то интересен ProgressBar
Я не думаю что мы захотим взламывать именно его
Но раз можем
то почему бы и нет

English: 
who wants to be 10
that is, there is a certain integer here at the zero point
click save
and then it already shows the normal field in place 0 equals 10
Well, we go through all the rest
we see that it is uint, he tells
it means that uint is, we take a word
by the way why uint 
for a very simple reason
time we see
OR 1 or OR 4 it means that there
there is some bit operation
that is, most likely this field is a bit mask
the mask bit is usually uint
we can immediately mark ourselves that this is a kind of mask, mask1
it will be easier for us later
work with it
a kind of mask which has a value of 1 and also 4
just two bits from him
didn’t go away
So . let's take a quick run
mean integer
we run, we are not lazy, we must mark everything, because later we will
will help a lot
Although on the other hand
ProgressBar is not very interesting to us
I don't think we want to break it
But once we can
then why not

English: 
here, done, next
further the most interesting, actually why did I do it
Here we have a function that receives this ProgressBar as input.
So mark, this is not undefined4, but WinProgressBar *
and
something happens here
some kind of initialization
now you can still see
but what is much more interesting to me is this here
Here we have a globally repository
this thing is a pointer which you can later use later
we will have it ptrToWinProgressBar
it is saved globally
later on to this address we will be able to find it in which case

Russian: 
вот, сделали, дальше
дальше самое интересное, собственно зачем я это делал
Вот у нас есть функция которая получает на входе этот ProgressBar
Значит пометим, это не undefined4, а WinProgressBar*
и
здесь у нас происходит нечто
какая то некая инициализация
сейчас можно будет еще посмотреть
но что мне гораздо более интереснее это вот это вот
Вот у нас есть глобально хранилище
вот эта штука это pointer который можно потом в последствии использовать
это у нас будет ptrToWinProgressBar
он сохраняется глобально
в последствии вот по этому адресу мы сможем его найти в случае чего
