【文章标题】: 暴破AVI Splitter 2.11
【文章作者】: 梦湾
【作者邮箱】: Lzg440@163.com
【作者主页】: *
【作者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:[eax]
00466E5D |. 64:8920 mov dword ptr fs:[eax], esp
00466E60 |. 8D4D FC lea ecx, dword ptr [ebp-4]
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 [ebp-8]
00466E7D |. 8B45 FC mov eax, dword ptr [ebp-4]
00466E80 |. E8 4313FAFF call 004081C8 ; 算法call
00466E85 |. 8B55 F8 mov edx, dword ptr [ebp-8]
00466E88 |. 8D45 FC lea eax, dword ptr [ebp-4]
00466E8B |. E8 C4CDF9FF call 00403C54 ; 算法call
00466E90 |. 8B45 FC mov eax, dword ptr [ebp-4]
00466E93 |. E8 C4010000 call 0046705C ; 算法call;我在这里跟进,发现是查表比较
00466E98 |. A2 545A4900 mov byte ptr [495A54], al
00466E9D |. 803D 545A4900>cmp byte ptr [495A54], 0
00466EA4 |. 74 5B je short 00466F01 ; 零标志位为1,则注册不成功;这里是暴破点
00466EA6 |. B8 585A4900 mov eax, 00495A58
00466EAB |. 8B55 FC mov edx, dword ptr [ebp-4]
00466EAE |. E8 5DCDF9FF call 00403C10
00466EB3 |. BA 8C6F4600 mov edx, 00466F8C ; ASCII "Continue"
00466EB8 |. 8B83 D0020000 mov eax, dword ptr [ebx+2D0]
00466EBE |. E8 555EFCFF call 0042CD18
00466EC3 |. B2 01 mov dl, 1
00466EC5 |. 8B83 D0020000 mov eax, dword ptr [ebx+2D0]
00466ECB |. 8B08 mov ecx, dword ptr [eax]
00466ECD |. FF51 5C call dword ptr [ecx+5C]
00466ED0 |. 33D2 xor edx, edx
00466ED2 |. 8B83 D8020000 mov eax, dword ptr [ebx+2D8]
00466ED8 |. 8B08 mov ecx, dword ptr [eax]
00466EDA |. FF51 5C call dword ptr [ecx+5C]
00466EDD |. 33D2 xor edx, edx
00466EDF |. 8B83 D4020000 mov eax, dword ptr [ebx+2D4]
00466EE5 |. 8B08 mov ecx, dword ptr [eax]
00466EE7 |. FF51 5C call dword ptr [ecx+5C]
00466EEA |. 6A 00 push 0 ; /Arg1 = 00000000
00466EEC |. 66:8B0D 986F4>mov cx, word ptr [466F98] ; |
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 [466F98] ; |
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:[eax], edx
00466F1E |. 68 386F4600 push 00466F38
00466F23 |> 8D45 F8 lea eax, dword ptr [ebp-8]
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 [ebx+308], 0 ; 暴破点
00463155 |. 74 12 je short 00463169
00463157 |. BA C4314600 mov edx, 004631C4 ; registered version
0046315C |. 8B83 F4020000 mov eax, dword ptr [ebx+2F4]
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 [ebx+2F4]
00463174 |. E8 9F9BFCFF call 0042CD18
将0046314E行的跳转nop掉,保存。再运行看看,哈哈,“REGISTERED VERSION”,OK了!
一共只修改了3处,成了绿色版本。收工了!!!
--------------------------------------------------------------------------------
【经验总结】
没办法时,就暴破!呵呵!!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年08月21日 14:20:34
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)