破解一个加密函数的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了破解一个加密函数的方法相关的知识,希望对你有一定的参考价值。
是一个游戏程序,加密函数在一个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,它里面的函数是把输入参数加密,那么让它直接输出这个输入的值,也达到了破解目的。这只是想法,具体代码我也不知道怎么写。
第一句是取地址, 第二句是修改内存页的读写, 因为在内存中, 代码区是只读的, 这里改成可读可写. 第三句是将函数的第一句改成E9, 其实这里的E9对应的是汇编里的JMP, 配合第四句修改第二个字节的内容, 联合起来的效果就是该函数入口处的第一句成了JMP dididi(相对地址), 当调用这个函数时, 就会跳转到自己写的函数dididi里了.
这里有一个前提, dididi的函数定义(参数个数, 参数类型, 返回值类型)必须与函数Encrypt的完全一致.
你用VB取得首地址后修改失败是因为第三句*p的意思是修改p指针指向的字节的内容, 而VB中没有指针类型, 正确的做法应该是使用memset或者memcpy这两个API来对内存中的数据进行操作, 从而回避VB内没有指针的问题.
不知道上面说的这些你有没有看懂, 不过楼主想找一个懂VB, C++ 和 汇编的, 上百度知道的人来回答你的问题, 估计很困难..... 参考技术A 游戏的话,应该没你想的那么简单
如果那个函数是动态加密的,每次返回都不一样,你还是要分析函数才能实现你说的
更不用说,再加个壳,关键代码VM ,内存校验什么的
只能说 good luck , 祝你那函数就那么简单,啥保护都没,真这样的话,patch 几行代码就结束了。
exe加密视频破解
网上下载了一个视频
好像是天草的,很早的吧
看了一下天草现在啊都不做翻视频了。。
加的几个客服也都没做了。。。
现在这个算法不知道怎么破解呀,应该是蛮早的加密方法了。
希望能有人告知是什么加密方法如何破解?如图。
至少知道是用什么加密的呢。是哪个团队加密的呢?
加分求助。
是用什么软件加密的呢?
追答没用过 不是狂牛。。飓风 不晓得 是不是的。。百度视频加密软件 ,一个个加 哪个界面跟这个一样就是的了
追问知道了,是天狼星6.3不知道谁有算法解开。
本回答被提问者采纳 参考技术C 什么视频?给我看看!以上是关于破解一个加密函数的方法的主要内容,如果未能解决你的问题,请参考以下文章