云飘飘 发表于 2007-8-21 14:26:26

轻轻松松暴破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 编辑 ]

tigerisme 发表于 2007-8-21 16:12:54

不错...谢谢兄弟的好文章

jianwenbin00 发表于 2007-8-22 12:53:32

有一点不懂!爆破了还要输入注册码,就是不知道怎么找重启验证这个环节。

pw2000 发表于 2007-8-22 18:37:55

向楼主学习!!!

dreamz 发表于 2007-8-22 22:50:07

按照楼主的方法试了几次都没成功,看来还我自己还需要多加练习啊/:002

云飘飘 发表于 2007-8-23 07:22:52

你将我提到的三个地方都nop掉,然后保存,运行保存后的文件,成功一定属于你自己./:014

dreamz 发表于 2007-8-23 08:04:01

关键就是"nop掉"具体是怎样的操作我都不知道/:002

云飘飘 发表于 2007-8-23 11:12:30

OD的操作要熟悉啊!

第一种方法:双击汇编代码,在弹出的对话框中输入nop,注意【使用 NOP 填充】的勾请确保勾上,然后按【汇编】按钮就OK了!

第二种方法:在汇编代码行上单击右键,选择【二进制】----->【用NOP填充】。

dreamz 发表于 2007-8-23 16:13:44

多谢云飘飘同学,之前还以为是将jnz之类的指令改为jz呢,看来是我无知了,受教了/:good

郑宇鸣 发表于 2007-8-23 16:42:03

进入算法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
查看完整版本: 轻轻松松暴破AVI Splitter 2.11