轻轻松松暴破AVI Splitter 2.11
【文章标题】: 暴破AVI Splitter 2.11【文章作者】: 梦湾(云飘飘)
【作者邮箱】: [email protected]
【作者主页】: *
【作者QQ号】: *
【软件名称】: AVI Splitter 2.11
【软件大小】: 710KB
【下载地址】: http://86516.onlinedown.net/soft/16960.htm
【加壳方式】: 无壳
【保护方式】: 注册码
【编写语言】: Delphi
【使用工具】: OllyDbg
【操作平台】: Win2k
【软件介绍】: AVI 影片分割工具AVI Splitter,能够将2GB以下的单一AVI影片档分割成多个AVI影片档,
不用重新压缩就可以直接产生分割文件,程序还可以用来压缩/解压缩内建的VFW编码(如:MPEG-4 或 DivX)。
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
安装软件后,启动程序,出现“Trial Version Notification”窗口(试用版声明),点“Enter Registration Key”,
输入试验码987987987987,提示“The registration key is not valid. Application is not registered.”
(注册码无效,程序未注册)。退出程序。
用od载入,搜索相应字串参考,双击后来到这里:
00466F0C|.B8 D46F4600 mov eax, 00466FD4 ; |the registration key is not valid. application is not registered.
00466F11|.E8 D68BFEFF call 0044FAEC ; \avisplit.0044FAEC
在子程序首部(00466E48行)下断,F9运行,点“Enter Registration Key”,输入试验码,程序被成功断下。
00466E48/.55 push ebp
00466E49|.8BEC mov ebp, esp
00466E4B|.6A 00 push 0
00466E4D|.6A 00 push 0
00466E4F|.53 push ebx
00466E50|.8BD8 mov ebx, eax
00466E52|.33C0 xor eax, eax
00466E54|.55 push ebp
00466E55|.68 316F4600 push 00466F31
00466E5A|.64:FF30 push dword ptr fs:
00466E5D|.64:8920 mov dword ptr fs:, esp
00466E60|.8D4D FC lea ecx, dword ptr
00466E63|.BA 486F4600 mov edx, 00466F48 ;ASCII "Please enter the registration key"
00466E68|.B8 746F4600 mov eax, 00466F74 ;ASCII "Registration"
00466E6D|.E8 968DFEFF call 0044FC08
00466E72|.84C0 test al, al
00466E74|.0F84 9C000000 je 00466F16 ;如果注册码为空,则跳走,这里因为有试验码,不跳
00466E7A|.8D55 F8 lea edx, dword ptr
00466E7D|.8B45 FC mov eax, dword ptr
00466E80|.E8 4313FAFF call 004081C8 ;算法call
00466E85|.8B55 F8 mov edx, dword ptr
00466E88|.8D45 FC lea eax, dword ptr
00466E8B|.E8 C4CDF9FF call 00403C54 ;算法call
00466E90|.8B45 FC mov eax, dword ptr
00466E93|.E8 C4010000 call 0046705C ;算法call;我在这里跟进,发现是查表比较
00466E98|.A2 545A4900 mov byte ptr , al
00466E9D|.803D 545A4900>cmp byte ptr , 0
00466EA4|.74 5B je short 00466F01 ;零标志位为1,则注册不成功;这里是暴破点
00466EA6|.B8 585A4900 mov eax, 00495A58
00466EAB|.8B55 FC mov edx, dword ptr
00466EAE|.E8 5DCDF9FF call 00403C10
00466EB3|.BA 8C6F4600 mov edx, 00466F8C ;ASCII "Continue"
00466EB8|.8B83 D0020000 mov eax, dword ptr
00466EBE|.E8 555EFCFF call 0042CD18
00466EC3|.B2 01 mov dl, 1
00466EC5|.8B83 D0020000 mov eax, dword ptr
00466ECB|.8B08 mov ecx, dword ptr
00466ECD|.FF51 5C call dword ptr
00466ED0|.33D2 xor edx, edx
00466ED2|.8B83 D8020000 mov eax, dword ptr
00466ED8|.8B08 mov ecx, dword ptr
00466EDA|.FF51 5C call dword ptr
00466EDD|.33D2 xor edx, edx
00466EDF|.8B83 D4020000 mov eax, dword ptr
00466EE5|.8B08 mov ecx, dword ptr
00466EE7|.FF51 5C call dword ptr
00466EEA|.6A 00 push 0 ; /Arg1 = 00000000
00466EEC|.66:8B0D 986F4>mov cx, word ptr ; |
00466EF3|.B2 02 mov dl, 2 ; |
00466EF5|.B8 A46F4600 mov eax, 00466FA4 ; |ASCII "Application is successfully registered."
00466EFA|.E8 ED8BFEFF call 0044FAEC ; \avisplit.0044FAEC
00466EFF|.EB 15 jmp short 00466F16 ;注册成功,就跳走!
00466F01|>6A 00 push 0 ; /Arg1 = 00000000
00466F03|.66:8B0D 986F4>mov cx, word ptr ; |
00466F0A|.33D2 xor edx, edx ; |
00466F0C|.B8 D46F4600 mov eax, 00466FD4 ; |the registration key is not valid. application is not registered.
00466F11|.E8 D68BFEFF call 0044FAEC ; \avisplit.0044FAEC
00466F16|>33C0 xor eax, eax
00466F18|.5A pop edx
00466F19|.59 pop ecx
00466F1A|.59 pop ecx
00466F1B|.64:8910 mov dword ptr fs:, edx
00466F1E|.68 386F4600 push 00466F38
00466F23|>8D45 F8 lea eax, dword ptr
00466F26|.BA 02000000 mov edx, 2
00466F2B|.E8 B0CCF9FF call 00403BE0
00466F30\.C3 retn
本来想追出注册码,在00466E93行的call中追到一大堆数据,我以为是注册码,可是试了好几个,均不成功。哪位要是追出了注册码,还望赐教!!
没办法,不能就这样算了!
暴破之!!
进入算法call,在首行,od显示:“本地调用来自 00466E93, 0046750A”。两处调用,一是输入注册码验证,另一则是程序启动时验证。
00466EA4|. /74 5B je short 00466F01 ;零标志位为1,则注册不成功;这里是暴破点
00467516|. /74 07 je short 0046751F ;零标志位为1,则注册不成功;
将上面的两个跳转nop掉,保存程序。重启程序,注册窗口不再显示。找到注册处,随便输入数字,注册成功!!呵呵!!!
打开about窗口,显示“UNREGISTERED VERSION”(未注册版本),不爽!一并改之!!
打开修改过的程序,搜索“UNREGISTERED VERSION”超级字串,双击来到这里:
0046314E|.80BB 08030000>cmp byte ptr , 0 ;暴破点
00463155|.74 12 je short 00463169
00463157|.BA C4314600 mov edx, 004631C4 ;registered version
0046315C|.8B83 F4020000 mov eax, dword ptr
00463162|.E8 B19BFCFF call 0042CD18
00463167|.EB 10 jmp short 00463179
00463169|>BA E0314600 mov edx, 004631E0 ;unregistered version
0046316E|.8B83 F4020000 mov eax, dword ptr
00463174|.E8 9F9BFCFF call 0042CD18
将0046314E行的跳转nop掉,保存。再运行看看,哈哈,“REGISTERED VERSION”,OK了!
一共只修改了3处,成了绿色版本。收工了!!!
--------------------------------------------------------------------------------
【经验总结】
没办法时,就暴破!呵呵!!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年08月21日 14:20:34
[ 本帖最后由 云飘飘 于 2007-8-21 15:09 编辑 ] 不错...谢谢兄弟的好文章 有一点不懂!爆破了还要输入注册码,就是不知道怎么找重启验证这个环节。 向楼主学习!!! 按照楼主的方法试了几次都没成功,看来还我自己还需要多加练习啊/:002 你将我提到的三个地方都nop掉,然后保存,运行保存后的文件,成功一定属于你自己./:014 关键就是"nop掉"具体是怎样的操作我都不知道/:002 OD的操作要熟悉啊!
第一种方法:双击汇编代码,在弹出的对话框中输入nop,注意【使用 NOP 填充】的勾请确保勾上,然后按【汇编】按钮就OK了!
第二种方法:在汇编代码行上单击右键,选择【二进制】----->【用NOP填充】。 多谢云飘飘同学,之前还以为是将jnz之类的指令改为jz呢,看来是我无知了,受教了/:good 进入算法call,在首行,od显示:“本地调用来自 00466E93, 0046750A”。
这句怎么解释啊 楼主大哥?
00466E80|.E8 4313FAFF call 004081C8 ;算法call
00466E85|.8B55 F8 mov edx, dword ptr
00466E88|.8D45 FC lea eax, dword ptr
00466E8B|.E8 C4CDF9FF call 00403C54 ;算法call
00466E90|.8B45 FC mov eax, dword ptr
00466E93|.E8 C4010000 call 0046705C ;算法call;我在这里跟进,发现是查表比较
这些call 里面好像没有哇
页:
[1]
2