DNF游戏对数据加密方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
proc near
; CODE XREF: nsn:0040
push mov push push mov mov mov
; nsn:00404BF9p ...
ebx ebx, ds:dword_1B39564 ; 加密参数1
esi
edi edi, ecx eax, [edi] ecx, [edi+4]
; 上一层传进来的 ; [edi]中就是需要加密的值 ; [edi+4]里是干啥的,需要看
xor eax, ebx
; xor 加密参数1
sub eax, edi
; 异或过的值 - edi
cmp eax, ecx
; 比较 减过的值 [edi+4]
jz
short loc_404BAC ; 相等就跳转(应该跳转的)
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) ) {
if ( ((unsigned int)sub_404B80(v2) >> 2) & 1 ) {
result = sub_404B80((int)((char *)v1 + 32)); } else {
v4 = sub_404B80((int)((char *)v1 + 8)); v5 = sub_EF6E40(v4); result = v5 + sub_404B80((int)((char *)v1 + 24)); } } else { result = 0; } return result; }
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
add eax, edx
; 加一起传给 eax
mov edx, [eax]
; 取 eax 内容给 edx
xor edx, eax
; 异或一下
xor esi, ebx
; 异或
xor edx, ebx cmp esi, edx
; 异或 ; 比较一下(应该会跳转)
jz
short loc_404BDB
push 40h
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 ; 相等就跳转(应该跳转的)
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
//角色速度地址 1
call encrypt //调用加密函数(此函数加密完后自动写入)
mov eax, 角色基地址
mov eax, [eax]
add eax, 0x1E8C //速度偏移 1
mov eax, [eax] add eax, 0x354 //速度偏移 2
push 1000
//速度为 1000(明文输入)
mov
edx, [ecx+44h] ; [加密参数+44]
shl eax, 2
; [edi+4]乘以4
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: +51j nsn:00404BDB nsn:00404BDC nsn:00404BDE nsn:00404BDF nsn:00404BE0 nsn:00404BE0 EncFunc
__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 } }
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
; 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]里是干啥的,需要看
mov
edx, [ecx+44h] ; [加密参数+44]
shl eax, 2
; [edi+4]乘以4
mov
esi, [edx+eax] ; 加一起传给 esi
add edx, eax
; 加一起传给 Baidu Nhomakorabeadx
xor esi, edx
; 异或两个值
mov edx, [ecx+48h] ; [加密参数+48]
//速度为 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 ) {
红色的是两个加密参数
nsn:00404B80 EncFunc 4B76j nsn:00404B80 nsn:00404B80 nsn:00404B81 nsn:00404B87 nsn:00404B88 nsn:00404B89
proc near
; CODE XREF: nsn:0040
push mov push push mov
DNF 游戏对数据加密方式
学习各种外挂制作技术,马上去百度搜索 "魔鬼作坊" 点击第一个站进入、快速 成为做挂达人。
有很多休闲类游戏都有自己的加密解密函数,这些函数主要负责加密存放,解密读取数据 所以明文数据有时候是找不到的 //加密(很早以前的),最近的看回复贴 void WINAPI encrypt(int 地址, int 值) {
//解密 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 } }
//加速
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
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; }
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]里是干啥的,需要看