无聊的时候,朋友推介给我的,他就说他电脑上除了这个以外都是破解版...一时间就产生极大兴趣.
下来以后,查壳,没壳,然后注册的时候直接弹出一个MessageBox...心想这么简单怎么没人去破解
于是直接bp MessageBoxA,断下来以后开始看代码,发现不对劲
每几行就是一个跳转,每几行就是一个假的RET,都搞不清哪是函数头,哪是函数尾.几乎所有的指令都是[esp+sth]之类的...
然后才知道是刘涛涛的扭曲变换加密...后来经人提醒软件名是WinXXX的都要小心...比如刘涛涛的另一个软件WinMount
更多关于扭曲变换加密请看这里:http://www.liutaotao.com/nqby.txt
刘涛涛原话:我保证,悬赏20万都不会有人逆它!
心想这下子的话,估计下什么Windows API可能都不会轻松,可能断下去以后连函数在哪里返回,甚至看都看花你.于是我就想着从其他方面下手.
然后发现"register"字符串可能是突破口,找了下面三个地方.
00466774 push 0078127C register
004F0A5F push 0078127C register
005F4789 push 0078127C register
由于是扭曲变换加密.所以只要三个都点进去看下里面的代码哪个的比较简单,看不懂就不管他了.:-D(又一个懒招...),看下只有第二个register的比较简单.如下:
004F0A48 |. FF15 F4A67600 call dword ptr [<&imagehlp.MapFileAnd>; imagehlp.MapFileAndCheckSumA
004F0A4E |. E8 7AEAFAFF call 0049F4CD ; (initial cpu selection)
004F0A53 |. 84C0 test al, al
004F0A55 |. 0F85 BE000000 jnz 004F0B19
004F0A5B |. 885C24 74 mov byte ptr [esp+74], bl
004F0A5F |> 68 7C127800 push 0078127C ; register
imagehlp.MapFileAndCheckSumA看名字就知道是文件效验,跟进去发现了CreateFileA等一系列文件操作的函数就大抵能肯定了
在猜一下call 0049F4CD估计是在检验是不是注册用户的(自己测试一下那个函数在哪个时候被调用也能知道.)
如果想完美爆破的话,我想应该改call 0049F4CD不过你很难知道那函数在哪里返回,之前发现config.ini存放RegName和RegCode跟进去发现跑到了ENVC.dll领空,貌似算法也是在里面的.
而且程序对ENVC.dll有效验的,所以想要完美破解的难度就相当高了.
不过根据我的测试,本软件的唯一限制就是未注册的话在转换后的视频有个水印,嗯 这样子的话,我只要去掉那个水印那不也算是"完美破解"了
料想在我们按下开始转换按钮程序肯定会判断注册否,于是我们在按按钮之前先在call 0049F4CD内下断即:
0049F4CD 81EC 08020000 sub esp, 208
(当然也可以去bp imagehlp.MapFileAndCheckSumA,结果都一样.)
断下来以后,看堆栈
0012BCB4 004EFBAD 返回到 WinMPGVi.004EFBAD 来自 WinMPGVi.0049F4CD
于是奔去004EFBAD处
004EFBA2 . FF15 F4A67600 call dword ptr [<&imagehlp.MapFileAnd>; imagehlp.MapFileAndCheckSumA
004EFBA8 . E8 20F9FAFF call 0049F4CD ; (initial cpu selection)
...
004EFBAF . 75 6E jnz short 004EFC1F
...
004EFC1E . C3 retn
...
004EFC30 . 74 0B je short 004EFC3D
中间的那个retn相当于jmp,扭曲变换加密里面这种伪retn随处可见...
未注册的话retn会直接跳走,那我们只要不让他跳就可以了,于是把往回跳的je short 004EFC3D直接nop掉.
测试一下OK.水印去除.
后来发现其他几次判断注册的地方也可以这样子爆破掉,只不过意义不大,没有改变到他的功能,经过这次经验我深深体会到扭曲变换加密的强大之处,写起来只有这么点,其中历经多少艰辛坎坷我就不说了,呵呵