Hah! New method found, new patch has been uploaded. For those who are interested I will post the technical details of my find below.
This is the signature checking function from WoW.exe v2.1.3
Code:
.text:0040207B loc_40207B: ; CODE XREF: sub_402030+30j
.text:0040207B mov edx, [ebp+var_70]
.text:0040207E mov eax, [ebp+var_6C]
.text:00402081 push 4
.text:00402083 push offset unk_79E7F8
.text:00402088 push 100h
.text:0040208D push offset unk_80F000
.text:00402092 push edx
.text:00402093 push eax
.text:00402094 call sub_612A90
.text:00402099 add esp, 18h
.text:0040209C test eax, eax
.text:0040209E jnz short loc_4020D4
.text:004020A0 push offset aSignaturefile ; "signaturefile"
.text:004020A5 push offset aCouldNotAuthen ; "Could not authenticate the %s file."
.text:004020AA lea ecx, [ebp+var_68]
.text:004020AD push 64h
.text:004020AF push ecx
.text:004020B0 call sub_608F80
.text:004020B5 add esp, 10h
.text:004020B8 push 1 ; uExitCode
.text:004020BA push 0 ; int
.text:004020BC lea edx, [ebp+var_68]
.text:004020BF push edx ; int
.text:004020C0 push 8AAh ; int
.text:004020C5 push offset a_Client_cpp ; ".\Client.cpp"
.text:004020CA push 4DCh ; int
.text:004020CF call sub_613860
This is the same function in WoW.exe v0.2.2
Code:
.text:004020CB loc_4020CB: ; CODE XREF: sub_402080+30j
.text:004020CB mov edx, [ebp+var_70]
.text:004020CE mov eax, [ebp+var_6C]
.text:004020D1 push 4
.text:004020D3 push offset unk_8358E8
.text:004020D8 push 100h
.text:004020DD push offset unk_8B0008
.text:004020E2 push edx
.text:004020E3 push eax
.text:004020E4 call sub_627170
.text:004020E9 add esp, 18h
.text:004020EC test eax, eax
.text:004020EE jnz short loc_40212B
.text:004020F0 push offset aSignaturefile ; "signaturefile"
.text:004020F5 push offset aCouldNotAuthen ; "Could not authenticate the %s file."
.text:004020FA lea ecx, [ebp+var_68]
.text:004020FD push 64h
.text:004020FF push ecx
.text:00402100 call sub_61BC00
.text:00402105 add esp, 10h
.text:00402108 push 0
.text:0040210A call sub_625F60
.text:0040210F push 1 ; uExitCode
.text:00402111 push 0 ; int
.text:00402113 lea edx, [ebp+var_68]
.text:00402116 push edx ; int
.text:00402117 push 944h ; int
.text:0040211C push offset a_Client_cpp ; ".\Client.cpp"
.text:00402121 push 4DCh ; int
.text:00402126 call sub_626220
Notice the extra lines present in the new version.
Code:
.text:00402108 push 0
.text:0040210A call sub_625F60
By following that call we get this.
Code:
.text:00625F60 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
.text:00625F60
.text:00625F60 ; Attributes: bp-based frame
.text:00625F60
.text:00625F60 sub_625F60 proc near ; CODE XREF: sub_402080+8Ap
.text:00625F60 ; sub_622100+18p ...
.text:00625F60
.text:00625F60 arg_0 = dword ptr 8
.text:00625F60
.text:00625F60 push ebp
.text:00625F61 mov ebp, esp
.text:00625F63 mov eax, [ebp+arg_0]
.text:00625F66 mov dword_CC1A44, eax
.text:00625F6B pop ebp
.text:00625F6C retn 4
.text:00625F6C sub_625F60 endp
.text:00625F6C
.text:00625F6C ; ---------------------------------------------------------------------------
As you can (or maybe not) see, it is taking the '0' pushed at the start, loading it into a register, then putting the contents of that register (now '0') into the model editing variable. By doing this they are effectively resetting the variable every time before a file is loaded.
So how do we fix this? Simple! Just overwrite the '0' with our own number, in this case I will choose '1'. So the new code becomes.
Code:
.text:00402108 push 1
.text:0040210A call sub_625F60
There is one problem with this code though, it will not pass WoW's validation check on login because we are editing the text segment rather than the data segment, so, to get around this we simply enable and disable the fix at appropriate intervals, the times we should do this are explained upon running my new fix.
Thank you for your time and support.
P.S. A message to Blizzard:
Blizzard, there will always be hackers out there who will reverse your code, and they will always be able to disable your protections no matter how hard you try to stop us. There's no way to get rid of us, so just learn to deal with us, all you're doing is making extra work for yourself by "fixing" model editing.