首页
社区
课程
招聘
[旧帖] [原创]新手看――暴力破解MP3 Cutter Joiner1.17 0.00雪花
2006-9-24 16:14 5815

[旧帖] [原创]新手看――暴力破解MP3 Cutter Joiner1.17 0.00雪花

2006-9-24 16:14
5815
【文章标题】: 暴力破解MP3 Cutter Joiner1.17
【文章作者】: Sirius
【作者邮箱】: sirius007@21cn.com
【作者QQ号】: 78644612
【软件名称】: MP3 Cutter Joiner
【软件大小】: 1.22M
【下载地址】: 自己搜索下载
【加壳方式】: 没有
【保护方式】: 使用次数限制+注册提示框
【编写语言】: Object Pascal
【使用工具】: Ollydbg+UltraEdit
【操作平台】: Win XP
【软件介绍】: 一款可以进行大多数音频之间的转换,截取的软件!
【作者声明】: 只为技术而破解,试图探讨一下此类软件的解密方法。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  前言:好久没有搞过这个了,都手生了!无奈刚买了手机想做铃声,随便下了个软件回去发现还挺好用,可惜未注册版本只能处理15个文件!只好自己动手丰衣足食了,也就当纪念一下我新买的K800i吧!呵呵!
  
  ----------------------------------------------------------------------------------------
  
  侦壳脱壳:用PEiD查壳,无壳!直接用W32Dasm反汇编发现不能在W32Dasm下面下断!难道Object Pascal的程序,哦,是用depil编译器编译的!不能在W32Dasm下面调试?请高手告知!
  
  破解过程:
  用Ollydbg载入,搜索所有参考字符串,发现"Invalid register code! Please retry!"和一处"Congratuation! You have successfully registered!".在三处全部下断,双击第一处"Invalid register code! Please retry!"来到这里:
  
  004BA762   /74 1A           je short MP3_Cutt.004BA77E        //这里有个跳转很可疑,在这里也下断!原来这里是比对输入的注册名是否合适!合适才跳
  004BA764   |6A 00           push 0
  004BA766   |66:8B0D F8A84B0>mov cx,word ptr ds:[4BA8F8]
  004BA76D   |B2 02           mov dl,2
  004BA76F   |B8 04A94B00     mov eax,MP3_Cutt.004BA904          //双击来到这里         ; ASCII "Invalid register code! Please retry!"
  004BA774   |E8 A70DF8FF     call MP3_Cutt.0043B520            
  004BA779   |E9 2E010000     jmp MP3_Cutt.004BA8AC              //跳死了!
  004BA77E   \8D55 EC         lea edx,dword ptr ss:[ebp-14]     //刚开始这个跳转不能实现,改掉让他坚决跳,呵呵!
  004BA781    8B87 18030000   mov eax,dword ptr ds:[edi+318]    //从这里开始是检查注册码格式是否正确
  004BA787    E8 A876F8FF     call MP3_Cutt.00441E34            //下面就是去注册名和注册码了
  004BA78C    8B45 EC         mov eax,dword ptr ss:[ebp-14]     //下面取注册名地址 内容
  004BA78F    8D55 F8         lea edx,dword ptr ss:[ebp-8]
  004BA792    E8 89E5F4FF     call MP3_Cutt.00408D20
  004BA797    8D55 E8         lea edx,dword ptr ss:[ebp-18]
  004BA79A    8B45 F8         mov eax,dword ptr ss:[ebp-8]
  004BA79D    E8 B2E5F4FF     call MP3_Cutt.00408D54
  004BA7A2    8B55 E8         mov edx,dword ptr ss:[ebp-18]
  004BA7A5    8D45 F8         lea eax,dword ptr ss:[ebp-8]
  004BA7A8    E8 8F9FF4FF     call MP3_Cutt.0040473C
  004BA7AD    837D FC 00      cmp dword ptr ss:[ebp-4],0
  004BA7B1    0F84 F5000000   je MP3_Cutt.004BA8AC
  004BA7B7    837D F8 00      cmp dword ptr ss:[ebp-8],0
  004BA7BB    0F84 EB000000   je MP3_Cutt.004BA8AC
  004BA7C1    8B45 F8         mov eax,dword ptr ss:[ebp-8]
  004BA7C4    E8 93A1F4FF     call MP3_Cutt.0040495C
  004BA7C9    85C0            test eax,eax
  004BA7CB    7E 38           jle short MP3_Cutt.004BA805
  004BA7CD    BA 01000000     mov edx,1
  004BA7D2    8B4D F8         mov ecx,dword ptr ss:[ebp-8]
  004BA7D5    0FB64C11 FF     movzx ecx,byte ptr ds:[ecx+edx-1]
  004BA7DA    83F9 30         cmp ecx,30
  004BA7DD    7C 08           jl short MP3_Cutt.004BA7E7
  004BA7DF    8B5D F8         mov ebx,dword ptr ss:[ebp-8]
  004BA7E2    83F9 39         cmp ecx,39
  004BA7E5    7E 1A           jle short MP3_Cutt.004BA801
  004BA7E7    6A 00           push 0
  004BA7E9    66:8B0D F8A84B0>mov cx,word ptr ds:[4BA8F8]
  004BA7F0    B2 02           mov dl,2
  004BA7F2    B8 04A94B00     mov eax,MP3_Cutt.004BA904                   ; ASCII "Invalid register code! Please retry!"
  .
  .
  .
  先让程序跑起来,F9运行,输入注册名sirius,假码1234567,被拦,停在004BA762,显示这个跳转实现不了,再F9就跳死了!
  先把这个改掉,打开UltraEdit找到偏移地址把741A改成EB1A,让它跳过去先!

  用Ollydbg再次载入这次运行停在004BA76F这里,看来跳过了注册名检查,再往下分析:
  
  双击"Congratuation! You have successfully registered!"来到下面:
  
  004BA831    79 03           jns short MP3_Cutt.004BA836
  004BA833    83D0 00         adc eax,0
  004BA836    8BF0            mov esi,eax
  004BA838    8B45 F8         mov eax,dword ptr ss:[ebp-8]
  004BA83B    E8 10E6F4FF     call MP3_Cutt.00408E50
  004BA840    3BF0            cmp esi,eax                                //这个地方是不是很可疑啊,标准比对格式啊!
  004BA842    75 53           jnz short MP3_Cutt.004BA897                //最后结果比对,不正确就跳,我们输入的是假码肯定不正确了,所以不要让它跳,把这句抹掉.
  004BA844    6A 00           push 0
  004BA846    66:8B0D F8A84B0>mov cx,word ptr ds:[4BA8F8]
  004BA84D    B2 02           mov dl,2
  004BA84F    B8 34A94B00     mov eax,MP3_Cutt.004BA934                  程序运行到这里就出现"Congratuation! You have successfully registered!"的正确信息了//双击来到这里 ; ASCII"Congratuation! You have successfully registered!"
  
  004BA854    E8 C70CF8FF     call MP3_Cutt.0043B520
  004BA859    A1 3CDE4C00     mov eax,dword ptr ds:[4CDE3C]
  004BA85E    C600 01         mov byte ptr ds:[eax],1
  004BA861    A1 38DF4C00     mov eax,dword ptr ds:[4CDF38]
  004BA866    8B00            mov eax,dword ptr ds:[eax]
  004BA868    33C9            xor ecx,ecx
  004BA86A    BA 04000000     mov edx,4
  004BA86F    8B18            mov ebx,dword ptr ds:[eax]
  004BA871    FF53 10         call dword ptr ds:[ebx+10]
  004BA874    8B15 3CDE4C00   mov edx,dword ptr ds:[4CDE3C]               ; MP3_Cutt.004CFE56
  004BA87A    A1 38DF4C00     mov eax,dword ptr ds:[4CDF38]
  004BA87F    8B00            mov eax,dword ptr ds:[eax]
  004BA881    B9 01000000     mov ecx,1
  004BA886    E8 A10CF6FF     call MP3_Cutt.0041B52C
  004BA88B    A1 04FE4C00     mov eax,dword ptr ds:[4CFE04]
  004BA890    E8 2B3EFAFF     call MP3_Cutt.0045E6C0
  004BA895    EB 15           jmp short MP3_Cutt.004BA8AC
  004BA897    6A 00           push 0
  004BA899    66:8B0D F8A84B0>mov cx,word ptr ds:[4BA8F8]
  004BA8A0    B2 02           mov dl,2
  004BA8A2    B8 04A94B00     mov eax,MP3_Cutt.004BA904                   ; ASCII "Invalid register code! Please retry!"
  004BA8A2    B8 04A94B00     mov eax,MP3_Cutt.004BA904                   ; ASCII "Invalid register code! Please retry!"
  004BA8A7    E8 740CF8FF     call MP3_Cutt.0043B520
  004BA8AC    33C0            xor eax,eax
  004BA8AE    5A              pop edx
  004BA8AF    59              pop ecx
  004BA8B0    59              pop ecx
  .
  .
  .
  好了,分析完了,再次打开UltraEdit到004BA842的偏移地址,把这句抹掉,即把004BA842 的 7553 改成9090!再次保存,OK!
  把修改的文件复制到MP3 Cutter Joiner文件夹运行,在注册提示里填入任意的注册名和注册码,点注册,注册成功,^_^!
  
