中秋无事,小破一个时间限制的软件

偶然从网上的一个某家语音合成的工具,效果还可以,只是软件试用期只到2013年:

已经说明白了,2013年就不能用了

对于一般人,改改系统时间,用用就得了,但是对于作为程序员的我来说是不可以接受的,一定要作一下,把它破解掉

先用侦壳工具language.exe看看,软件没有加壳,大胆搞起来

马上用 Ollydbg52pojie 进行反汇编:

通过搜索找到关键词:

双击进入,找到关键代码的地方

尝试把它最近的一个JE 改为JNE,附录:常用的汇编指令如下:

JO     溢出跳转          0x70
JNO     不溢出跳转          0x71
JB     低于跳转          0x72
JNB     不低于跳转          0x73
JE     相等跳转          0x74
JNE     不等跳转          0x75 (JNZ)
JBE     不高于跳转          0x76
JA     高于跳转          0x77
JS     负号跳转          0x78
JNS     非负跳转          0x79
JP     奇偶跳转          0x7A
JNP     非奇偶跳转          0x7B
JL     小于跳转          0x7C
JNL     不小于跳转          0x7D
JNG     不大于跳转          0x7E
JG     大于跳转          0x7F

但直接改写JNZ居然无效,马上改成手写

改成jnz

但发现最后无效?  程序最后还是弹出过期的信息;

好吧,再往前走

0x8d70这个地方,貌似是在判断软件是否损坏或者过期了,好嘛,连带 软件损坏(合成dat文件缺失造成损坏)和过期的判断都给他干掉

je->JNz

乖乖,这次老实了,终于看到久违的界面:

但是很不爽,界面出来了,功能无效!

好吧,两个笔记本同时call起来(没有笔记本的离开用虚拟器呼起来),往前面倒(dao2),再次发现

通过这个call(8cd9)之后就产生了不同的分支(主要是eax的值不同了)马上设置断点

最后我们两台笔记本设置不同的时间分别运行,来带这里:

一个case switch语句,两者(过期后和过期前)走的分支不一样,白色表示没有跳转,红色表示跳转,满足条件,都是OD给出的


OK应该走的是defaultcase,结果时间一过期走的是case1(估计是处理软件过期,case2估计是处理软件损坏)

马上把 74 10 改成75 10 ,好,界面生成且声音可合成可保存!

结果测试界面OK,功能OK,再没有boaring且annoying的过期提示出现了,打完收工!

猜你喜欢

转载自blog.csdn.net/book_bbyuan/article/details/82823472