求破解一个加密函数的方法

极语言中文编程 2012-11-21 02:16:21
是一个游戏程序,加密函数在一个dll里,这个dll非常关键,里面函数非常多。所以不容易被取代。我先发一个C++破解这个加密的思路。但代码我没有很明白。望解读。
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,它里面的函数是把输入参数加密,那么让它直接输出这个输入的值,也达到了破解目的。这只是想法,具体代码我也不知道怎么写。
...全文
185 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
来一个不打酱油的,看看代码。我用VB得到这个地址数值非常大。而去内存这个位置,发现根本没数据。那这个代码究竟修改的哪里。真正的基址应该怎么算。
majia2011 2012-11-22
  • 打赏
  • 举报
回复
那个值是相对地址,直接访问当然没东西,呵呵呵
  • 打赏
  • 举报
回复
看雪发不了帖子,广海不让注册。命若
xiaohuh421 2012-11-22
  • 打赏
  • 举报
回复
0xe9 是汇编指令 JMP *(DWORD *)(p + 1) = ((DWORD)dididi) - (DWORD)p - 5; 这就是把 Encrypt函数的入口代码强行修改成 JMP到 自己 的函数, 这就是HOOK函数的一种方法. 如果你这个程序没有注入到目标进程, 肯定是调用不了的. 建议先看Window核心编程, 同时去<<广海>>转转, 这里比较适合游戏破解入门. <<看雪>>是比较高级点的论坛了.
赵4老师 2012-11-22
  • 打赏
  • 举报
回复
建议楼主去“看雪论坛”逛逛。
sefemp 2012-11-21
  • 打赏
  • 举报
回复
base64吧 自己定义字符的序列

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