PDA

Просмотр полной версии : Как шифруются пакеты к GS


Deadly
06.01.2014, 16:20
Ура отпуск и есть немного времени на хобби):p

Забавно с момента появления этой игры прошло уже почти 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 пунктов выше и до тех пор пока не прошифрует всё

St1mul
06.01.2014, 19:26
1)откуда по конкретней взято из engine.dll
2)код из какой то защиты или из стандартной engine.dll

Deadly
06.01.2014, 20:05
1)откуда по конкретней взято из engine.dll
2)код из какой то защиты или из стандартной engine.dll

1 - офф сет слево для кого)?
2 - да обычная стандартная длл, ни одна защита в engine.dll не меняет больше 1 - 2 строчек ибо не надо)

Добавлено через 16 минут
башка уже не варит сорри) смещение 100FD0