能力值:
( LV2,RANK:10 )
|
-
-
4 楼
第一个是我前一段时间发现的,在此之前我曾对这段代码做过静态分析,认为传送的是地址。可是后来的动态执行时发现传送的是数据。但当时并不怎么注意。也没有记下来。
直到前几天分析一段代码是又发现了第二个,这才想到od会不会有什么bug呀。
这段代码是:10001295 |. 8BD1 mov edx,ecx
10001297 |. C1E9 02 shr ecx,2
1000129A |. 33C0 xor eax,eax
1000129C |. F3:AB rep stos dword ptr es:[edi]
1000129E |. 8BCA mov ecx,edx
100012A0 |. 8B5424 1>mov edx,dword ptr ss:[esp+14]
100012A4 |. 83E1 03 and ecx,3
100012A7 |. F3:AA rep stos byte ptr es:[edi]
100012A9 |. 8B4424 2>mov eax,dword ptr ss:[esp+2C]
100012AD |. 03F0 add esi,eax
100012AF |. 8D4B FF lea ecx,dword ptr ds:[ebx-1]
100012B2 |. 8BC1 mov eax,ecx
100012B4 |. C1E9 02 shr ecx,2
100012B7 |. 8BFA mov edi,edx
100012B9 |. F3:A5 rep movs dword ptr es:[edi],dword ptr ds:[esi]
100012BB |. 8BC8 mov ecx,eax
100012BD |. 8B4424 1>mov eax,dword ptr ss:[esp+18]
100012C1 |. 83E1 03 and ecx,3
100012C4 |. 83C4 04 add esp,4
100012C7 |. 25 07000>and eax,80000007
100012CC |. F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi]
100012CE |. 79 09 jns short DecEnc.100012D9
100012D0 |. 48 dec eax
100012D1 |. 83C8 F8 or eax,FFFFFFF8
100012D4 |. 40 inc eax
100012D5 |. 79 02 jns short DecEnc.100012D9
100012D7 |. F7D8 neg eax
100012D9 |> 85C0 test eax,eax
100012DB |. 74 0D je short DecEnc.100012EA
100012DD |. 33C9 xor ecx,ecx
100012DF |. B1 08 mov cl,8
100012E1 |. 2AC8 sub cl,al
100012E3 |. 0C FF or al,0FF
100012E5 |. D2E0 shl al,cl
100012E7 |. 20042A and byte ptr ds:[edx+ebp],al
100012EA |> 8B7C24 2>mov edi,dword ptr ss:[esp+2C]
100012EE |. 81E7 070>and edi,80000007
100012F4 |. 79 09 jns short DecEnc.100012FF
100012F6 |. 4F dec edi
100012F7 |. 83CF F8 or edi,FFFFFFF8
100012FA |. 47 inc edi
100012FB |. 79 02 jns short DecEnc.100012FF
100012FD |. F7DF neg edi
100012FF |> 8B7424 2>mov esi,dword ptr ss:[esp+24]
10001303 |. 81E6 070>and esi,80000007
10001309 |. 79 09 jns short DecEnc.10001314
1000130B |. 4E dec esi
1000130C |. 83CE F8 or esi,FFFFFFF8
1000130F |. 46 inc esi
10001310 |. 79 02 jns short DecEnc.10001314
10001312 |. F7DE neg esi
10001314 |> 8B6C24 1>mov ebp,dword ptr ss:[esp+18]
10001318 |. 8BCF mov ecx,edi
1000131A |. F7D9 neg ecx
1000131C |. 51 push ecx
1000131D |. 8D43 FF lea eax,dword ptr ds:[ebx-1]
10001320 |. 50 push eax
10001321 |. 52 push edx
10001322 |. 8BCD mov ecx,ebp
10001324 |. E8 67FEF>call DecEnc.10001190
10001329 |. 8B4C24 1>mov ecx,dword ptr ss:[esp+10]
1000132D |. 56 push esi
1000132E |. 53 push ebx
1000132F |. 51 push ecx
10001330 |. 8BCD mov ecx,ebp
10001332 |. E8 59FEF>call DecEnc.10001190
10001337 |. 33D2 xor edx,edx
10001339 |. 33C9 xor ecx,ecx
1000133B |. 3BF7 cmp esi,edi
1000133D |. 0F9FC2 setg dl
10001340 |. 8D5C1A F>lea ebx,dword ptr ds:[edx+ebx-1]
10001344 |. 85DB test ebx,ebx
10001346 |. 7E 37 jle short DecEnc.1000137F
10001348 |. 8B7C24 2>mov edi,dword ptr ss:[esp+24]
1000134C |. 8BC7 mov eax,edi
1000134E |. 99 cdq
1000134F |. 83E2 07 and edx,7
10001352 |. 03C2 add eax,edx
10001354 |. 8B5424 2>mov edx,dword ptr ss:[esp+20]
10001358 |. C1F8 03 sar eax,3
1000135B |. 8D3410 lea esi,dword ptr ds:[eax+edx]
1000135E |. 8BFF mov edi,edi
10001360 |> 8B4424 1>/mov eax,dword ptr ss:[esp+10]
10001364 |. 8A1401 |mov dl,byte ptr ds:[ecx+eax]
10001367 |. 08140E |or byte ptr ds:[esi+ecx],dl
1000136A |. 41 |inc ecx
1000136B |. 3BCB |cmp ecx,ebx
1000136D |.^ 7C F1 \jl short DecEnc.10001360
1000136F |. 8B4424 3>mov eax,dword ptr ss:[esp+30]
10001373 |. 03C7 add eax,edi
10001375 |. 5F pop edi
10001376 |. 5E pop esi
10001377 |. 5D pop ebp
10001378 |. 5B pop ebx
10001379 |. 83C4 0C add esp,0C
1000137C |. C2 1400 retn 14
那个命令在10001367
请高手们看看,解解惑
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
今天又碰到一个
lea eax,dword prt ds:[ebx-1]
结果是eax=2 (ebx=3)
汗了
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
最初由 vfbf 发布 今天又碰到一个 lea eax,dword prt ds:[ebx-1] 结果是eax=2 (ebx=3) 汗了
这个有问题?
还有就是or是或的意思,如
or eax,ebx
如果eax是0,或者非零但跟ebx的某些位相同,结果是跟传送一样的
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
最初由 vfbf 发布 1。mov eax,xxxx.12345678类指令(xxxx是模块名),有时候传送的是该地址,有 时候却是地址里面的值(我见过一次) 2。or eax,dword prt ds[esi+ebx]类指令。实际上是mov eax,dword prt ds[esi+ebx](也只见过一次) 有点奇怪怎么会出现这样的错误
我用asm写上了你的代码,编译后用od反汇编,没问题的
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
最初由 vfbf 发布 今天又碰到一个 lea eax,dword prt ds:[ebx-1] 结果是eax=2 (ebx=3) 汗了
3-1!=2?
汗了
|
能力值:
( LV13,RANK:970 )
|
-
-
13 楼
最初由 vfbf 发布 今天又碰到一个 lea eax,dword prt ds:[ebx-1] 结果是eax=2 (ebx=3) 汗了 汗啥?
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
惭愧,惭愧,不过还有一事不明,比如下面两条指令
1000249D 8D45 F0 lea eax,dword ptr ss:[ebp-10]
执行后eax=0012f7c0,地址
1000126C 8D41 FF lea eax,dword ptr ds:[ecx-1]
执行后eax=22,数值
不知道结果为什么会有不同数据类型
,请指教
|
能力值:
(RANK:410 )
|
-
-
15 楼
最初由 vfbf 发布 惭愧,惭愧,不过还有一事不明,比如下面两条指令 1000249D 8D45 F0 lea eax,dword ptr ss:[ebp-10] 执行后eax=0012f7c0,地址
1000126C 8D41 FF lea eax,dword ptr ds:[ecx-1] ........
这没什么奇怪的,
你的第一个:EBP = 0012F7D0 - 10 = 0012F7C0 正确
第二个:ECX = 23 - 1 = 22 正确。
LEA取的的值是看括号里([])计算的值是多少来决定的。
:D
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
最初由 小虾 发布
这没什么奇怪的, 你的第一个:EBP = 0012F7D0 - 10 = 0012F7C0 正确 第二个:ECX = 23 - 1 = 22 正确。 LEA取的的值是看括号里([])计算的值是多少来决定的。 ........
正解,地址跟数据是没啥区别的,别看0040xxxx的就是地址,小的就是数据,汇编语言无类型的,有的只是4字节的整型。(除浮点指令吧)
|