|
跟踪《楚汉棋缘》的算法只不过三个晚上约6、7个小时的时间, 而写出注册机却用了近一个月,大量的时间都花在大数运算库的调 试上,在这篇教程之后,俺将写一篇针对RSA 算法的详细教程。
俺是一个象棋爱好者,曾用ID“臭棋篓子”获得联众“大师” 级称号,但是俺经常会输给一个象棋程序《将族》。《将族》是90 年代初中国象棋程序史上划时代的产品,近十年来一直是俺的最爱, 可惜随着操作系统不断升级,修改《将族》以让它能够继续工作也 越来越困难。于是我一直在寻找一个棋力相当的新产品希望能够代 替它,直到碰到《楚汉棋缘 V1.3x》,看来大陆在象棋算法的研究 上落后台湾几乎有10年之久!
研究对象:
《楚汉棋缘 V1.36》,这里做个声明:俺的教程使用softice 为唯一工具,无脱壳与静态分析必要。
程序特点:
重启验证防爆破,RSA防注册机,Borland C++编译,“Borland 造”的东西(包括BC++、C++ Builder、Delphi 等)都不能通过下 getwindowtext 之类的断点获得屏幕输入,断点必须下在windows 消息循环上,推荐使用 bpx callwindowproca。程序对用户名及假 码均进行了多次变换,最终的验证是用户名变码与假码变码之间的 验证。
前期工作:
进入注册界面,填入用户名及假码,切入softice,下断点bpx callwindowproca,F5 回到程序,随便动动鼠标即被中断进入Sice, 下s 0 l ffffff "假码", 然后bpm 假码地址,F5回到程序,按下 “注册”按钮,让假码这把“钥匙”带我们去找验证函数!
算法分析:
好了,程序对假码开始进行处理的地方就是我们要进行分析的 验证函数,找到这一函数的入口并记下地址,这样以后可以直接在 这一地址上下断点。
如下所示,这一函数有900 多行代码,还包含了数不清的call, 不过请不要惊慌,如果你仔细看俺的注释,会发现几乎所有的call 俺都是毫不犹豫地用 F10来对付的,对算法的把握完全是通过归纳 总结逐步建立起来的。
:u 430be0 L e81 001B:00430BE0 PUSH EBP 001B:00430BE1 MOV EBP,ESP 001B:00430BE3 ADD ESP,FFFFFE94 001B:00430BE9 PUSH EBX 001B:00430BEA PUSH ESI 001B:00430BEB PUSH EDI 001B:00430BEC MOV [EBP-0094],EDX 001B:00430BF2 MOV DWord PTR [EBP-0088],004EBB08 001B:00430BFC MOV [EBP-0084],ESP 001B:00430C02 MOV EDI,EAX 001B:00430C04 MOV DWORD PTR [EBP-008C],004A8C0B 001B:00430C0E MOV WORD PTR [EBP-80],0000 001B:00430C14 XOR EAX,EAX 001B:00430C16 MOV [EBP-74],EAX 001B:00430C19 MOV EDX,FS:[00000000]
上一篇:防止网站篡改IE默认设置一绝
下一篇:菜鸟破解录之 AutoDialogs
|