扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
在本页阅读全文(共4页)
* ……还可以想出很多扭曲变换的方法。化繁为简只有一种方法,化简为繁可以有无穷多种方法。还有一些功能:
* 在C语言中,使用 #pragma code_seg(".code$curve_NoChange") 来指示后面的代码不做任何加密。因为有时候有些代码含有大量的循环,加密它会严重影响效率。
* 在C语言中,使用 #pragma code_seg(".code$curve_Max") 来指示后面的代码重点加密。比如后面是与注册算法相关。
现在的扭曲变换器我叫它1.0版,已经非常稳定了。我用它把VC6的库文件LIB都处理了一遍,再用LIB.exe工具写回LIB文件中,我们就有了一套加密后的库。如果用这套库来LINK你的软件,分析者就很难从汇编中找到哪个是printf哪个是strcpy,IDA也无法识别MFC静态链接的库函数了。能把VC6的库都加密一遍不出错,我相信它已经很强壮很稳定了。
用它来加密我们做的一个共享软件,就再也没人写出注册机了。去读懂大量的经过以上变换的代码是不可想象的。但还是有人暴破了,真佩服他。我会不断丰富加密方法,让暴破者都放弃。
现在的扭曲变换器还只支持VC6使用的COFF格式的OBJ,下一步,要分析一下VS2005的OBJ格式,尽快支持它。
有几点:
* 本软件暂时不对外发布,只自己使用。如果有朋友想对自己的代码加密,可以把OBJ文件发给我加密。防止所有的软件都用这个加密,我们会IDA的就没饭吃了 :(
* 现在只支持VC6的OBJ格式,就是 COFF. 下一步想支持VS2005的OBJ格式,遇到了问题。VS2005的debug编译OBJ还是 COFF, 但 release 编译的OBJ就不知道是什么格式了,找不到资料。有哪位朋友能帮助解决一下这个问题?谢谢。
我们以用户名 12345678 错误的注册码 33333333 为例题,在40147E处下断。我们可以看到,程序把我们的注册码算成了16进制的 12 12 12 12 AF AF AF AF 然后后面继续,在40180A处把我们的注册码算成 15 16 17 18 B6 B7 B8 B9。然后在 405310 把我们的用户名展成 31 32 33 34 35 36 37 38。
到此处为止,在堆栈里,把我们的用户名、注册码展成堆栈地址 12FF18。
假注册码部分16进制:32 12 12 12 AF AF AF AF 15 16 17 18 B6 B7 B8 B9 1D 1E 1F 20 BE BF C0 C1 25 26 27 28 C6 C7 C8 00。
用户名部分:31 32 33 34 35 36 37 38 31 32 33 34 35 36 37 38 31 32 33 34 35 36 37。
展开后就是用户名与注册码混合运算了,在40226A 处可以看到运算的结果(这个过程最为复杂,的确没时间仔细分析,所以没细看)在 4083DD 处我们可以看到 SUB EAX,3467ABDE 这就是爆破口,把他改成 MOV EAX,00爆破成功!!!!反正就是爆破 4083DD处,把他改为 B8 00 00 00 00, 运行就OK了!!!
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。