首页
社区
课程
招聘
repnz处理
发表于: 2004-7-2 17:08 7815

repnz处理

2004-7-2 17:08
7815
:00403D7B E864390000              Call 004076E4
:00403D80 85F6                    test esi, esi
:00403D82 0F847E020000            je 00404006
:00403D88 85FF                    test edi, edi
:00403D8A 0F8476020000            je 00404006
:00403D90 8D7C242C                lea edi, dword ptr [esp+2C]
:00403D94 83C9FF                  or ecx, FFFFFFFF
:00403D97 33C0                    xor eax, eax
:00403D99 F2                      repnz
:00403D9A AE                      scasb
:00403D9B F7D1                    not ecx
:00403D9D 49                      dec ecx
请高手看这段代码...
每次我跟到004033d99时,就死机了,想问问这个repnz,scasb是什么意思呀.
我怎么能越过他呢???

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (13)
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
对了,我把各个寄存器的值都改对了.
可还是过不去...
急急.....
2004-7-2 17:13
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3
这几句常见用于求得字符串的长度
你用什么跟的?
2004-7-2 17:20
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
4
就是求长度,到dec ecx后边断一下
2004-7-2 17:36
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我是用tr2000跟的呀,
用f10跟到repnz后就返回桌面了,
好象程序结束了.我也就失去了控制权.
不道他走到那里了......
我看书上对他的解释是当zf=0或比较不相等,且ecx不等于0时重复.
那我现在这样是重复了还是没重复呢...
能具体一些告诉我上面的意思是什么吗???
可是正版的是zf=1时继续,
我的却zf=1就跳出,为什么呢?
高手请指点呀...
2004-7-2 23:29
0
雪    币: 446
活跃值: (758)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
好好看看汇编指令吧,
一些基本的指令偶们是应该知道地~!
2004-7-2 23:50
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
7
那是一个回圈,你到那句换F8试试
2004-7-3 08:56
0
雪    币: 231
活跃值: (465)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
F8的话 会在这个命令上重复好多次
2004-7-3 10:53
0
雪    币: 446
活跃值: (758)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
9
2004-7-3 10:55
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
10
最初由 cobra1111 发布
F8的话 会在这个命令上重复好多次


所以才叫回圈嘛,多转几圈就出去了。:D
2004-7-3 12:30
0
雪    币: 212
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
:00403D7B E864390000 Call 004076E4
:00403D80 85F6 test esi, esi
:00403D82 0F847E020000 je 00404006
:00403D88 85FF test edi, edi
:00403D8A 0F8476020000 je 00404006
:00403D90 8D7C242C lea edi, dword ptr [esp+2C]
:00403D94 83C9FF or ecx, FFFFFFFF ;这句指令不管ECX为什么,这里
                                  ;将它置FFFFFFFF

:00403D97 33C0 xor eax, eax ;将EAX清零

:00403D99 F2 repnz   ;repnz是与scasb联用的,这两句意思是将中AL的字节
:00403D9A AE scasb   ;与DI指定的附加段中的字节进行比较,并设置标志位
                     ;比较结束有两种情况,1.CX=0结束表示在DI所指定的
                     ;附加段中没找到0(AL已经清零),2.ZF=1,表示找到零
:00403D9B F7D1 not ecx
:00403D9D 49 dec ecx   

试试在执行repnz scasb时,在trw中使用r fl z命令,再用F8跟进
2004-7-3 15:07
0
雪    币: 47147
活跃值: (20450)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
12
这段代码就是计算字符串的长度,长度保存在ECX中。
2004-7-3 15:42
0
雪    币: 236
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
你把断点设置在00403D9B F7D1 not ecx 上就ok啦,我以前也碰见过
用上述办法就能搞掂!
2004-7-3 16:43
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢大家的指导,我明白了一些了.
还有一个问题,就是在加密程序在判断完了后
有时候会用call esi等进入主程序,而esi是由狗中数据运算得到的
看雪的精华里有一篇这样的文章.他用真的esi来代替他.
可是有时候连续有很多call ecx, call edi,call esi等
我怎么判断哪个是呢???
有什么明显的界限吗?
我问的问题很苯,可是我就是找不到...
2004-7-3 20:03
0
游客
登录 | 注册 方可回帖
返回
//