贴些之前的讨论
来自:tseug, 时间:2007-6-13 15:10:58, ID:3797839
to 白河愁:
别光自己研究了,给大家讲讲课,介绍一下软件加密、解密的最新进展,我另外开个帖子
给你分。老咯,10多年不碰这些东西了,落伍了,[
]
来自:白河愁, 时间:2007-6-13 15:57:04, ID:3797865 | 编辑
我破解只是出于兴趣,如果谁有兴趣,我可以告诉他怎么样加密才算比较有效的。
现在流行的技术是使用 VM, 恐怕不太好解释,上次帮别人写论文那教授完全不懂...
来自:tseug, 时间:2007-6-13 16:48:25, ID:3797924
VM 也是多年前就用的了,当年在DOS下就有人用虚拟机实现一些加密算法,可以有效地
抗静态分析,而且动态跟踪的难度也比较大。
教授不懂你说的很正常,你就当没说明白吧,呵呵。当年上学时我跟教操作系统的老师
谈起386支持保护模式,支持段、页式内存管理、支持任务调度,对他说,如果我们
利用386的功能写点代码实现内存管理、IO管理、任务调度,可以实现一个小小的操作
系统核心了。他居然一脸惊诧地说386就能支持这些?你怎么知道的?从此我再也不
跟他谈论这些了。
来自:白河愁, 时间:2007-6-13 17:10:46, ID:3797948 | 编辑
VM最大的缺点就是缓慢,所以以前流行不起了,强度太小的话分析还是相对容易的,但如果5字节一个语句变成1K,那要分析就真的十分困难了,所以也只有现在的机器配置能实现这个东西。DOS下如果不用保护模式,光是各种限制就十分头痛了,不要说 VM了。
关于老师我多年得出的经验就是无论职称有多高都是一个草包。
来自:tseug, 时间:2007-6-13 17:30:37, ID:3797965
不考虑效率的话,现在用高级语言写一个VM不算太难,不知道现在的加密用的VM多
是基于哪种架构的?目前的一些通用加密软件加壳方式有什么新进展吗?用VM方式
加密的应用程序会不会很容易被分析出来加密模式?
来自:白河愁, 时间:2007-6-13 18:06:02, ID:3797987 | 编辑
写一个不太难,不过难度就在于如何应用于 SDK,比如
{$I ENC_BEGIN.INC}
for i:= 1 to 100 do
sum:= sum + 1;
{$I ENC_END.INC}
这样写后出来的程序编译后,这部分代码可以无缝变成 VM.
这里涉及分析代码增加段区空间等一系列麻烦东西,还要考虑兼容性之类的,很麻烦。
你说的架构是什么?如果是CPU的话一般都是模拟RISC指令集。
来自:tseug, 时间:2007-6-14 7:25:56, ID:3798167
我的意思就是VM模拟的CPU是RISC还是CISC的;是栈式的还是寄存器式的,如果是基于
寄存器方式,他的寄存器是如何约定的;是否需要支持IO,以及IO是采用内存映射还是
独立的IO指令实现等等。
另外,实现时是采用纯软件虚拟,还是利用x86的保护模式特性?
来自:jfzjm, 时间:2007-6-15 13:03:20, ID:3798915
如果大家都来做破解了,那么就会有很多人跟楼主的心一样都拔凉拔凉的了。
来自:白河愁, 时间:2007-6-15 13:40:21, ID:3798928 | 编辑
to tseug:
架构其实不成问题,喜欢RISC还是CISC都可以,反正程序是自己写的,喜欢的话还可以写个混合模式来切换.堆栈和寄存器也是一样,有没有完全是自己决定,不过一般都是两者都有的.
其实就等于自己开发一种新型硬件,但由于是虚拟的,所以完全不受物理和技术限制,所以IO是否支持,多少位一个,有多少个也就是随你喜欢而已,反正映射到内存里就行了.当然独立 IO 也是可以的,但是没有必要吧?一般都是纯软件虚拟,虽然可能比较慢,但是也比较好写.如果用x86特性,想要移植就不那么容易了,还要为这个特性可能某些东西要麻烦些.
to jfzjm:
不可能大家都来做破解的,作为普通程序员 70% 以上不懂汇编,90% 以上不会精通汇编,所以注定不会有大家都来破解的情况.