首页
社区
课程
招聘
[:(]期待OD更新
发表于: 2008-7-2 20:14 16893

[:(]期待OD更新

2008-7-2 20:14
16893

CC                  int3
9D                  popfd

好像先是TT,然后就是VMP
我是完全没搞懂,才出来咋呼的.不过好像是我系统环境好像有关系,没有K8 7和PhantOm的情况下似乎就没事,没搞懂


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

收藏
免费 7
支持
分享
最新回复 (27)
雪    币: 282
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
不懂。。。。。
2008-7-2 20:18
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
TTprotect ? Vmprotect 1.64 ..
2008-7-2 20:25
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
4
不懂,学习。
2008-7-2 20:37
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
是win的问题还是od的?
2008-7-2 20:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
是q3的问题,还是盖茨的问题?
2008-7-2 20:57
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
7
我也不懂
等q3来给我们说说
2008-7-2 22:15
0
雪    币: 287
活跃值: (102)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
完全不懂
期待
2008-7-2 23:07
0
雪    币: 370
活跃值: (78)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
9
这个最早是EXEC用的伎俩-_-
2008-7-3 08:33
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
10
虽然楼主提出的问题不一定准确,但二楼的应该比较清楚怎么回事
2008-7-3 11:33
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
magic command
2008-7-4 00:11
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
12
完全不懂 反调试手段?
2008-7-4 08:51
0
雪    币: 359
活跃值: (430)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
13
应该是吧,不过用途应该不止如此吧,
2008-7-4 21:10
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
q3的观察总是出人意料。
OD的Bug?!
int3
pushfd

int3
popfd
一样的效果。
只要修改int3后面的popfd为其他值,OD都能通过。老掉牙的技术又重新被用了。SEH异常机制的运用而已。
原理:
在SEH异常处理中设置了硬件断点DR0=EIP+2,并把EIP的值加2,那么应该在int3,popfd后面的指令执行时会产生单步异常。但是OD遇到前面是popfd/pushfd时,OD会自动在popfd后一指令处设置硬件断点,而VMP的seh异常处理会判断是否已经设置硬件断点,如果已经有硬件断点就不产生单步异常,所以不能正常执行。
2008-7-5 09:49
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
,OD的pushfd/pushfw/popfd/popfw这些指令貌似都有问题
0054B000 >  66:9C           pushfw //停在这里
0054B002    90              nop //这里F4   看看有什么效果???
0054B003    90              nop //这里预先下F2
0054B004    90              nop
0054B005    90              nop
2008-7-5 10:17
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
16
因为把OD搞成只要不是自己的断点一律PassThru,所以没有被伤到哈
2008-7-5 21:03
0
雪    币: 2316
活跃值: (129)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
17
多谢。。。。。
2008-7-5 23:34
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
18
EIP 停在 9C ' 9D 得另外处理, 如下:

  00434E32   .  3D 9C000000   cmp     eax,9C
  00434E37   .  74 0D         je      short 00434E46
  00434E39   .  8B95 68FAFFFF mov     edx,[ebp-598]
  00434E3F   .  3D 9D000000   cmp     eax,9D
  00434E44   .  75 17         jnz     short 00434E5D

若往下追, 会得知 此时若按 F4 将需要2个硬断点. 若剩下的DR不足2个, 则用 CC
(所以若你DR用掉3个, 则不会有此困扰)

------------------------------------------------------------------

(下列... 请先清除所有硬断点)

  401000  9C    pushf          <- EIP
  401001  90    nop
  401002  90    nop
  401003  90    nop
  401004  90    nop            <- 在此按 F4 看看
  401005  90    nop
  401006  90    nop
  401007  90    nop
  401008  90    nop            <- 先在此按 F2 , 造成一个CC, 以免待会跑飞

OD 有个 Bug, 上列情况, 若你在 401004 按 F4, 将不会断下来
就算你有在途中强设硬断点也没用, 不会被断下来.

在 401004 按 F4, OD 会设一个Temp硬断点在 401001 , 即亦 pushf 的下一条
以及一个 one-shot 硬断点在 401004

Temp硬断点 有正常被断下来, 一个80000004, 然后...所有的硬断点将都不会被激发
你会一直执行到遇到 CC 为止. 所以你的 one-shot硬断点还留在那里.
(Debug\Hardware breakpoints  内可看到其存在着)

因为 OD 在调用 SetThreadContext 前, 会将 DR7 的 低10个bit 清为 0, 然后再
根据若 DR0~3 非零的话, 则将相对的 DR7 的相对 bit 设为 1, 使之 Enable.
可是这个步骤出了问题.

下列是一个 4 次的 Loop . 第一行 cmp [edx],0 是在看 DRx 有无设值.
这一行没问题. 有值就有值, 0 就是 0.

第三行的 test byte ptr [4D5710], 1 有问题
我发现 [4D5710] = 01
所以 4次 Loop 结束后 SI 还是等于 00

Loop 的下一行    0042EB17 mov  [ebx+18],esi 就是在设 DR7

0042EA28  |.  BE 00040000   |mov     esi,400                  //清掉10个bit

0042EA51  |> /833A 00       |/cmp     dword ptr [edx],0
0042EA54  |. |0F84 B0000000 ||je      0042EB0A
0042EA5A  |. |F605 10574D00>||test    byte ptr [4D5710],1
0042EA61  |. |0F85 A3000000 ||jnz     0042EB0A
0042EA67  |. |8BC8          ||mov     ecx,eax
0042EA69  |. |03C9          ||add     ecx,ecx
0042EA6B  |. |BF 01000000   ||mov     edi,1
0042EA70  |. |D3E7          ||shl     edi,cl
0042EA72  |. |0BF7          ||or      esi,edi
0042EA74  |. |8B0A          ||mov     ecx,[edx]
0042EA76  |. |83F9 07       ||cmp     ecx,7                   ;  Switch (cases 1..7)
0042EA79  |. |77 62         ||ja      short 0042EADD
0042EA7B  |. |FF248D 82EA42>||jmp     [ecx*4+42EA82]
0042EA82  |. |DDEA4200      ||dd      ollydbg.0042EADD
0042EA86  |. |A2EA4200      ||dd      ollydbg.0042EAA2
0042EA8A  |. |B0EA4200      ||dd      ollydbg.0042EAB0
0042EA8E  |. |BFEA4200      ||dd      ollydbg.0042EABF
0042EA92  |. |CEEA4200      ||dd      ollydbg.0042EACE
0042EA96  |. |A2EA4200      ||dd      ollydbg.0042EAA2
0042EA9A  |. |A2EA4200      ||dd      ollydbg.0042EAA2
0042EA9E  |. |A2EA4200      ||dd      ollydbg.0042EAA2
0042EAA2  |> |33C9          ||xor     ecx,ecx
0042EAA4  |. |894D F0       ||mov     [ebp-10],ecx
0042EAA7  |. |C742 FC 01000>||mov     dword ptr [edx-4],1
0042EAAE  |. |EB 32         ||jmp     short 0042EAE2
0042EAB0  |> |C745 F0 03000>||mov     dword ptr [ebp-10],3
0042EAB7  |. |81CE 00010000 ||or      esi,100
0042EABD  |. |EB 23         ||jmp     short 0042EAE2
0042EABF  |> |C745 F0 01000>||mov     dword ptr [ebp-10],1
0042EAC6  |. |81CE 00010000 ||or      esi,100
0042EACC  |. |EB 14         ||jmp     short 0042EAE2
0042EACE  |> |C745 F0 02000>||mov     dword ptr [ebp-10],2
0042EAD5  |. |81CE 00010000 ||or      esi,100
0042EADB  |. |EB 05         ||jmp     short 0042EAE2
0042EADD  |> |33C9          ||xor     ecx,ecx
0042EADF  |. |894D F0       ||mov     [ebp-10],ecx
0042EAE2  |> |8B4A FC       ||mov     ecx,[edx-4]
0042EAE5  |. |83E9 02       ||sub     ecx,2
0042EAE8  |. |74 07         ||je      short 0042EAF1
0042EAEA  |. |83E9 02       ||sub     ecx,2
0042EAED  |. |74 08         ||je      short 0042EAF7
0042EAEF  |. |EB 0A         ||jmp     short 0042EAFB
0042EAF1  |> |834D F0 04    ||or      dword ptr [ebp-10],4
0042EAF5  |. |EB 04         ||jmp     short 0042EAFB
0042EAF7  |> |834D F0 0C    ||or      dword ptr [ebp-10],0C
0042EAFB  |> |8BC8          ||mov     ecx,eax
0042EAFD  |. |C1E1 02       ||shl     ecx,2
0042EB00  |. |83C1 10       ||add     ecx,10
0042EB03  |. |8B7D F0       ||mov     edi,[ebp-10]
0042EB06  |. |D3E7          ||shl     edi,cl
0042EB08  |. |0BF7          ||or      esi,edi
0042EB0A  |> |40            ||inc     eax
0042EB0B  |. |83C2 1C       ||add     edx,1C
0042EB0E  |. |83F8 04       ||cmp     eax,4
0042EB11  |.^\0F8C 3AFFFFFF |\jl      0042EA51

0042EB17  |.  8973 18       |mov     [ebx+18],esi
0042EB1A  |>  53            |push    ebx                             ; /pContext = 04190020
0042EB1B  |.  8B45 EC       |mov     eax,[ebp-14]                    ; |
0042EB1E  |.  8B50 0C       |mov     edx,[eax+C]                     ; |
0042EB21  |.  52            |push    edx                             ; |hThread = 004D8D78
0042EB22  |.  E8 83060800   |call    <jmp.&KERNEL32.SetThreadContext>; \SetThreadContext
0042EB27  |.  85C0          |test    eax,eax
0042EB29  |.  75 07         |jnz     short 0042EB32
0042EB2B  |.  C745 F4 FFFFF>|mov     dword ptr [ebp-C],-1
0042EB32  |>  FF45 FC       |inc     dword ptr [ebp-4]
0042EB35  |.  8145 EC 6C060>|add     dword ptr [ebp-14],66C
0042EB3C  |>  8B4D FC        mov     ecx,[ebp-4]
0042EB3F  |.  3B0D 987D4D00 |cmp     ecx,[4D7D98]
0042EB45  |.^ 0F8C BFFCFFFF \jl      0042E80A

各位说的壳我没遇过.
我认为 popf 前面的 int 3 主要是想让 OD 形成 EIP 停在 popf 的效果.
2008-7-6 08:10
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
由cc9d引发的pushfx/popfx蝴蝶效应
2008-7-6 08:25
0
雪    币: 370
活跃值: (78)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
20
[QUOTE=sessiondiy;476653]EIP 停在 9C ' 9D 得另外处理, 如下:

  00434E32   .  3D 9C000000   cmp     eax,9C
  00434E37   .  74 0D         je      short 00434E46
  00434E39   .  8B95 68FAFFFF mov     edx,[ebp-598]
  00434E3F   .  3D 9D000000   cmp     eax,9D
  00434E44   .  75 17         jnz     short 00434E5D

...... [/QUOTE]

学习了 另外有点错误就是 "mov  [ebx+18],esi 就是在设 DR6" 这个应该是DR7
2008-7-6 08:46
0
雪    币: 2067
活跃值: (82)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
21
谢谢指正.
的确是很大的错误.
2008-7-6 09:18
0
雪    币: 111
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jjh
22
楼上全是高手。。。。。。。。。。。
2008-7-7 10:49
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
1、POPfd不一定要跟在INt3后面。
2、OD在POPFD后面自动设置临时硬件断点,肯定有他的独到之处,有的人简单修改OD使之不自动设置硬件断点,那么应该在其他方面会出现潜在BUG.
2008-7-8 10:54
0
雪    币: 265
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
标题跟内容有什么联系吗?
楼主思想太飘逸了
2008-7-8 22:11
0
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
25
sessiondiy说的情况,现在的OD不存,原版的OD有这种情况~~~
(popf后临时断点是有的)
2008-11-16 20:02
0
游客
登录 | 注册 方可回帖
返回
//