超强组合搞定Delphi程序[网络技术]
本文“超强组合搞定Delphi程序[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本篇文章源自《黑客防线》2007年9月刊
转载请注明版权
文/图 December
===================================
关于破解来说,除了必备的底子知识外,工具的组合利用也是非常重要的,组合得好,非常利于快速破解程序.这次就给大家介绍一下OD+DeDe+PE Explorer这个超强组合在破解中的应用.
超强视频转Flash是一款以难以置信的超快速度实现对目前已支持的文件格局到FLV/AVI/WMV/MPG/MOV等格局之间的转换,其特长是对3GP和MP4的支持.因为个人需求,想用它来转换点文件,不过就是看到未注册挺碍眼的,所以决意试试搞定它.
首先当然是利用PEiD来火力探测一下是利用了什么语言来编写的,如图1所示,很明显是是Borland Delphi编写的,并且PE嗅探后果也相同.固然注册有提醒失利,但是这次我们不利用这个办法来破解它,因为是Delphi程序,所以利用DeDe来对付它.但有时刻DeDe载入解析后,大概代码非常多,会让你眼花缭乱,毕竟哪一个才是精确的事件按钮呢?
图1
这里举荐利用PE Explorer来查看,将程序丢到PE Explorer上去,载入后,点击"资源查看/编辑器",会看如图2所示的后果,此中有一个"RC数据",它是Delphi程序的一个特点,C、VB等编程语言是没有的.按照解析,可以知道"TFRMMAIN"是关键的地方,所以将其展开,后果如图3所示,很明显,"btnRegisterClick"就是点击注册的按钮事件.
图2
图3
既然已经找到按钮事件了,这时便可以将PE Explorer关闭了,因为它已经完成使命了.这个时刻,立马将程序丢到DeDe中去解析,因为方才已经找到了按钮事件,所以在DeDe中只需找与按钮事件相同的便可,后果如图4所示,可以发现关键地方是在0053851C这里.既然已经找到地址了,DeDe也已经完成它的任务了,可将其关闭掉.下面翻开OD,将程序载入进去,直接来到关键之处.
图4
0053857F E8 68C7ECFF call VideoCon.00404CEC
00538584 83BB 50040000 >cmp dword ptr ds:[ebx+450],0
;能否输入用户名
0053858B 75 20 jnz short VideoCon.005385AD
0053858D BA 58865300 mov edx,VideoCon.00538658;P
00538592 8B83 5C030000 mov eax,dword ptr ds:[ebx+35C]
00538598 E8 BF39FAFF call VideoCon.004DBF5C
0053859D 8B83 34030000 mov eax,dword ptr ds:[ebx+334]
005385A3 8B10 mov edx,dword ptr ds:[eax]
0053857747.net FF92 C4000000 call dword ptr ds:[edx+C4]
005385AB EB 6B jmp short VideoCon.00538618
005385AD 83BB 54040000 >cmp dword ptr ds:[ebx+454],0
;能否输入注册码
005385B4 75 20 jnz short VideoCon.005385D6
005385B6 BA 8C865300 mov edx,VideoCon.0053868C;P
005385BB 8B83 5C030000 mov eax,dword ptr ds:[ebx+35C]
005385C1 E8 9639FAFF call VideoCon.004DBF5C
005385C6 8B83 3C030000 mov eax,dword ptr ds:[ebx+33C]
005385CC 8B10 mov edx,dword ptr ds:[eax]
005385CE FF92 C4000000 call dword ptr ds:[edx+C4]
005385D4 EB 42 jmp short VideoCon.00538618
005385D6 8BC3 mov eax,ebx
005385D8 E8 B7010000 call VideoCon.00538794
;关键call
005385DD 85C0 test eax,eax
005385DF 74 19 je short VideoCon.005385FA
;关键跳
005385E1 BA DC865300 mov edx,VideoCon.005386DC;T
程序先判断能否输入用户名和注册码,假如都输入了,就直接往下到005385D8这个call上持续判断.这一次,我们跟进这个call去看看毕竟是若何判断的.
005387D8 |. E8 8BC7ECFF call VideoCon.00404F68
005387DD |. 83F8 16 cmp eax,16
;对比注册码是不是22位
005387E0 |. 0F85 5D01000>jnz VideoCon.00538943
;不是就玩完
本来这里判断注册码是不是22位,不是就跳向死亡了.
005387E6 |. 8D4D EC lea ecx,dword ptr ss:[ebp-14]
005387E9 |. BA 03000000 mov edx,3
005387EE |. 8B83 5404000>mov eax,dword ptr ds:[ebx+454]
;将注册码保存到eax
005387F4 |. E8 3714F0FF call VideoCon.00439C30
;取注册码前三位
005387F9 |. 8B45 EC mov eax,dword ptr ss:[ebp-14]
;保存到eax
005387FC |. BA 78895300 mov edx,VideoCon.00538978
;FLV
00538801 |. E8 AEC8ECFF call VideoCon.004050B4
;对比前三位是不是FLV
00538806 |. 0F85 3701000>jnz VideoCon.00538943
;不是就玩完
这里判断注册码前三位是不是FLV,不是就OVER.
0053880C |. 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
0053880F |. BA 13000000 mov edx,13
00538814 |. 8B83 5404000>mov eax,dword ptr ds:[ebx+454]
0053881A |. E8 8114F0FF call VideoCon.00439CA0
0053881F |. 837D FC 00 cmp dword ptr ss:[ebp-4],0
;再次检测能否输入用户名
00538823 |. 0F84 1A01000>je VideoCon.00538943
00538829 |. 837D F8 00 cmp dword ptr ss:[ebp-8],0
;再次检测能否输入注册码
再一次检测注册信息.
0053882D |. 0F84 1001000>je VideoCon.00538943
00538833 |. 33F6 xor esi,esi
00538835 |> 8B45 F8 /mov eax,dword ptr ss:[ebp-8]
00538838 |. 8A1C30 |mov bl,byte ptr ds:[eax+esi]
0053883B |. 80FB 2D |cmp bl,2D ; 对比是不是-
0053883E |. 74 15 |je short VideoCon.00538855
00538840 |. 8D45 E8 |lea eax,dword ptr ss:[ebp-18]
00538843 |. 8BD3 |mov edx,ebx
00538845 |. E8 36C6ECFF |call VideoCon.00404E80
0053884A |. 8B55 E8 |mov edx,dword ptr ss:[ebp-18]
0053884D |. 8D45 F4 |lea eax,dword ptr ss:[ebp-C]
00538850 |. E8 1BC7ECFF |call VideoCon.00404F70
00538855 |> 46 |inc esi
00538856 |. 83FE 13 |cmp esi,13
00538859 |.^ 75 DA \jnz short VideoCon.00538835 ;循环
这里判断是不是有3个"-"(不含引号).
0053885B |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
0053885E |. 8B55 F4 mov edx,dword ptr ss:[ebp-C]
00538861 |. E8 CAC4ECFF call VideoCon.00404D30
00538866 |. 8D45 F4 lea eax,dword ptr ss:[ebp-C]
00538869 |. E8 2AC4ECFF call VideoCon.00404C98
0053886E |. 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00538871 |. E8 F2C6ECFF call VideoCon.00404F68
00538876 |. 83F8 10 cmp eax,10
;对比是不是16位
00538879 |. 0F85 C400000>jnz VideoCon.00538943
这里判断除前三位和三个"-"之外剩下的位数是不是16位.
0053887F |. 33F6 xor esi,esi
00538881 |> 8BC6 /mov eax,esi
00538883 |. 25 01000080 |and eax,80000001
00538888 |. 79 05 |jns short VideoCon.0053888F
0053888A |. 48 |dec eax
0053888B |. 83C8 FE |or eax,FFFFFFFE
0053888E |. 40 |inc eax
0053888F |> 85C0 |test eax,eax
00538891 |. 75 1B |jnz short VideoCon.005388AE
00538893 |. 8D45 E4 |lea eax,dword ptr ss:[ebp-1C]
00538896 |. 8B55 F8 |mov edx,dword ptr ss:[ebp-8]
00538899 |. 8A1432 |mov dl,byte ptr ds:[edx+esi]
;取奇数位
0053889C |. E8 DFC5ECFF |call VideoCon.00404E80
005388A1 |. 8B55 E4 |mov edx,dword ptr ss:[ebp-1C]
005388A4 |. 8D45 F0 |lea eax,dword ptr ss:[ebp-10]
005388A7 |. E8 C4C6ECFF |call VideoCon.00404F70
005388AC |. EB 19 |jmp short VideoCon.005388C7
005388AE |> 8D45 E0 |lea eax,dword ptr ss:[ebp-20]
005388B1 |. 8B55 F8 |mov edx,dword ptr ss:[ebp-8]
005388B4 |. 8A1432 |mov dl,byte ptr ds:[edx+esi]
;取偶数位
005388B7 |. E8 C4C5ECFF |call VideoCon.00404E80
005388BC |. 8B55 E0 |mov edx,dword ptr ss:[ebp-20]
005388BF |. 8D45 F4 |lea eax,dword ptr ss:[ebp-C]
005388C2 |. E8 A9C6ECFF |call VideoCon.00404F70
005388C7 |> 46 |inc esi
005388C8 |. 83FE 10 |cmp esi,10
;循环16次
005388CB |.^75 B4 \jnz short VideoCon.00538881
;未取完就持续取
将剩下的16位,辨别获得奇数组合和偶数组合.
005388CD |. 8D45 FC lea eax,dword ptr ss:[ebp-4]
005388D0 |. E8 C3C3ECFF call VideoCon.00404C98
;取用户名
005388D5 |. 33F6 xor esi,esi
005388D7 |> 8D45 DC /lea eax,dword ptr ss:[ebp-24]
005388DA |. BA 08000000 |mov edx,8
005388DF |. 2BD6 |sub edx,esi
005388E1 |. 8B4D F4 |mov ecx,dword ptr ss:[ebp-C]
;获得的偶数位组合
005388E4 |. 87747.net411 FF |mov dl,byte ptr ds:[ecx+edx-1]
;再将其取倒
将获得的偶数位组合再倒取一次.
005388E8 |. E8 93C5ECFF |call VideoCon.00404E80
005388ED |. 8B55 DC |mov edx,dword ptr ss:[ebp-24]
005388F0 |. 8D45 FC |lea eax,dword ptr ss:[ebp-4]
005388F3 |. E8 78C6ECFF |call VideoCon.00404F70
005388F8 |. 46 |inc esi
005388F9 |. 83FE 08 |cmp esi,8
005388FC |.^ 75 D9 \jnz short VideoCon.005388D7
005388FE |. 8D55 D8 lea edx,dword ptr ss:[ebp-28]
00538901 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
;获得的奇数位组合
00538904 |. E8 6326FFFF call VideoCon.0052AF6C
;MD5运算
00538909 |. 8B55 D8 mov edx,dword ptr ss:[ebp-28]
;MD5运算后果
0053890C |. 8D45 F0 lea eax,dword ptr ss:[ebp-10]
0053890F |. E8 1CC4ECFF call VideoCon.00404D30
00538914 |. 8D4D D4 lea ecx,dword ptr ss:[ebp-2C]
00538917 |. BA 08000000 mov edx,8
0053891C |. 8B45 F0 mov eax,dword ptr ss:[ebp-10]
0053891F |. E8 0014F0FF call VideoCon.00439D24
00538924 |. 8B55 D4 mov edx,dword ptr ss:[ebp-2C]
;MD5值的最后8位
将奇数位组合举行MD5运算,并取最后8位.
00538927 |. 8D45 F0 lea eax,dword ptr ss:[ebp-10]
0053892A |. E8 01C4ECFF call VideoCon.00404D30
0053892F |. 8B45 FC mov eax,dword ptr ss:[ebp-4]
;取倒后的偶数位组合
00538932 |. 8B55 F0 mov edx,dword ptr ss:[ebp-10]
00538935 |. E8 7AC7ECFF call VideoCon.004050B4
;对比
0053893A |. 75 05 jnz short VideoCon.00538941
;不相等就玩完
将最后8位与取倒后的偶数位组合举行对比,相等就注册成功,不相等注册失利.
好了,到这里整个注册流程就很明显了,相信计算出注册码并非件艰难的事情了,所以来计算一下吧.
我输入的为Name:December,Code: FLV-12365-47890-abcdef.提取出来的奇数位组合为13579ace;提取出来的偶数位组合为26480bdf;奇数位MD5运算后并取8位的后果为0FAF32D7;偶数位再倒取后的后果为fdb08462,所以这里只需求将0FAF32D7倒取后再替换偶数位组合里的位数去就行了,替换后为:FLV-173D5-2739F-aAcFe0.毕竟注册信息成不成功呢?考证一下不就知道了吗?后果如图5所示.点"OK"按钮后,关闭程序再运行,发现注册框已经变灰了,并显示已经注册,看来注册信息是成功的.
图5
本文主要介绍若何利用PE Explorer去肯定按钮事件,并通过DeDe找到关键地方的代码地址,再结合简单的汇编底子知识和简单的数学运算,简简单单地搞定这款程序.但愿本文能对那些还不晓得若何肯定按钮事件的朋友有一些帮忙,最后感激你看完好文
以上是“超强组合搞定Delphi程序[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |