目标:影音神探V2.02 (E语言写的)
下载:官方论坛上不去,各大网站都有下,搜索一下就行了
保护:根据硬盘ID号输入注册码,100次试用
原因:试用后果然是好工具,感谢伟大的神KaoKao
简介:只要进入电影播放网页,就能够获得影片的真实地址,方便快捷,对现今绝大部分的电影网站都实用,找到电影真实地址后双击可以调用影音传送带来下载;最新版本不但支持电影的嗅探,还支持其它多种文件类型,如FLASH,HTML,RAR文件等等
本不想写破文,因为爆破的话也不难,但这个工具个人认为有些特殊性,另外KaoKao提醒我现在论坛上关于E语言的破解很少,此文写得仓促,请高手指正。
运行程序,出现注册窗口,显示你还能用100次,注册窗口里显示你的硬盘ID号,如果输入错误注册码的话会提示注册失败,注册窗口消失并进入主程序,程序会打开作者主页进入后仍然可以点击“注册”来输入注册码,因为程序每运行一次或注册一次的话就会打开作者主页,严重影响破解和平时使用,所以我们先把这个麻烦的东西去掉。
用UltraEdit打开MOVurl.exe文件,搜索字符串“http://wanjun.gg.ggv”,找到只有一个地方,然后看16进制区,这个网址的前面有4个字节是13 00 00 00,把从13开始到网址的最后一个字符全改成00,保存后运行程序就不会打开任何网页或运行IE啦。
现在开始找注册码,程序有两个地方可以输入注册码,一个是程序开始,一个是程序进入后按“注册”按键,为了调试方便,我们进入程序后再注册。E语言和VB差不多,运行E语言的程序都需要它自己的运行库,也就是说你不能直接看到程序是调用什么函数来工作的,但E语言有个好处是它运行库封装的函数都是些标准的函数,所以跟踪到库文件里的话还能看得明白它是调用什么函数,不象VB的函数很多都不知道是什么意思。点击“注册”,输入任意假注册码,注册码的长度有没有限制我没有去找,我输入了10位数,程序提示“注册失败”,先不要点击“确定”,这时打开TRW,用bpx lockmytask来下断,随便提一下这是个很好的断点,很久以前看教程学到的,这个断点的用处是如果程序弹出一个消息窗口的话,我们只要按下“确定”键就能断下来,然后用PMODULE命令就可以回到程序的领空,这时就可以逆向找到跳到出错地方的判断点啦。用这个方法我们找到程序428B66的地方是出现注册失败的地方,用W32DASM反汇编我们可以找到程序是从428743的地方判断后跳过来的,用TRW在428743设断点,断下后用r fl z强行让程序不跳,谁知还是注册失败,看来程序不只一个地方在判断注册,我们再用bpx lockmytask来找,发现428B0A也是一个注册失败的提示窗口,用W32DASM能找到是从4288CE跳过来的。
整理一下:
428743(判断)----->428B66(提示注册失败)
4288CE(判断)----->428B0A(提示注册失败)
现在只要把这两个判断的地方NOP掉或者改成JNZ的话,程序会提示你注册成功,注册按键消失,遗憾的是,程序重新运行后仍然是未注册的,只不过你之前能试用此软件的次数恢复为100次,虽然这样也算是可以无限使用,但始终是不方便,下面我们想办法找到正确的注册码。
用bpx hmemcpy下断拦不下来,想想程序一定会用硬盘ID号来算我们的注册码,所以搜索内存找硬盘ID号的保存地址,一共找到两个地方,然后用bpm来监视这两个地址的读写,断下后,你会发现程序的读写内存都是在库文件krnln.fnr的领空里执行的,断过几次你会发现其中一个地址被其它数据覆盖了,一个地址生成了一串数字,10位的,先把它抄下来,继续监视,发现在krnln的领空里它把这串数字和我们输入的假注册码做比较,比较的方法很简单,是明码比较,相信这就是正确的注册码,退出TRW输入刚才得到的数字,在428743的地方下断,程序不会跳到出错提示那里去了,也就是说注册码是正确的
004286F7 E8 73070000 CALL MOVURLBA.00428E6F
004286FC 83C4 10 ADD ESP,10
004286FF 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
00428702 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
00428705 50 PUSH EAX
00428706 FF75 E8 PUSH DWORD PTR SS:[EBP-18]
00428709 E8 C66DFFFF CALL MOVURLBA.0041F4D4
0042870E 83C4 08 ADD ESP,8
00428711 83F8 00 CMP EAX,0
00428714 B8 00000000 MOV EAX,0
00428719 0F94C0 SETE AL
0042871C 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX <----内存标志
0042871F 8B5D E8 MOV EBX,DWORD PTR SS:[EBP-18]
00428722 85DB TEST EBX,EBX
00428724 74 09 JE SHORT MOVURLBA.0042872F
00428726 53 PUSH EBX
00428727 E8 49070000 CALL MOVURLBA.00428E75
0042872C 83C4 04 ADD ESP,4
0042872F 8B5D EC MOV EBX,DWORD PTR SS:[EBP-14]
00428732 85DB TEST EBX,EBX
00428734 74 09 JE SHORT MOVURLBA.0042873F
00428736 53 PUSH EBX
00428737 E8 39070000 CALL MOVURLBA.00428E75
0042873C 83C4 04 ADD ESP,4
0042873F 837D E4 00 CMP DWORD PTR SS:[EBP-1C],0 <----比较标志,不对就完了
00428743 0F84 EF030000 JE MOVURLBA.00428B38
但是,程序仍然提示注册失败,原以为上面的两个判断点都是判断注册码的,既然我注册码都对了,为什么还会出错,在4288CE上设断,发现程序还是跳到出错提示那里了,看来程序还有判断其它数据的地方。让我们看看这个判断的地方
00428879 E8 FD050000 CALL MOVURLBA.00428E7B
0042887E 83C4 04 ADD ESP,4
00428881 68 04000080 PUSH 80000004
00428886 6A 00 PUSH 0
00428888 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
0042888B 85C0 TEST EAX,EAX
0042888D 75 05 JNZ SHORT MOVURLBA.00428894
0042888F B8 43000000 MOV EAX,43
00428894 50 PUSH EAX
00428895 68 04000000 PUSH 4
0042889A BB 48010000 MOV EBX,148
0042889F E8 C5050000 CALL MOVURLBA.00428E69
004288A4 83C4 34 ADD ESP,34
004288A7 8945 E0 MOV DWORD PTR SS:[EBP-20],EAX <----又在写标志,前面的CALL就是在查ID号
004288AA 8B5D EC MOV EBX,DWORD PTR SS:[EBP-14]
004288AD 85DB TEST EBX,EBX
004288AF 74 09 JE SHORT MOVURLBA.004288BA
004288B1 53 PUSH EBX
004288B2 E8 BE050000 CALL MOVURLBA.00428E75
004288B7 83C4 04 ADD ESP,4
004288BA 8B5D E4 MOV EBX,DWORD PTR SS:[EBP-1C]
004288BD 85DB TEST EBX,EBX
004288BF 74 09 JE SHORT MOVURLBA.004288CA
004288C1 53 PUSH EBX
004288C2 E8 AE050000 CALL MOVURLBA.00428E75
004288C7 83C4 04 ADD ESP,4
004288CA 837D E0 FF CMP DWORD PTR SS:[EBP-20],-1 <----和第一个判断类似,也是比较标志
004288CE 0F84 08020000 JE MOVURLBA.00428ADC
为了弄清楚它到底在判断什么,我把硬盘ID号的存放地址、我能找到的我输入的注册码的地址都监视着,看看程序在干什么,最后发现经过注册码的比较后,程序又拿硬盘ID号来用了,原来程序在拿我的硬盘ID号和内存里一大串的数字在做比较,这一大串数字一看就有点象注册码,又象是硬盘ID,我看了看这些数字里根本就没有我的硬盘ID,当它比较完后,就退出到上面的地方,然后写内存标志,当然这个标志就不是程序要的-1啦,试了几次,发现这些数字每次都一样,我的硬盘ID也不会变,所以这个跳转一定会跳到出错的,也就是说程序在拿我的硬盘ID号来查表,表里没有我的ID号,就提示注册失败,原来作者把已经注册的用户的ID号都做到文件里面,运行的时候先看看我们的ID号是不是注册用户的ID,如果不是,就算注册码正确也是没用的。用UltraEdit打开程序目录下有可能是数据文件的都打开来查找,都没有发现任何数据,因为我想如果把表中的某一个ID改成我自己的,那程序就会认为我是注册过的用户了,于是用bpm监视那一大串ID表,看看程序是怎样生成这个表的,最后发现程序是调用了dp1.fne来算出这个表的,好象还用了RSA的算法,于是就放弃了这个方法,因为这样没有通用性,改了也只能我自己注册成功,而且它的表是加密的算法很复杂,这样只能暴破了。
把4288CE的0F8408020000改成0F8508020000,再输入刚才得到的注册码,就显示注册成功啦。还没完,退出再重新启动程序,程序仍然显示未注册,这里就比较难啦,因为程序肯定启动会判断你注册码对不对,还要判断你的ID是不是注册用户的,程序运行只显示注册窗口,要找到这些比较就有点难了。主要是断点难下,我在这还是用了开始用的方法,先不关掉注册窗口,用TRW在内存中搜索硬盘ID的存放地址,然后用bpm监视读写,重新启动程序,还好,程序保存ID的地址每次都是一样的,这样我们就能看到程序在启动的时候查表了。
00422076 E8 EE6D0000 CALL MOVURLBA.00428E69
0042207B 83C4 34 ADD ESP,34
0042207E 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX <----写标志
00422081 8B5D DC MOV EBX,DWORD PTR SS:[EBP-24]
00422084 85DB TEST EBX,EBX
00422086 74 09 JE SHORT MOVURLBA.00422091
00422088 53 PUSH EBX
00422089 E8 E76D0000 CALL MOVURLBA.00428E75
0042208E 83C4 04 ADD ESP,4
00422091 8B5D D4 MOV EBX,DWORD PTR SS:[EBP-2C]
00422094 85DB TEST EBX,EBX
00422096 74 09 JE SHORT MOVURLBA.004220A1
00422098 53 PUSH EBX
00422099 E8 D76D0000 CALL MOVURLBA.00428E75
0042209E 83C4 04 ADD ESP,4
004220A1 837D D0 FF CMP DWORD PTR SS:[EBP-30],-1 <----比较标志位
004220A5 0F84 4D000000 JE MOVURLBA.004220F8
把4220A5的0F844D000000改成0F854D000000,程序就完美破解了,另外提示一下,找这个地址一定要先进入程序成功注册一次,不然程序是不会经过这里的,因为不注册的话,程序判断你的注册码不对,就直接跳过去了。
用注册机编写器根据下面数据做个内存注册机
中断地址:4286E3
中断次数:1
第一字节:83
指令长度:3
选择内存方式,寄存器选EAX,其它选项不用选
在我机上用这个方法得出的注册码最后会有一个空格,复制的时候不要把空格也复制了
-=End=-
_/_/_/
_/ _/_/_/ _/_/_/ _/_/
_/_/ _/ _/ _/ _/ _/
_/ _/ _/ _/ _/ _/
_/_/_/ _/_/_/ _/ _/ _/
Sam.com[CCG]
23:30 2004-2-27