首页
社区
课程
招聘
[求助]此段代码是花指令还是其他?期待高手帮助
发表于: 2008-3-4 09:38 4945

[求助]此段代码是花指令还是其他?期待高手帮助

2008-3-4 09:38
4945
下面片断为用IDA打开的驱动,
INIT:000185A2
INIT:000185A2 loc_185A2:                              ; CODE XREF: start+A0j
INIT:000185A2                 push    2000h           ; NumberOfBytes
INIT:000185A7                 call    ds:MmAllocateNonCachedMemory
INIT:000185AD                 mov     dword_168C0, eax
INIT:000185B2                 cmp     dword_168C0, 0
INIT:000185B9                 jnz     short loc_185C5
INIT:000185BB                 mov     eax, 0C000009Ah
INIT:000185C0                 jmp     loc_188D9
INIT:000185C5 ; ---------------------------------------------------------------------------
INIT:000185C5
INIT:000185C5 loc_185C5:                              ; CODE XREF: start+DBj
INIT:000185C5                 jmp     near ptr 3A6E8h
INIT:000185C5 ; ---------------------------------------------------------------------------
INIT:000185CA                 db 3Bh
INIT:000185CB                 dd 0B009D5FFh
INIT:000185CF                 db 0E9h
INIT:000185D0                 dd 0B0C5AA3Ch
INIT:000185D4                 db 0D5h, 24h, 0CFh
INIT:000185D7                 dd 7EA1CE56h

大伙看看上面INIT:000185B9                 jnz     short loc_185C5
跳到loc_185C5,可此处是乱码,请问这是啥原因,是花指令?还是程序自己实时运行修改内存?如何解决能看到真实的代码?

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 4583
活跃值: (3567)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
2
那不算什么乱码吧,只不过IDA没有识别成代码而已,你在那个位置c一下,强制解释成代码。
2008-3-4 13:11
0
雪    币: 223
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
感谢答复。看此行
jmp     near ptr 3A6E8h
跳转地址不对呀,程序中没此地址呀?不知道为何?还请指点。
2008-3-6 09:51
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
请确认程序没有加壳之类的
2008-3-6 10:08
0
雪    币: 223
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
版主请问一下,加壳是对整个文件还是可以对部分呢?我这个是个sys,从ida分析来看,入口driverentry分析的都没错,如创建设备IoCreateDevice,建立符号连接IoCreateSymbolicLink,然后就到了上面的代码了。
2008-3-6 10:27
0
雪    币: 4583
活跃值: (3567)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
不是太清楚你的上下文。

你在动态调试中查看一下这些代码,就是说加载sys之后看看这些代码显示成什么样了,
那个时候重定位都处理完了。
2008-3-6 10:39
0
雪    币: 223
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
入口代码如下:
   public start
