Показать сообщение отдельно
Старый 06.01.2014, 16:20   #1
Пользователь
 
Регистрация: 05.03.2010
Сообщений: 46
Сказал Спасибо: 0
Имеет 14 спасибок в 9 сообщенях
Deadly пока неопределено
По умолчанию Как шифруются пакеты к GS

Ура отпуск и есть немного времени на хобби)

Забавно с момента появления этой игры прошло уже почти 11 лет, казалось бы должны растащить по кусочкам, и разжевать каждый), но увы тем очень мало, а полезных еще меньше, про низкий уровень вообще молчу...

Ладно о главном), все "Action" действия происходят в Engine.dll если вкратце вызывается функция(для каждого пакета своя и их не сложно найти) с определенными параметрами, 1 пакет не шифруется, а начиная со 2 шифруется, ну впрочем вы можете найти ссылку как это происходит и без меня). Можно вызывать эти функции "на лету" например подгрузив библиотеку.

Сам код пытался комментировать максимально понятно, очень оптимизировано написан он без излишек, я так не умею( сам код:

Код:
00511FD0    8B4C24 04        MOV ECX,DWORD PTR SS:[ESP+0x4]	- поместить в ecx исходный пакет
00511FD4    83EC 08          SUB ESP,0x8 			вычесть из esp (хз зачем если потом прибавляется 14 можно было просто +6 потом)
00511FD7    56               PUSH ESI				запоинить старое значение esi 
00511FD8    8B7424 14        MOV ESI,DWORD PTR SS:[ESP+0x14]	в esi переноситься значение ключа шифтрации(в дамп)
00511FDC    8A46 01          MOV AL,BYTE PTR DS:[ESI+0x1]	начало шифровки 1 байта в ал переноситься 1 байт ключа
00511FDF    3001             XOR BYTE PTR DS:[ECX],AL		хориться 1 байт(шифруется)
00511FE1    57               PUSH EDI				edi в стек)
00511FE2    8B7C24 1C        MOV EDI,DWORD PTR SS:[ESP+0x1C]	вычислить размер пакета(стек + 13 валяется в дампе)
00511FE6    B8 01000000      MOV EAX,0x1			поместить в eax 1
00511FEB    3BF8             CMP EDI,EAX                 	сравнить edi(размер пакета) и eax если меньше продолжить(щетчик)
00511FED    7E 19            JLE SHORT engine.00512008		перейти если сравнение равно
00511FEF    90               NOP				
00511FF0    8BD0             MOV EDX,EAX			в edx перенести eax
00511FF2    83E2 0F          AND EDX,0xF			логическая опер сложения(округления до 16) над edx для шифрации ключом 16 байтовым( чтобы не 

выходило значения за рамки ключа как только дойдет до 17 округлитьсЯ до 1 и будет повторно шифравать ключом)
00511FF5    8A5432 01        MOV DL,BYTE PTR DS:[EDX+ESI+0x1]	переносит в дл текущую часть ключа
00511FF9    325408 FF        XOR DL,BYTE PTR DS:[EAX+ECX-0x1]	хорит часть ключа с преведущим хориным байтом
00511FFD    83C0 01          ADD EAX,0x1			увеличивает счетчик на 1
00512000    305408 FF        XOR BYTE PTR DS:[EAX+ECX-0x1],DL	хорит текущий по щетчику байт с dl(на этом шифрация над текущим байтом завершена)
00512004    3BC7             CMP EAX,EDI			сверяет все ли сообщения прошифровано
00512006   ^7C E8            JL SHORT engine.00511FF0		если нет возращается к метке на 8 пунктов выше и до тех пор пока не прошифрует всё
Deadly вне форума   Ответить с цитированием
За это сообщение Deadly нажился спасибкой от: