看我怎样冲破你的时间限制[网络技术]
本文“看我怎样冲破你的时间限制[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Okoker Brains Practicer 1.9是一款益智游戏,玲珑而精灵,很合适在工作之余小玩一把.但它是一款同享软件,不注册时有时间限制,只能玩2分钟.2分钟?呵呵,不免太不人性啦!那咱们本日就来玩玩它.
脱壳
查壳显示为“ASPack 2.12 -> Alexey Solodovnikov”,呵呵,这么简单的壳啊,那就用工具脱吧.试了一下,竟然不行,脱不了啊.看来,这大概是个变形壳,那只有手脱啦.下面是手工脱壳历程.
用OD载入软件,停在下面的进口处.
00523001 > 60 PUSHAD
00523002 E8 03000000 CALL Brains_P.0052300A
00523007 - E9 EB045D45 JMP 45AF34F7
第一条语句是“PUSHAD”,在下面四周看看有没有“POPAD”,很遗憾,没有.那单步跟踪吧,呵呵,什么时刻才到终点啊.怎么办?无妨先看一下各个存放器的值,如图1所示.
图1
按照仓库均衡的原理,既然有“PUSHAD”,那么必定有近似“POPAD”的操作,从而到达仓库均衡.先单步运行“PUSHAD”,此时察看仓库情形,如图2所示,可以看到0012FFB0的值刚好是ESP的值,因而可以按照闻名的“ESP定律”来脱了.我们下硬件拜候断点,即在工具栏输入“hr 0012FFB0”,F9运行后,程序被断在下面的地方.
图2
005233A7 0BC9 OR ECX,ECX
005233A9 8985 A8030000 MOV DWORD PTR SS:[EBP+3A8],EAX
005233AF 61 POPAD
005233B0 75 08 JNZ SHORT Brains_P.005233BA
;断在这里
005233B2 B8 01000000 MOV EAX,1
005233B7 C2 0C00 RETN 0C
终于看到了熟习的“POPAD”啦!再单步履行几步后,程序有个段间跳转,会来到下面的代码处.
004DCBEC 55 PUSH EBP
004DCBED 8BEC MOV EBP,ESP
004DCBEF 83C4 F0 ADD ESP,-10
004DCBF2 53 PUSH EBX
这是很典型的函数进口,那就DUMP下来吧,呵呵,查壳显示“Borland Delphi 6.0 - 7.0”.看来脱壳圆满成功.下面开始解析.
算法解析
用OD载入,查找一下字符串,没发现任何有效的信息.那就请出巨大的DeDe吧,解析后我们定位到下面的关键点.
004C53E4 55 push ebp
004C53E5 8BEC mov ebp, esp
为了让OD读取DeDe的解析后果,我们可以导出map文件,如图3所示.导出map文件后,用OD的插件LoadMap加载便可以啦.之后用OD动态调试,来到下面的关键位置.
图3
* Reference to: Controls.TControl.GetText(TControl):TCaption;|
004C5429 E85A36FAFF call 00468A88
004C542E 8B45F8 mov eax, [ebp-$08]
* Reference to: SysUtils.StrToInt(AnsiString):Integer;|
004C5431 E86632F4FF call 0040869C
;把输入的注册码转换为整数
004C5436 B9B9060000 mov ecx, $000006B9
004C543B 99 cdq
004C543C F7F9 idiv ecx ;除6B9
004C543E 81FAE0020000 cmp edx, $000002E0
;余数能否为2E0
004C5444 756A jnz 004C54B0 ;不是出错
004C5446 A140F74D00 mov eax, dword ptr [$004DF740]
004C544B 8B00 mov eax, [eax]
004C544D 8B8058050000 mov eax, [eax+$0558]
004C5453 33D2 xor edx, edx
天啊,不会这么简单吧?输入注册码模6B9应当为2E0.那就按照这个随便找个注册码试试,好的,成功啦!如图4所示.
图4
试用一下,没有限制.那是不是成功啦?我们重启一下,天啊,又计时!如图5所示.看来没这么简单,软件把考证的差别部份辨别放在差别地方考证.因为学习对比忙,没有时间跟踪它的考证代码.但我们可以爆破它,其实爆破也不是那么简单的,不信大家试试,呵呵.
图5
冲破时间限制
首先,想要找到时间限制关键点并不那么简单,我从中走了不少弯路,曾经考虑到API断点,包含注册表函数等等,但效果很不明显.其他弯路篇幅有限,就不一一摆列啦.还是请出DeDe,如图6所示.
图6
来到这里你会发现好多函数,而跟计时器有关的函数有13个之多,我们要从中找到关键点谈何简单啊!不过,到了这个份上,就一个一个下断吧.终究,我们可以定位到以下地方.
004DC09C >/. 55 PUSH EBP
; <-TForm1@Timer13Timer
004DC09D |. 8BEC MOV EBP,ESP
004DC09F |. 6A 00 PUSH 0
004DC0A1 |. 53 PUSH EBX
004DC0A2 |. 56 PUSH ESI
004DC0A3 |. 8BD8 MOV EBX,EAX
004DC07747.net |. 33C0 XOR EAX,EAX
004DC0A7 |. 55 PUSH EBP
004DC0A8 |. 68 4DC14D00 PUSH <ss.->System.@HandleFinally;>
004DC0AD |. 64:FF30 PUSH DWORD PTR FS:[EAX]
004DC0B0 |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
004DC0B3 |. 83BB 6C060000>CMP DWORD PTR DS:[EBX+66C],0
004DC0BA 7C 7B JL SHORT ss.004DC137
;关键跳转
004DC0BC |. B2 01 MOV DL,1
004DC0BE >|. 8B83 58050000 MOV EAX,DWORD PTR DS:[EBX+558]
; *Label17:TLabel
004DC0C4 >|. E8 DFC8F8FF CALL ss.004689A8
; ->Controls.TControl.SetVisible(TControl;Boolean);
004DC0C9 |. FF8B 6C060000 DEC DWORD PTR DS:[EBX+66C]
004DC0CF |. 8BB3 6C060000 MOV ESI,DWORD PTR DS:[EBX+66C]
004DC0D5 |. 83FE FF CMP ESI,-1
004DC0D8 |. 75 12 JNZ SHORT ss.004DC0EC
004DC0DA |. BA 64C14D00 MOV EDX,ss.004DC164; 0
004DC0DF >|. 8B83 58050000 MOV EAX,DWORD PTR DS:[EBX+558]
; *Label17:Tlabel
面对这么多代码,我开始有点苍茫.但不要忘掉,我们是在动态解析,经过多次的失利尝试后,可以定位到“004DC0BA 7C 7B JL SHORT ss.004DC137”这个关键语句,只要改“JL”为“JG”,时间限制就自然冲破了!保存文件运行一下,呵呵,成功啦!
破解Delphi软件最好用DeDe配合OD利用,可以事半功倍!还有,脱壳的时刻要注意一些基本概念的应用,比方“仓库均衡”等,只有这样,破解的时刻才能游刃有余
以上是“看我怎样冲破你的时间限制[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
- ·上一篇文章:操纵BCB自己编写QQ炸弹
- ·下一篇文章:注意IP地址拐骗的一些问题
- ·中查找“看我怎样冲破你的时间限制”更多相关内容
- ·中查找“看我怎样冲破你的时间限制”更多相关内容