安全中国首页 > 文章中心 > 技巧知识
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

ollydbg1.07之进阶篇二(图)

更新时间:2005-11-30 0:24:00
责任编辑:池天
热 点:

教学目的:在实际的破解过程中,进一步熟悉ollydbg的使用方法。学会破解一般保护软件的思路。这一点是很重要的。

教学对象:对于用ollydbg破解已有一般了解而想更上一层楼的朋友。

破解目标:魔术情书V5.1版

破解工具:ollydbg1.07,regmon(注册表监测软件)

开始:

一,老样子,用FI 4.50查它有没有加壳。切,这个软件加了ASPR 1.22的壳。真

是TMD烦。

二,由于是破它的限期,所以我们要找出它的程序次数的存放地方。步骤如下:

1,查文件目录。我把软件目录删掉,再重装。没有用。这就说明,程序运行次数没在文件目录下。

2,查注册表。我用System Mechanic 3.6的安全安装,载入并运行完主程序后,

安装报告说,注册表没有什么改动。(呵,不知道System Mechanic 3.6不仅可以

检查安装程序,还可以检查普通程序运行后,在系统中加入了什么东西吧!)

注册表没有什么改动,那就一定在系统目录下了!

3,查系统目录。这一次用上我们的法宝:Filemon  。经过扫描,如图:

看到上面的Friend.dll没有,我找了好久都没有找到这一个文件。后来,仔细一看,这个文件是由OSK.CNT文件动态生成的。怪不得找不着。这里头有鬼!并且再

往下,提示到期窗口就出现了。

好,找到点了,下面我们的利剑ollydbg该出来了!!

开始:

一,载入程序,由于程序加了壳,我们首先要找到入口点。我们按SHIFT+F9键20下(为什么是20下,因为21下程序就运行了嘛!)我们会来到下图处:

这是一个程序异常,我们看一下窗口右下角,如图:

在光标下面一行是:00BE8BBF 

好的,我们就在00BE8BBF下断点。我们向上看,却看到了这个样子:

只有00BE8BBE而没有00BE8BBF。不要紧,我们把00BE8BBE处的指令变成NOP

(光标定位在00BE8BBE处,按空格键,输入NOP,注意下方的选择框不要找钩,

如图所示)。变成下图的样子:

[page]

我们在00BE8BBF上下个断点(也就是在这一行上双击)。

接下来,按F9运行到00BE8BBF中断后,我们向下拉窗口,大约三四十行左右吧!

会看到如下的画面:

双击光标处下个断点,按F9键运行。在00BE8C87处中断后,按一下F7键,我们会来到如下的画面:

看到没有,上图中的:

00BE8BB5 JMP EAX   中的EAX中存放的就是程序的入口点。我们在00BE8BB5处

下个断点。F9运行到00BE8BB5处,记下EAX的值,再按一下F7,我们就正式进入

到程序的真正领域了。如下图:

接下来,我们来看一下有什么可以利用的没有。点右键,查看全部字符串。如图所示:

运行后,会跳出一个窗口,最大化后,我们在光标处向上找大约十来行就会看到如下图所示:

[page]

看到光标处的“\Help\"没有,我们双击这一行,会跳到如下的窗口:

我们在光标处下断点,也就是0056D4C5处下个断点。这个地方,说明程序在读"\HELP\"录了。

按F9运行后,程序中断在0056D4C5处,果然,这时提示窗口还没有出现。

我们按F8键(相当于TRW2000中的F10)4下,在经过0056D4D1后,提示窗口就出现了。这就说明0056D4D1处有问题,我们按F7跟进去后,接下来我们就要用最有威力的一招了:动画调试

怎么个动画调试,如下图:

在点了Animate over后,我们就会发现,指令在一行一行的运行。不要急,等十来秒钟后,指令不跳了。这时提示窗口也出现了。光标停在下图的位置:

这就说明这个CALL有问题了,程序在这个时候已经判断完是否已过期了。现在我们向上看一个,有没有可以跳过这个CALL的地方或者程序判断是否过期的地方。如下

所示:

代码如下:

00567EC6       8B8D 04FCFFFF    MOV ECX,DWORD PTR SS:[EBP-3FC]
00567ECC       8B97 04070000    MOV EDX,DWORD PTR DS:[EDI+704]
00567ED2       8BC7             MOV EAX,EDI
00567ED4       E8 53CAFFFF      CALL 复件_MSQ.0056492C
00567ED9       A1 6C725800      MOV EAX,DWORD PTR DS:[58726C]
00567EDE       FF40 0C          INC DWORD PTR DS:[EAX+C]
00567EE1       A1 6C725800      MOV EAX,DWORD PTR DS:[58726C]            ;重点:
00567EE6       8B40 0C          MOV EAX,DWORD PTR DS:[EAX+C]             ;取程序次数
00567EE9       83F8 1A          CMP EAX,1A      ;判断是否大于1A也就是十六进制的25
00567EEC       74 09            JE SHORT MSQ.00567EF7               ;相等就跳,跳就死定了。
00567EEE       83F8 1A          CMP EAX,1A       ;看是否小于25
00567EF1       0F8E C6010000    JLE  ;小于就跳,一定要跳,因为往下走,就出现提示窗口了。
00567EF7       8B0D BCA95700    MOV ECX,DWORD PTR DS:[57A9BC]             ; MSQ.00587264TR
00567EFD       A1 CCA85700      MOV EAX,DWORD PTR DS:[57A8CC]
00567F02       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567F04       8B15 601F5600    MOV EDX,DWORD PTR DS:[561F60]             ; MSQ.00561FACTR
00567F0A       E8 8DDAEEFF      CALL 复件_MSQ.0045599C:[
00567F0F       33C0             XOR EAX,EAX
00567F11       55               PUSH EBP
00567F12       68 DB7F5600      PUSH 复件_MSQ.00567FDB
00567F17       64:FF30          PUSH DWORD PTR FS:[EAX]
00567F1A       64:8920          MOV DWORD PTR FS:[EAX],ESP
00567F1D       8B87 A4060000    MOV EAX,DWORD PTR DS:[EDI+6A4]
00567F23       8B40 24          MOV EAX,DWORD PTR DS:[EAX+24]
00567F26       33D2             XOR EDX,EDX
00567F28       E8 FB43FEFF      CALL 复件_MSQ.0054C328
00567F2D       B2 01            MOV DL,1
00567F2F       E8 5044FEFF      CALL 复件_MSQ.0054C384
00567F34       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567F39       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567F3B       8B80 E0020000    MOV EAX,DWORD PTR DS:[EAX+2E0]
00567F41       33D2             XOR EDX,EDX
00567F43       E8 88E5ECFF      CALL 复件_MSQ.004364D0
00567F48       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567F4D       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567F4F       8B80 E0020000    MOV EAX,DWORD PTR DS:[EAX+2E0][page]
00567F55       33D2             XOR EDX,EDX
00567F57       8B08             MOV ECX,DWORD PTR DS:[EAX]
00567F59       FF51 5C          CALL DWORD PTR DS:[ECX+5C]
00567F5C       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567F61       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567F63       8B80 E0020000    MOV EAX,DWORD PTR DS:[EAX+2E0]
00567F69       33D2             XOR EDX,EDX
00567F6B       8990 08010000    MOV DWORD PTR DS:[EAX+108],EDX
00567F71       8990 0C010000    MOV DWORD PTR DS:[EAX+10C],EDX
00567F77       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567F7C       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567F7E       8B80 D4020000    MOV EAX,DWORD PTR DS:[EAX+2D4]
00567F84       33D2             XOR EDX,EDX
00567F86       E8 45E5ECFF      CALL 复件_MSQ.004364D0
00567F8B       A1 6C725800      MOV EAX,DWORD PTR DS:[58726C]
00567F90       8B50 0C          MOV EDX,DWORD PTR DS:[EAX+C]
00567F93       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567F98       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567F9A       8B80 E8020000    MOV EAX,DWORD PTR DS:[EAX+2E8]
00567FA0       E8 939EFFFF      CALL 复件_MSQ.00561E38:[
00567FA5       8B87 A0040000    MOV EAX,DWORD PTR DS:[EDI+4A0]
00567FAB       C740 0C 08000000 MOV DWORD PTR DS:[EAX+C],8
00567FB2       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567FB7       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567FB9       8B10             MOV EDX,DWORD PTR DS:[EAX]
00567FBB       FF92 D8000000    CALL DWORD PTR DS:[EDX+D8]                ; 这里就出现了提示窗口
00567FC1       33C0             XOR EAX,EAX
00567FC3       5A               POP EDX
00567FC4       59               POP ECX
00567FC5       59               POP ECX
00567FC6       64:8910          MOV DWORD PTR FS:[EAX],EDX
00567FC9       68 A2815600      PUSH 复件_MSQ.005681A2X]
00567FCE       A1 BCA95700      MOV EAX,DWORD PTR DS:[57A9BC]
00567FD3       8B00             MOV EAX,DWORD PTR DS:[EAX]
00567FD5       E8 B2AFE9FF      CALL 复件_MSQ.00402F8C:[
00567FDA       C3               RETN

#####################################################################

我们把这处的指令:
00567EE1       A1 6C725800      MOV EAX,DWORD PTR DS:[58726C]            ;重点:
00567EE6       8B40 0C          MOV EAX,DWORD PTR DS:[EAX+C]             ;取程序次数
00567EE9       83F8 1A          CMP EAX,1A                               ;判断是否大于1A也就是十六进制的25
00567EEC       74 09            JE SHORT 复件_MSQ.00567EF7               ;相等就跳,跳就死定了。
00567EEE       83F8 1A          CMP EAX,1A                               ;看是否小于25
00567EF1       0F8E C6010000    JLE 复件_MSQ.005680BD                    ;小于就跳,一定要跳,因为往下走,就出现提示窗口了。


改成这样子的,令程序运行次数永远是1 :


00567EE6       C740 0C 01000000 MOV DWORD PTR DS:[EAX+C],1
00567EED       E9 CB010000      JMP 复件_MSQ.005680BDAX
00567EF2       90               NOP
00567EF3       90               NOP
00567EF4       90               NOP
00567EF5       90               NOP
00567EF6       90               NOP


接下来的事,不用我说了吧。如果你是一个脱壳高手,你可以脱了壳后直接改。如果不是,你只有写一个进程补丁了,因为这个软件加的壳还没有现成的脱壳机,只能手动脱壳!!!如果你是一个算法狂,你可以跟入

00567ED4       E8 53CAFFFF      CALL 复件_MSQ.0056492C

这个CALL,来对日期的运算过程求逆。以写出最完美的无限日期破解文件。具体的破解文件可以参考我在论坛上发布的破解文件。下面我就给出日期运算的重点语句来:

    程序在读出osk.cnt文件中的值后,进行下面的运算。

00460D37      46           INC ESI
00460D38      8D55 EF      LEA EDX,DWORD PTR SS:[EBP-11]
00460D3B      B9 01000000  MOV ECX,1
00460D40      8B45 F4      MOV EAX,DWORD PTR SS:[EBP-C]
00460D43      8B38         MOV EDI,DWORD PTR DS:[EAX]
00460D45      FF57 04      CALL DWORD PTR DS:[EDI+4]
00460D48      8A45 EF      MOV AL,BYTE PTR SS:[EBP-11]

;取osk.cnt文件中值
00460D4B      0FB7D3       MOVZX EDX,BX
00460D4E      C1EA 08      SHR EDX,8
00460D51      3055 EF      XOR BYTE PTR SS:[EBP-11],DL
00460D54      25 FF000000  AND EAX,0FF
00460D59      66:03D8      ADD BX,AX
00460D5C      66:69C3 6FCA IMUL AX,BX,0CA6F
00460D61      66:05 8754   ADD AX,5487
00460D65      8BD8         MOV EBX,EAX
00460D67      8D55 EF      LEA EDX,DWORD PTR SS:[EBP-11]
00460D6A      B9 01000000  MOV ECX,1
00460D6F      8B45 F0      MOV EAX,DWORD PTR SS:[EBP-10]
00460D72      8B38         MOV EDI,DWORD PTR DS:[EAX]
00460D74      FF57 08      CALL DWORD PTR DS:[EDI+8]
00460D77      4E           DEC ESI
00460D78     ^75 BE        JNZ SHORT MSQingSh.00460D38

这个软件的试用版没有跳过提示窗口的跳转,我估计只有注册版才会拿掉提示窗口的程序代码。这只是我个人的意见。请指教!

总结;

1,用ollydbg脱aspr 1.22壳。

2,对有过期提示窗口的程序的破解。

3,对注册码存放位置或者软件运行次数存放位置的寻找步骤!!!

 
相关文章
一日一文章
 
一日一软件
一日一动画