偶然从网上的一个某家语音合成的工具,效果还可以,只是软件试用期只到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的过期提示出现了,打完收工!