INIT:000184DE start           proc far
INIT:000184DE
INIT:000184DE var_4C          = dword ptr -4Ch
INIT:000184DE var_30          = dword ptr -30h
INIT:000184DE SymbolicLinkName= UNICODE_STRING ptr -1Ch
INIT:000184DE DestinationString= UNICODE_STRING ptr -0Ch
INIT:000184DE DeviceObject    = dword ptr -4
INIT:000184DE
INIT:000184DE                 push    ebp
INIT:000184DF                 mov     ebp, esp
INIT:000184E1                 sub     esp, 30h
INIT:000184E4                 push    ebx
INIT:000184E5                 push    esi
INIT:000184E6                 push    edi
INIT:000184E7                 push    offset SourceString ; "\\Device\\hackc"
INIT:000184EC                 lea     eax, [ebp+DestinationString]
INIT:000184EF                 push    eax             ; DestinationString
INIT:000184F0                 call    ds:RtlInitUnicodeString
INIT:000184F6                 push    offset aDosdevicesDump ; "\\DosDevices\\hackc"
INIT:000184FB                 lea     ecx, [ebp+SymbolicLinkName]
INIT:000184FE                 push    ecx             ; DestinationString
INIT:000184FF                 call    ds:RtlInitUnicodeString
INIT:00018505                 lea     edx, [ebp+DeviceObject]
INIT:00018508                 push    edx             ; DeviceObject
INIT:00018509                 push    0               ; Exclusive
INIT:0001850B                 push    100h            ; DeviceCharacteristics
INIT:00018510                 push    8402h           ; DeviceType
INIT:00018515                 lea     eax, [ebp+DestinationString]
INIT:00018518                 push    eax             ; DeviceName
INIT:00018519                 push    444h            ; DeviceExtensionSize
INIT:0001851E                 mov     ecx, [ebp+8]
INIT:00018521                 push    ecx             ; DriverObject
INIT:00018522                 call    ds:IoCreateDevice
INIT:00018528                 mov     [ebp+var_30], eax
INIT:0001852B                 cmp     [ebp+var_30], 0
INIT:0001852F                 jl      short loc_1857A
INIT:00018531                 lea     edx, [ebp+DestinationString]
INIT:00018534                 push    edx             ; DeviceName
INIT:00018535                 lea     eax, [ebp+SymbolicLinkName]
INIT:00018538                 push    eax             ; SymbolicLinkName
INIT:00018539                 call    ds:IoCreateSymbolicLink
INIT:0001853F                 mov     [ebp+var_30], eax
INIT:00018542                 mov     ecx, [ebp+8]
INIT:00018545                 mov     dword ptr [ecx+70h], offset sub_15340
INIT:0001854C                 mov     edx, [ebp+8]
INIT:0001854F                 mov     eax, [ebp+8]
INIT:00018552                 mov     ecx, [eax+70h]
INIT:00018555                 mov     [edx+40h], ecx
INIT:00018558                 mov     edx, [ebp+8]
INIT:0001855B                 mov     eax, [ebp+8]
INIT:0001855E                 mov     ecx, [eax+40h]
INIT:00018561                 mov     [edx+38h], ecx
INIT:00018564                 mov     edx, [ebp+8]
INIT:00018567                 mov     eax, [ebp+8]
INIT:0001856A                 mov     ecx, [eax+38h]
INIT:0001856D                 mov     [edx+78h], ecx
INIT:00018570                 mov     edx, [ebp+8]
INIT:00018573                 mov     dword ptr [edx+34h], offset sub_15430
INIT:0001857A
INIT:0001857A loc_1857A:                              ; CODE XREF: start+51j
INIT:0001857A                 cmp     [ebp+var_30], 0
INIT:0001857E                 jge     short loc_185A2
INIT:00018580                 cmp     [ebp+DeviceObject], 0
INIT:00018584
INIT:00018584 loc_18584:                              ; CODE XREF: start+100j
INIT:00018584                 jz      short loc_18590
INIT:00018586                 mov     eax, [ebp+DeviceObject]
INIT:00018589                 push    eax             ; DeviceObject
INIT:0001858A                 call    ds:IoDeleteDevice
INIT:00018590
INIT:00018590 loc_18590:                              ; CODE XREF: start:loc_18584j
INIT:00018590                 lea     ecx, [ebp+SymbolicLinkName]
INIT:00018593                 push    ecx             ; SymbolicLinkName
INIT:00018594                 call    ds:IoDeleteSymbolicLink
INIT:0001859A                 mov     eax, [ebp+var_30]
INIT:0001859D                 jmp     loc_188D9
INIT:000185A2 ; ---------------------------------------------------------------------------
INIT:000185A2
INIT:000185A2 loc_185A2:                              ; CODE XREF: start+A0j
INIT:000185A2                 push    2000h           ; NumberOfBytes
INIT:000185A7                 call    ds:MmAllocateNonCachedMemory
INIT:000185AD                 mov     dword_168C0, eax
INIT:000185B2                 cmp     dword_168C0, 0
INIT:000185B9                 jnz     short loc_185C5
INIT:000185BB                 mov     eax, 0C000009Ah
INIT:000185C0                 jmp     loc_188D9
INIT:000185C5 ; ---------------------------------------------------------------------------
INIT:000185C5
INIT:000185C5 loc_185C5:                              ; CODE XREF: start+DBj
INIT:000185C5                 jmp     near ptr 3A6E8h
INIT:000185C5 ; ---------------------------------------------------------------------------
INIT:000185CA                 db 3Bh
INIT:000185CB                 db 0FFh ;  OFF32 SEGDEF [0,B009D5FF]
INIT:000185CC                 db 0D5h
INIT:000185CD                 db    9
INIT:000185CE                 db 0B0h
INIT:000185CF                 db 0E9h ; ?
INIT:000185D0                 db 3Ch
INIT:000185D1                 db 0AAh ; ?

请看INIT:000185B9                 jnz     short loc_185C5

jmp     near ptr 3A6E8h。

有没有好的办法把某个驱动运行时dump下来?该sys防调试的。
2008-3-6 11:39
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
8
有ANTI DEBUG
有ANTI DUMP也就不奇怪了

还有,此驱动入口连反调试代码都没有,为什么不能调试?
是不是别的驱动在保护?如果是这样,你就得在负责保护的驱动入手了
2008-3-6 12:13
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
都是高手,利害呀。
2008-3-6 20:09
0
雪    币: 4583
活跃值: (3567)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
10
你给这些IDA的静态显示做什么,我让你动态调试中查看,你猫叫了个咪咪又贴了一遍问题,无语中。

还有你怎么知道它反调试的?如果反调试,那就动用VMware或qemu的硬件调试功能吧,这样省
事些。VMware支持gdb调试接口,对于Guest来说,这相当于硬件调试器。

就算反调试,你从DriverEntry直接开始调,它也反?你就说你怎么动态调的吧,你怎么发现它反
调试的吧。
2008-3-7 09:07
0
游客
登录 | 注册 方可回帖
返回
//