首页
社区
课程
招聘
[旧帖] [原创]轻轻松松暴破AVI Splitter 2.11 0.00雪花
发表于: 2007-8-21 14:24 6446

[旧帖] [原创]轻轻松松暴破AVI Splitter 2.11 0.00雪花

2007-8-21 14:24
6446
【文章标题】: 暴破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期)

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
呵呵虽然是暴破,还是支持下.
2007-8-21 14:31
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢分享!在这混了好些天了!今天M个泡!
2007-8-21 14:53
0
雪    币: 139
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
00466E93  |.  E8 C4010000   call    0046705C                         ;  算法call;我在这里跟进,发现是查表比较
这里 可以直接跟进 0046705C
然后 前两句改为
or al,1
retn
2007-8-21 15:52
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
一样是暴破,呵呵!
比我的简单!!
2007-8-21 15:59
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
6
0046709C  |.  E8 7FF4FFFF   call    00466520
004670A1  |.  8D45 E8       lea     eax, dword ptr [ebp-18]
004670A4  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
004670A7  |.  E8 E8F4FFFF   call    00466594                        ;  这里得出的就是我们输入的假码的MD5值
004670AC  |.  BE 1B080000   mov     esi, 81B                        ;  2075。总共有这么多个数,就是循环这么多次,有空就慢慢看了
004670B1  |.  8B3D 80434900 mov     edi, dword ptr [494380]         ;  avisplit.00482E04
004670B7  |>  8D45 E0       /lea     eax, dword ptr [ebp-20]
004670BA  |.  8BD7          |mov     edx, edi
004670BC  |.  E8 1FCDF9FF   |call    00403DE0                       ;  这个是逐个取出那个表中的字符串,16位一串,就是某个注册码的MD5值
004670C1  |.  8B45 E0       |mov     eax, dword ptr [ebp-20]        ;  从表中取得的一串MD5值。如果和我们输入的值相同的话就注册成功
004670C4  |.  8B55 F8       |mov     edx, dword ptr [ebp-8]         ;  我们输入的假码的MD5值
004670C7  |.  E8 9CCEF9FF   |call    00403F68                       ;  比较函数
004670CC      75 04         jnz     short 004670D2                  ;  NOP掉的话...........
004670CE  |.  B3 01         |mov     bl, 1                          ;  注册标志位
004670D0  |.  EB 06         |jmp     short 004670D8

我觉得:作者这样做有个好处,省去了注册算法的编程。只要你给钱作者,作者从他准备好的表中随便给你个注册码。我想只要有一个人共享出自己的注册码,全世界都通用了。我没有发现作者取机器码的地方。大家其他人看看有没有发现到。

MD5的算法可逆吗?谁知道??请赐教
2007-8-21 16:30
0
雪    币: 347
活跃值: (25)
能力值: ( LV9,RANK:420 )
在线值:
发帖
回帖
粉丝
7
记得在《加密解密II》里老大说MD5是不可逆的
2007-8-21 19:24
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
谢谢6楼的,难怪偶追不出注册码的,呵呵,居然碰到一个不可逆的md5算法!
我当时是发现有一个"7616xxxxxxxxxxxxxxxxx"(现在记不得了),查表运算不成功,只有暴破了!
2007-8-21 20:17
0
游客
登录 | 注册 方可回帖
返回
//