--------------------------------------------------------------------------------
【经验总结】
  软件不错,就是加密太脆弱了,虽然没有看到密码明文(没有在子CALL里跟),但是加密程序太明显了,三个"Invalid register code! Please retry!"组成了一个完整的注册算法,中间放了一个"Congratuation! You have successfully registered!"
  这个太明显了!不用跟进就知道怎么一回事了,一共改两个地方,第一个是让它来到注册的地方,第二个是让它来到正确提示的地方,就这么简单!子CALL也懒得跟了,等有时间在看看吧,大概扫了一下算法还挺长的,但是有什么用呢?赶紧先去做铃声了!
  嘿嘿!现在上班了,也不上进了.也就是图个方便才这么搞一下,平时懒得动,呵呵!还是学生时代好啊!

_____________________________@
№←┥在一个皓圆之夜,缓缓走来一匹西北狼!
对着明月,仰天长啸!!!
???!!!~~~~~~~ㄨ⌒Ψ^ō^.....
?①?②西北^犭良ㄌ
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年09月23日 Sirius 09:11:04

阿里云助力开发者!2核2G 3M带宽不限流量!6.18限时价,开 发者可享99元/年,续费同价!

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
binbinbin 28 2006-9-24 16:21
2
0
大家都应该试试哦!!!
游客
登录 | 注册 方可回帖
返回