扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
这里出现了call和ret,但又不是一般所期望的那种。这里的call不代表你发现了一个函数调用。这里的ret不代表是一个函数的结束。
* 使用堆栈代替寄存器。比如:
|
你能看懂吗?很明显,这个变换是不可逆变换。因为它本来使用了哪个寄存器,已经没有办法知道了。
* ……还可以想出很多扭曲变换的
* 在C语言中,使用 #pragma code_seg(".code$curve_NoChange") 来指示后面的代码不做任何加密。因为有时候有些代码含有大量的循环,加密它会严重影响效率。
* 在C
现在的扭曲变换器我叫它1.0版,已经非常稳定了。我用它把VC6的库文件LIB都处理了一遍,再用LIB.exe工具写回LIB文件中,我们就有了一套加密后的库。如果用这套库来LINK你的
用它来加密我们做的一个共享软件,就再也没人写出注册机了。去读懂大量的经过以上变换的代码是不可想象的。但还是有人暴破了,真佩服他。我会不断丰富加密方法,让暴破者都放弃。
现在的扭曲变换器还只支持VC6使用的COFF格式的OBJ,下一步,要分析一下VS2005的OBJ格式,尽快支持它。
有几点:
* 本软件暂时不对外
* 现在只支持VC6的OBJ格式,就是 COFF. 下一步想支持VS2005的OBJ格式,遇到了问题。VS2005的debug编译OBJ还是 COFF, 但 release 编译的OBJ就不知道是什么格式了,找不到资料。有哪位朋友能帮助解决一下这个问题?谢谢。
我们以用户名 12345678 错误的注册码 33333333 为例题,在40147E处下断。我们可以看到,
到此处为止,在堆栈里,把我们的用户名、注册码展成堆栈地址 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爆破
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者