首页
社区
课程
招聘
[旧帖] [求助]初学反汇编第2问 0.00雪花
发表于: 2009-6-5 14:01 1351

[旧帖] [求助]初学反汇编第2问 0.00雪花

2009-6-5 14:01
1351
今天在看OD的那个教程....学到第2课...遇到一个问题百思不得其解.希望高手们能提点提点我..先谢过啦~~~~~~

就是它那附件中的CrackMe3

我跟进那个验证用户名的函数后显示如下

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
00403B46 |. 8B57 FC         MOV EDX,DWORD PTR DS:[EDI-4]        ; “Registered User”字串的长度送EDX
00403B49 |. 29D0            SUB EAX,EDX                         ; 把用户名长度和“Registered User”字串长度相减
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         ; 不等则完蛋

我的问题就是上面那两句得到用户名长度的语句

00403B43 |. 8B46 FC         MOV EAX,DWORD PTR DS:[ESI-4]        ; 用户名长度送EAX
00403B46 |. 8B57 FC         MOV EDX,DWORD PTR DS:[EDI-4]        ; “Registered User”字串的长度送EDX

为什么这样就能得到用户名和Registered User的长度..我查看了一下ESI和EDI往上移4个单位确实是这两个的长度...为什么呢?????很疑惑..

还有一个问题
00403B50 |. C1EA 02         SHR EDX,2                           ; 用户名长度值右移2位,这里相当于长度除以4
00403B53 |. 74 26           JE SHORT CrackMe3.00403B7B          ; 上面的指令及这条指令就是判断用户名长度最少不能低于4

这两句又是怎么实现判断用户名长度最少不能低于4的呢????
希望高手能帮小弟解答解答...非常感谢

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
1. 用户名的长度:字符串长度在有些语言里面是这么保存的,在正式数据之前存放着长度。好像VC/DELPHI都是这么实现的。这个只能靠经验来了。
2.右移两位相当于除以4,如果长度小于4,右移的结果将为0。那么下面的JE跳转就起作用了。(JE判断ZF标志,ZF标志的意思就是结果为0)。
2009-6-5 14:27
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼上的。感觉你的基础知识很扎实,能不能说下你具体看的那些书呢??
2009-6-5 14:45
0
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
夸奖了
我没有什么纸质书看,一般都是在网上搜到教程看看。最近看汇编,感觉“蓝麒麟的窝”里面有一份汇编的教程不错,讲得透彻,简单,可以在百度里面搜搜,一共20多讲。都是些基础的东西,很有用。
这个网址:http://www.520crack.com/
2009-6-5 14:55
0
雪    币: 53
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢这楼主发的这个网站进去看看的确有我要的材料
2009-6-5 16:56
0
雪    币: 88
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我进去看看。呵呵。谢谢长剑拉。
2009-6-5 20:18
0
游客
登录 | 注册 方可回帖
返回
//