当前位置:文档之家› DNF游戏对数据加密方式

DNF游戏对数据加密方式


; 上一层传进来的 ; [edi]中就是需要加密的值 ; [edi+4]里是干啥的,需要看
xor eax, ebx
; xor 加密参数1
sub eax, edi
; 异或过的值 - edi
cmp eax, ecx
; 比较 减过的值 [edi+4]
jz
short loc_404BAC ; 相等就跳转(应该跳转的)
push eax
//角色速度地址 2
call encrypt //调用加密函数(此函数加密完后自动写入)
mov eax, 角色基地址
mov eax, [eax]
add eax, 0x1E8C //速度偏移 1
mov eax, [eax]
add eax, 0x35C //速度偏移 2
push 1000 push eax
sub_EFB010((void *)dword_1B39560, this, 63); v1 = dword_1B39564; } v4 = 4 * *(_DWORD *)(v2 + 4); v3 = v1 ^ (v4 + *(_DWORD *)(dword_1B39560 + 68)) ^ *(_DWORD *)(*(_DWOR D *)(dword_1B39560 + 68) + v4); if ( v3 != (v1 ^ (*(_DWORD *)(dword_1B39560 + 72) + v4) ^ *(_DWORD *)(*(_D WORD *)(dword_1B39560 + 72) + v4)) ) sub_EFB010((void *)dword_1B39560, v2, 64); return v3; }
int __thiscall sub_404B80(int this) {
int v1; // ebx@1 int v2; // edi@1 int v3; // esi@3 int v4; // eax@3 v1 = dword_1B39564; v2 = this; if ( (dword_1B39564 ^ *(_DWORD *)this) - this != *(_DWORD *)(this + 4) ) {
; nsn:00404BF9p ...
ebx ebx, ds:dword_1B39564 ; 加密参数1
esi
edi edi, ecx
; 上一层传进来的
nsn:00404B8B nsn:00404B8D 看 nsn:00404B90 nsn:00404B92 nsn:00404B94 nsn:00404B96 nsn:00404B98 nsn:00404B9E nsn:00404BA0 nsn:00404BA1 nsn:00404BA6 nsn:00404BAC nsn:00404BAC loc_404BAC: +16j nsn:00404BAC nsn:00404BB2 看 nsn:00404BB5 nsn:00404BB8 nsn:00404BBB nsn:00404BBE nsn:00404BC0 nsn:00404BC2 nsn:00404BC5 nsn:00404BC7 nsn:00404BC9 nsn:00404BCB nsn:00404BCD nsn:00404BCF nsn:00404BD1 nsn:00404BD3 nsn:00404BD5 nsn:00404BD6 nsn:00404BDB nsn:00404BDB loc_404BDB:
mov
ecx, ds:dword_1B39560 ; 加密参数2
push 3Fh
push edi
call sub_EFB010
mov ebx, ds:dword_1B39564
; CODE XREF: EncFunc
mov mov
ecx, ds:dword_1B39560 eax, [edi+4] ; [edi+4]里是干啥的,需要看
//加速
void WINAPI Speed()
{
__asm{
mov eax, 角色基地址
mov eax, [eax] add eax, 0x1E8C //速度偏移 1
mov eax, [eax]
add eax, 0x33C //速度偏移 2
push 1000
//速度为 1000(明文输入)
push eax
//速度为 1000(明文输入) //角色速度地址 3
call encrypt
//调用加密函数(此函数加密完后自动写入)
}
}
这个是现在 DNF 的加密函数
int __thiscall sub_EE6B00(void *this) {
void *v1; // edi@1 int v2; // esi@1 int result; // eax@4 int v4; // eax@5 int v5; // esi@5 v1 = this; v2 = (int)((char *)this + 16); if ( sub_404B80((int)((char *)this + 16)) & 1 && ((unsigned int)sub_404B80(v2) >> 1) & 1 ) {
proc near
; CODE X mov mov
; nsn:00404BF9p ...
ebx ebx, ds:dword_1B39564 ; 加密参数1
esi
edi edi, ecx eax, [edi] ecx, [edi+4]
push edi
call sub_EFB010
; CODE XREF: EncFunc
+51j nsn:00404BDB nsn:00404BDC nsn:00404BDE nsn:00404BDF nsn:00404BE0 nsn:00404BE0 EncFunc
pop mov pop pop retn endp
DNF 游戏对数据加密第一个站进入、快速 成为做挂达人。
有很多休闲类游戏都有自己的加密解密函数,这些函数主要负责加密存放,解密读取数据 所以明文数据有时候是找不到的 //加密(很早以前的),最近的看回复贴 void WINAPI encrypt(int 地址, int 值) {
mov eax, [edi]
; [edi]中就是需要加密的值
mov
ecx, [edi+4] ; [edi+4]里是干啥的,需要看
xor eax, ebx
; xor 加密参数1
sub eax, edi
; 异或过的值 - edi
cmp eax, ecx
; 比较 减过的值 [edi+4]
jz
short loc_404BAC ; 相等就跳转(应该跳转的)
mov
ecx, ds:dword_1B39560 ; 加密参数2
push 3Fh
push edi
call sub_EFB010
mov ebx, ds:dword_1B39564
; CODE XREF: EncFunc
mov mov
ecx, ds:dword_1B39560 eax, [edi+4] ; [edi+4]里是干啥的,需要看
__asm {
pushad MOV EBX,8 MOV ECX,加密参数 1 MOV ECX,DWORD PTR DS:[ECX] MOV EDI,DWORD PTR SS:[EBX+EBP] MOV EAX,DWORD PTR DS:[EDI] MOV ECX,DWORD PTR DS:[ECX+44h] MOV EDI,加密参数 2 MOV EDI,DWORD PTR DS:[EDI] SHL EAX,2 LEA ESI,DWORD PTR DS:[EAX+ECX] XOR ESI,EDI XOR ESI,DWORD PTR SS:[EBX+EBP+4] MOV DWORD PTR DS:[EAX+ECX],ESI popad NOP NOP } }
edi eax, esi esi ebx
nsn:00404B80 EncFunc 4B76j nsn:00404B80 nsn:00404B80 nsn:00404B81 nsn:00404B87 nsn:00404B88 nsn:00404B89 nsn:00404B8B nsn:00404B8D 看 nsn:00404B90 nsn:00404B92 nsn:00404B94 nsn:00404B96 nsn:00404B98 nsn:00404B9E nsn:00404BA0 nsn:00404BA1 nsn:00404BA6 nsn:00404BAC nsn:00404BAC loc_404BAC: +16j nsn:00404BAC nsn:00404BB2 看 nsn:00404BB5 nsn:00404BB8
//解密 DWORD WINAPI Decrypt(DWORD Val) {
__asm {
mov eax, 加密参数 2 mov eax, [eax] mov ebx, eax mov eax, 加密参数 1 mov eax, [eax] mov ecx, eax mov eax, Val
mov edx, [ecx+44h] shl eax,2 mov esi, [edx+eax] add edx, eax xor esi, edx mov edx, [ecx+48h] add eax, edx mov edx, [eax] xor edx, eax xor esi, ebx mov eax, esi } }
相关主题