首页
社区
课程
招聘
[旧帖] [求助]关于CCDebuger写的OD教程的疑问 0.00雪花
发表于: 2009-6-14 00:02 1451

[旧帖] [求助]关于CCDebuger写的OD教程的疑问 0.00雪花

2009-6-14 00:02
1451
您好,以下是看您写的教程:第一卷 OllyDBG 入门系列 第二篇 字串参考的一点疑问,已用红色标出,该连接地址为:http://bbs.pediy.com/showthread.php?t=21308
***********华丽的分割线*******************
分别双击上面标出的两个地址,我们会来到对应的位置:
00440F79 |. BA 8C104400 MOV EDX,CrackMe3.0044108C ; ASCII "Wrong Serial,try again!"

00440F7E |. A1 442C4400 MOV EAX,DWORD PTR DS:[442C44]

00440F83 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]

00440F85 |. E8 DEC0FFFF CALL CrackMe3.0043D068

00440F8A |. EB 18 JMP SHORT CrackMe3.00440FA4

00440F8C |> 6A 00 PUSH 0

00440F8E |. B9 80104400 MOV ECX,CrackMe3.00441080 ; ASCII "Beggar off!"

00440F93 |. BA 8C104400 MOV EDX,CrackMe3.0044108C ; ASCII "Wrong Serial,try again!"

00440F98 |. A1 442C4400 MOV EAX,DWORD PTR DS:[442C44]

00440F9D |. 8B00 MOV EAX,DWORD PTR DS:[EAX]

00440F9F |. E8 C4C0FFFF CALL CrackMe3.0043D068

我们在反汇编窗口中向上滚动一下再看看:

00440F2C |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]

00440F2F |. BA 14104400 MOV EDX,CrackMe3.00441014 ; ASCII "Registered User"

00440F34 |. E8 F32BFCFF CALL CrackMe3.00403B2C ; 关键,要用F7跟进去

00440F39 |. 75 51 JNZ SHORT CrackMe3.00440F8C ; 这里跳走就完蛋
\\这里判断为不相等则跳,那么这里是拿那两个做对比呢?

00440F3B |. 8D55 FC LEA EDX,DWORD PTR SS:[EBP-4]

00440F3E |. 8B83 C8020000 MOV EAX,DWORD PTR DS:[EBX+2C8]

00440F44 |. E8 D7FEFDFF CALL CrackMe3.00420E20

00440F49 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]

00440F4C |. BA 2C104400 MOV EDX,CrackMe3.0044102C ; ASCII "GFX-754-IER-954"

00440F51 |. E8 D62BFCFF CALL CrackMe3.00403B2C ; 关键,要用F7跟进去

00440F56 |. 75 1A JNZ SHORT CrackMe3.00440F72 ; 这里跳走就完蛋

00440F58 |. 6A 00 PUSH 0

00440F5A |. B9 3C104400 MOV ECX,CrackMe3.0044103C ; ASCII "CrackMe cracked successfully"

00440F5F |. BA 5C104400 MOV EDX,CrackMe3.0044105C ; ASCII "Congrats! You cracked this CrackMe!"

00440F64 |. A1 442C4400 MOV EAX,DWORD PTR DS:[442C44]

00440F69 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]

00440F6B |. E8 F8C0FFFF CALL CrackMe3.0043D068

00440F70 |. EB 32 JMP SHORT CrackMe3.00440FA4

00440F72 |> 6A 00 PUSH 0

00440F74 |. B9 80104400 MOV ECX,CrackMe3.00441080 ; ASCII "Beggar off!"

00440F79 |. BA 8C104400 MOV EDX,CrackMe3.0044108C ; ASCII "Wrong Serial,try again!"

00440F7E |. A1 442C4400 MOV EAX,DWORD PTR DS:[442C44]

00440F83 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]

00440F85 |. E8 DEC0FFFF CALL CrackMe3.0043D068

00440F8A |. EB 18 JMP SHORT CrackMe3.00440FA4

00440F8C |> 6A 00 PUSH 0

00440F8E |. B9 80104400 MOV ECX,CrackMe3.00441080 ; ASCII "Beggar off!"

00440F93 |. BA 8C104400 MOV EDX,CrackMe3.0044108C ; ASCII "Wrong Serial,try again!"

00440F98 |. A1 442C4400 MOV EAX,DWORD PTR DS:[442C44]

00440F9D |. 8B00 MOV EAX,DWORD PTR DS:[EAX]

00440F9F |. E8 C4C0FFFF CALL CrackMe3.0043D068

********************华丽的分割线************************

00403B2C /$ 53 PUSH EBX

00403B2D |. 56 PUSH ESI

00403B2E |. 57 PUSH EDI

00403B2F |. 89C6 MOV ESI,EAX ; 把EAX内我们输入的用户名送到 ESI

00403B31 |. 89D7 MOV EDI,EDX ; 把EDX内的数据“Registered User”送到EDI

00403B33 |. 39D0 CMP EAX,EDX ; 用“Registered User”和我们输入的用户名作比较

00403B35 |. 0F84 8F000000 JE CrackMe3.00403BCA ; 相同则跳

00403B3B |. 85F6 TEST ESI,ESI ; 看看ESI中是否有数据,主要是看看我们有没有输入用户名

00403B3D |. 74 68 JE SHORT CrackMe3.00403BA7 ; 用户名为空则跳

00403B3F |. 85FF TEST EDI,EDI

00403B41 |. 74 6B JE SHORT CrackMe3.00403BAE

00403B43 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; 用户名长度送EAX
\\怎么知道这个是送长度的呢?我在DS:[ESI-4]跟随数据窗口发现这个是我输入的用户名?这样的话,不是应该理解为把用户名送到EAX里面去么?

00403B46 |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] ; “Registered User”字串的长度送EDX
\\同样

00403B49 |. 29D0 SUB EAX,EDX ; 把用户名长度和“Registered User”字串长度相减
\\这里是EAX=EAX-EDX?EAX不是小于EDX么?怎么减?取反?

00403B4B |. 77 02 JA SHORT CrackMe3.00403B4F ; 用户名长度大于“Registered User”长度则跳

00403B4D |. 01C2 ADD EDX,EAX ; 把减后值与“Registered User”长度相加,即用户名长度

00403B4F |> 52 PUSH EDX

00403B50 |. C1EA 02 SHR EDX,2 ; 用户名长度值右移2位,这里相当于长度除以4

00403B53 |. 74 26 JE SHORT CrackMe3.00403B7B ; 上面的指令及这条指令就是判断用户名长度最少不能低于4

00403B55 |> 8B0E MOV ECX,DWORD PTR DS:[ESI] ; 把我们输入的用户名送到ECX

00403B57 |. 8B1F MOV EBX,DWORD PTR DS:[EDI] ; 把“Registered User”送到EBX
\\这里两个为什么不是用户名的长度了,而是内容?难道是因为存储器的不同?如果是。那这四个不同在哪里


00403B59 |. 39D9 CMP ECX,EBX ; 比较

00403B5B |. 75 58 JNZ SHORT CrackMe3.00403BB5 ; 不等则完蛋
**************************************
请高手帮忙解惑下,谢谢

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看到都晕
2009-6-14 01:01
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
00440F34 |. E8 F32BFCFF CALL CrackMe3.00403B2C ; 关键,要用F7跟进去

00440F39 |. 75 51 JNZ SHORT CrackMe3.00440F8C ; 这里跳走就完蛋
\\这里判断为不相等则跳,那么这里是拿那两个做对比呢?

JNZ基本上就是不想等的意思。至于什么和什么比在CALL CrackMe3.00403B2C 的最后几句

---------------------------------
00403B43 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; 用户名长度送EAX
\\怎么知道这个是送长度的呢?我在DS:[ESI-4]跟随数据窗口发现这个是我输入的用户名?这样的话,不是应该理解为把用户名送到EAX里面去么?

长度是长度。内容是内容
EAX就是长度。
寄存器都是32位的意思是说只能放下0到2的33次方减1范围内的整数 或者 4个字符 或者一个地址指针
所以不存在在在寄存器里放字符串的情况。一般放的是地址指针。这里就是长度换成16进制。


-----------------------
00403B49 |. 29D0 SUB EAX,EDX ; 把用户名长度和“Registered User”字串长度相减
\\这里是EAX=EAX-EDX?EAX不是小于EDX么?怎么减?取反?

负数被

-------------------------
00403B55 |> 8B0E MOV ECX,DWORD PTR DS:[ESI] ; 把我们输入的用户名送到ECX

00403B57 |. 8B1F MOV EBX,DWORD PTR DS:[EDI] ; 把“Registered User”送到EBX
\\这里两个为什么不是用户名的长度了,而是内容?难道是因为存储器的不同?如果是。那这四个不同在哪里



ESI指向的是输入的用户名字符串的地址
所以说
MOV ECX,DWORD PTR DS:[ESI]
把我们输入的用户名送到ECX
准确的说是用户名的头4个字母


下边有一个循环每次比较4个字母
2009-6-14 03:30
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
也是有点晕晕的
2009-6-14 09:09
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
“00403B43 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; 用户名长度送EAX
\\怎么知道这个是送长度的呢?我在DS:[ESI-4]跟随数据窗口发现这个是我输入的用户名?这样的话,不是应该理解为把用户名送到EAX里面去么?

长度是长度。内容是内容
EAX就是长度。
寄存器都是32位的意思是说只能放下0到2的33次方减1范围内的整数 或者 4个字符 或者一个地址指针
所以不存在在在寄存器里放字符串的情况。一般放的是地址指针。这里就是长度换成16进制。”

我知道存储器不能放字符串,我的意思说为什么不是把字符串的asscii值放进存储器呢?而是长度?
那以后我怎么去判断呢?
最后,谢谢你的回复 TO 2楼
2009-6-14 11:13
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
那以后我怎么去判断呢?
看寄存器的内容是什么被。
2009-6-14 13:36
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我就是这里老给饶晕了,老是分不清,能不能举两个例子听听呢。
谢谢了哈
2009-6-14 18:15
0
雪    币: 51
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
一起学习了哦
2009-6-16 21:24
0
游客
登录 | 注册 方可回帖
返回
//