题目:【原创】脱机破解法
作者:广海混沌
时间:2011年1月22日15:41:58
链接:
http://bbs.pediy.com/showthread.php?p=918314#post918314
----------------------------------------------------------------------------
呵呵,一直在犹豫要不要发到这里来,因为这个说的是破解相关的,但是跟壳的关系不大,在看雪的板块找了半天,也没有找到一个专门破解的,而这个板块跟破解的关联较大,所以发到这里来了。这个帖子首发于广海,主要是因为那里有个破解的板块,但是发到看雪来的话,纯属是普及下基础知识了,高手飘过,由于这个帖子是本人原创,所以不存在转帖问题,同时欢迎朋友们随意转帖,就当普及基础知识了(呵呵,大大们不要向我仍砖头哈)。
===========================================
脱机破解法【说的是一种破解相关的方法】
这里说的是破解的方法,主要是针对经过服务器认证方能运行的程序,例如:辅助程序(本地绑机除外,要是不明白辅助程序主要指哪些,那你需要增加一些知识才行了)。
脱机,顾名思义,肯定要找到封包的加解密算法的,也就是说加解密算法是关键,逆出来加解密算法,这个破解就完成了90%。
先看下加密算法:
加密call特征:
mov eax, dword ptr [esp+C]
mov ecx, dword ptr [esp+8]
基本上一个正常的加密call,是肯定会有上面的这两行汇编的,esp+c 表示的应该是包的内容,esp+8 表示的应该是包的长度,具体情况具体分析。【这里之前说错了,现在修改了】
如果你找到了加密call,那基本上解密call也在附近了,一般情况在加密call的后面。
解密call特征:
mov eax, dword ptr [esp+C]
mov ecx, dword ptr [esp+8]
是的,解密call也是有这个特征的,跟加密call特征一样,这也就是说很多时候,一个程序的加解密其实是同一种算法。
除了通过特征来找加解密call外了,还可以通过发包或者收包的 buffer 来设断点(硬断能好点),通过断下后Ctrl+F9 返回找,然后找到关键的加解密call。
找到加解密call后,那就得开始找算法了,一般情况,算法都会在call里面,或者附近的call里面,不会差太远。
找到算法后,分析,逆出算法,还原成你所熟悉的编程代码,要是嫌麻烦,也可以直接套用汇编。
好了,算法找完,接着还得做不可缺少的部分(修改封包来欺骗)。
对封包进行必要的处理,以达到对客户端程序欺骗,乃至对服务端进行欺骗。
比如,封包里面有个对使用过期时间的限制,那个就可以给他改下的内容即可正常使用,这个主要是针对客户端;
不过,要是辅助程序把关键功能代码放在了服务端,只有通过验证的才会把功能代码向客户端发送的话,那就得另外想办法来欺骗服务器了。
============================================================
题外话:走自己的路,让别人说去吧。
混沌于 2011年1月21日21记
【哎,看雪帖子的编辑框貌似不支持Word文档的格式,直接从word复制过来的格式失效,建议论坛管理能够改进下】(所以把附近传上来了,主要是有些颜色区分而已)
[课程]Linux pwn 探索篇!