15,440
社区成员
发帖
与我相关
我的任务
分享
DWORD l;
BYTE *p = (BYTE*)GetProcAddress(GetModuleHandle("me.dll"), "Encrypt");
VirtualProtect((void *)p, 0x200, PAGE_EXECUTE_READWRITE, &l);
*p = 0xe9;
*(DWORD *)(p + 1) = ((DWORD)dididi) - (DWORD)p - 5;
其实代码的意思我大概理解,就是取得这个dll的这个加密函数的首地址。把调用地址改成另外一个函数dididi,这是一个自己写的函数,写在一个dll里注入游戏进程。我用VB使用GetProcAddress,取得首地址,但是发现这里并没有被修改。找不到e9。而找到的却是me.dll里的原始内容。说明这只是dll文件在内存里的地址。那么BYTE *p究竟代表什么意思呢。我不会用OD,请教如何使用它找到这个地址。我的破解思路,希望是不用注入dll的方法。比如游戏程序要使用函数加密,那就把加密返回的基址,改成输入的参数基址。还有一个破解思路,是修改这个yb_mem.dll,它里面的函数是把输入参数加密,那么让它直接输出这个输入的值,也达到了破解目的。这只是想法,具体代码我也不知道怎么写。