首页
社区
课程
招聘
[求助]DUMP后的问题
发表于: 2007-6-7 16:42 9050

[求助]DUMP后的问题

2007-6-7 16:42
9050
一个加壳程序B.EXE,我DUMP前通过OD看内存窗口里面从地址01590000开始有一段长为13800的私有空间,权限为RWE,但是我通DUMP下来后程序却因为读取这段空间出错了,一看原来这段空间不存在了,请问这是什么原因阿?

详细情况是这样的:这个壳父进程建立了一个新的子进程,然后父进程退出,我没法跟进到子进程里了,只好利用OD附加到子进程,但是子进程早就过了OEP进入消息循环了。我只好在这种没跟到OEP的情况下手填了OEP的地址然后DUMP下来的。
我想问的是 :
1)是不是因为我没在跟到OEP 的时候DUMP才出现的这个问题?但是奇怪的是我在DUMP前的内存窗口里明明看到了01590000这段私有空间,为什么不能DUMP下来啊?
2)像这种跨进程的壳,我应该怎么才能跟入到子进程里从而顺利的跟到OEP?而不是过了OEP才能DUMP下来?

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

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
自己给自己顶
2007-6-7 17:36
0
雪    币: 45
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
01590000
2007-6-7 17:49
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
自己顶
2007-6-7 19:48
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
怎么没人回答阿,不难啊
2007-6-7 22:06
0
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
这段内存空间可能是动态分配,用完就释放了吧,所以你在OEP处Dump不了。
你可以在其被释放前Dump
2007-6-7 22:26
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
我在OD看内存窗口都能看见这段内存,即便是动态内存当时还没被释放啊,应该可以DUMP下来的啊.我也想能停在OEP,但是没法跟到那里,只好附加上去DUMP.有人能解答我的第2个问题吗??
对了这段内存地址并不是在主程序后面,而是在主程序后面的一个自己的dll模块地址的再后面,是不是dll分配的空间啊?如果是就难办了,因为这个dll在未DUMP的主程序调用时是加载在主程序地址后,但是DUMP后就加载到主程序前了。困惑阿~~
2007-6-8 08:54
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
OD里,选项,调试设置,事件,中断在新线程启动时,选上就可以了
2007-6-8 09:47
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
是新进程啊,不是线程
有没有一种可以修改程序父进程的工具啊?那样就可以不用去找程序作为父进程还是子进程的判断跳转了?应该有这种工具吧?
2007-6-8 11:02
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
新进程啊...直接用OD打开文件不就可以了??

实在不行在入口加个int 3啊...

说的问题好模糊,发个上来吧....(不是一般的没看懂...)
2007-6-8 11:11
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
是个壳,启动后会检查父进程,发现:
1)如果父进程是自己,则开始后续的工作:释放,解密,JMP到OEP...
2)如果父进程不是自己,则再次CreateProcess自己本身生成子进程,自己退出。

所以用OD跟是不能跟入到子进程里的,除非找到判断父进程是不是自己的那个“关键跳转”
更不可能在壳未解密代码前加入INT3(且壳有自检校)
没权限我还不能发文件

我都找到OEP了,且导入表也修复了,就是不能运行到OEP再DUMP下来,着急啊
2007-6-8 14:08
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
又弄了几天,这个壳就是SD-PROTECTOR1.1很早的版本了,softworm大侠的文章:http://www.pediy.com/practise/Paper.htm
就是讲这个的.但是我一步步做下来文章里提到的问题都解决了,但是还是不能走到OEP(resume两个干扰线程的地方也跳过了),甚至不能在跳过父子进程判断点后在OD里不能以子进程身份跑起来,这个壳子就是你文章里分析的阿(所有特征都符合),但是最后就是弄不出来,真希望softworm大侠能现身指点下迷津阿,迷茫期待中。。。
http://www.skycn.com/soft/15122.html就是上面这个软件了
2007-6-11 16:59
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
13
00820486            /0F84 0E010000   JE Stcl.0082059A                //转单进程
0082048C            |E8 01000000     CALL Stcl.00820492
00820491            |FF58 05         CALL FAR FWORD PTR DS:[EAX+5]     ; 远调用
00820494            |0E              PUSH CS
00820495            |0000            ADD BYTE PTR DS:[EAX],AL
00820497            |0050 E9         ADD BYTE PTR DS:[EAX-17],DL
0082049A            |B5 F8           MOV CH,0F8
0082049C            |0000            ADD BYTE PTR DS:[EAX],AL
0082049E            |FF50 8B         CALL NEAR DWORD PTR DS:[EAX-75]
008204A1            |F8              CLC

005EFDE8           55                PUSH EBP                         //OEP
005EFDE9           8BEC              MOV EBP,ESP
005EFDEB           83C4 F0           ADD ESP,-10
005EFDEE           53                PUSH EBX
005EFDEF           B8 20F75E00       MOV EAX,Stcl.005EF720
005EFDF4           E8 4B71E1FF       CALL Stcl.00406F44
005EFDF9           8B1D 34695F00     MOV EBX,DWORD PTR DS:[5F6934]                 ; Stcl.005F7C10
005EFDFF           8B03              MOV EAX,DWORD PTR DS:[EBX]
005EFE01           E8 1696EAFF       CALL Stcl.0049941C
005EFE06           8B03              MOV EAX,DWORD PTR DS:[EBX]
005EFE08           BA 60FE5E00       MOV EDX,Stcl.005EFE60
2007-6-11 18:10
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
搜索了下论坛,skylly是高手啊 看到你的回复很惊喜啊,我是报着试试的态度才再回下帖子的,我知道不太可能有人有耐性来解决我的这个问题的,你的回答给了我雪中送碳的感觉,好了不说恭维的话了说下问题:
你说的转单进程和OEP位置跟我找的完全一样,我导入表也都修复了,现在的问题就只有一个:怎么才能走到OEP的位置? 下面是我跟的过程:
ID 0000024C 的新进程已创建
0081F000   ID 000004FC 的主线程已创建
00400000   模块 F:\Program Files\公路施工测量坐标计算系统\Stcl.exe
7C800000   模块 C:\WINDOWS\system32\kernel32.dll
7C920000   模块 C:\WINDOWS\system32\ntdll.dll
0081F000   程序入口点
0081F07A   单步事件位于 Stcl.0081F07A
           seh: 00000001
0081F685   INT3 命令位于Stcl.0081F685
           seh: 00000002
0081F68B   单步事件位于 Stcl.0081F68B
           seh: 00000003
0081F6A1   单步事件位于 Stcl.0081F6A1
           seh: 00000004
0081F6BA   单步事件位于 Stcl.0081F6BA
           seh: 00000005
0081F6CF   单步事件位于 Stcl.0081F6CF
           seh: 00000006
0081F6EE   整数除以零
00824DFD   INT3 命令位于Stcl.00824DFD
           seh: 00000007
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000008
77D10000   模块 C:\WINDOWS\system32\user32.dll
77EF0000   模块 C:\WINDOWS\system32\GDI32.dll
76300000   模块 C:\WINDOWS\system32\IMM32.DLL
77DA0000   模块 C:\WINDOWS\system32\ADVAPI32.dll
77E50000   模块 C:\WINDOWS\system32\RPCRT4.dll
62C20000   模块 C:\WINDOWS\system32\LPK.DLL
73FA0000   模块 C:\WINDOWS\system32\USP10.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000009
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000000A
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000000B
0081F8C1   单步事件位于 Stcl.0081F8C1
           seh: 0000000C
0081FBD5   INT3 命令位于Stcl.0081FBD5
           seh: 0000000D
0081FE17   INT3 命令位于Stcl.0081FE17
           seh: 0000000E
00820038   单步事件位于 Stcl.00820038
           seh: 0000000F
008201E5   单步事件位于 Stcl.008201E5
           seh: 00000010
0082042F   单步事件位于 Stcl.0082042F
           seh: 00000011
00820408   断点位于 Stcl.00820408
00820432   断点位于 Stcl.00820432
00820747   INT3 命令位于Stcl.00820747
           seh: 00000012
00820989   INT3 命令位于Stcl.00820989
           seh: 00000013
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000014
00820CB6   单步事件位于 Stcl.00820CB6
           seh: 00000015
00820E82   单步事件位于 Stcl.00820E82
           seh: 00000016
00820F8F   单步事件位于 Stcl.00820F8F
           seh: 00000017
00824DFD   INT3 命令位于Stcl.00824DFD
           seh: 00000018
0082DEB3   断点位于 Stcl.0082DEB3
00821248   INT3 命令位于Stcl.00821248
           seh: 00000019
0082148A   INT3 命令位于Stcl.0082148A
           seh: 0000001A
00821597   访问违规: 读取 [00000000]
           seh: 0000001B
008215BC   访问违规: 正在写入到 [00000000]
           seh: 0000001C
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000001D
008218E9   INT3 命令位于Stcl.008218E9
           seh: 0000001E
00821B49   INT3 命令位于Stcl.00821B49
           seh: 0000001F
00822899   INT3 命令位于Stcl.00822899
           seh: 00000020
00822A3E   INT3 命令位于Stcl.00822A3E
           seh: 00000021
00822C80   INT3 命令位于Stcl.00822C80
           seh: 00000022
00824DFD   INT3 命令位于Stcl.00824DFD
           seh: 00000023
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000024
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000025
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000026
00823082   访问违规: 读取 [FFFFFFFF]
           seh: 00000027
00823321   单步事件位于 Stcl.00823321
           seh: 00000028
00824DFD   INT3 命令位于Stcl.00824DFD
           seh: 00000029
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000002A
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000002B
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000002C
77BE0000   模块 C:\WINDOWS\system32\msvcrt.dll
770F0000   模块 C:\WINDOWS\system32\oleaut32.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000002D
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000002E
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000002F
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000030
76990000   模块 C:\WINDOWS\system32\ole32.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000031
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000032
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000033
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000034
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000035
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000036
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000037
77BD0000   模块 C:\WINDOWS\system32\version.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000038
5D170000   模块 C:\WINDOWS\system32\comctl32.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000039
72F70000   模块 C:\WINDOWS\system32\winspool.drv
7D590000   模块 C:\WINDOWS\system32\shell32.dll
77F40000   模块 C:\WINDOWS\system32\SHLWAPI.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000003A
77180000   模块 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000003B
76320000   模块 C:\WINDOWS\system32\comdlg32.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000003C
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000003D
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000003E
00FD0000   模块 F:\Program Files\公路施工测量坐标计算系统\Stchb.dll
00FD1000     头部代码大小为 0005C800, 扩展到节大小 'pec1'
76B10000   模块 C:\WINDOWS\system32\winmm.dll
008251E5   单步事件位于 Stcl.008251E5
           seh: 0000003F
011C0000   模块 F:\Program Files\公路施工测量坐标计算系统\Stchx.dll
011C1000     头部代码大小为 00057200, 扩展到节大小 'pec1'
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000040
013C0000   模块 F:\Program Files\公路施工测量坐标计算系统\Stchz.dll
013C1000     头部代码大小为 00050000, 扩展到节大小 'pec1'
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000041
008234B9   单步事件位于 Stcl.008234B9
           seh: 00000042
0082371F   单步事件位于 Stcl.0082371F
           seh: 00000043
008251E5   单步事件位于 Stcl.008251E5
           seh: 00000044
00823937   INT3 命令位于Stcl.00823937
           seh: 00000045
00823B7D   INT3 命令位于Stcl.00823B7D
           seh: 00000046
0082BDCD   访问违规: 读取 [00000000]
           seh: 00000047
0082BDCD   访问违规: 读取 [00000000]
           调试的程序无法处理异常
           seh: 00000048
           记录文件已关闭

脚本这么写的:
var seh
var p1
var p2
var p3
eoe exp1
eob exp1
run
exp1:
add seh,1
log seh
cmp seh,11
je stop1
esto

stop1:
coe
cob
mov p1,[esp+4]
bp p1
esto
bc p1
sti
mov p2,eip
add p2,24
bp p2
esto
bc p2
sti
sti
go 820458
mov !ZF,1//选择单进程
eoe exp2
eob exp2
run

exp2:
add seh,1
log seh
cmp seh,18
je next2
esto

next2:
cob
coe
bp 82deb3
esto
bc 82deb3
mov !zf,1//跳过ANTI线程resume和主线程sleep(0)
eoe exp3
eob exp3
esto

exp3:
add seh,1
log seh
cmp seh,48
je next3
esto

next3:
ret

你能帮我看下我的问题是出在哪里了吗?真的谢谢你了
2007-6-11 19:48
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
居然有人说我是高手,
其实我只是个菜鸟~~~,喜欢指手划脚而已~~~
既然你这么说,我也只好帮到底了...

你的脚本的问题在于:
bp p2
bp 82deb3
像这样的代码尽量避免,sdp的壳,对代码的检测比较严格。

你的脚本我稍微改了下,不求改的很通用,但求走到oep。
var seh
var p1
var p2
var p3
eoe exp1
eob exp1

msg "不忽略INT3和单步异常"

gpa "GetSystemInfo","kernel32.dll"
cmp $RESULT,0
je err
var GetSystemInfo
mov GetSystemInfo,$RESULT
find GetSystemInfo,#7C20#
cmp $RESULT,0
je err
mov [$RESULT],#EB#
msg "patch ANTI线程"

var cb
var cs
mov cb,401000
mov cs,2d6000

run
exp1:
add seh,1
log seh
cmp seh,11
je stop1
esto

stop1:
coe
cob
mov p1,[esp+4]
bp p1
esto
bc p1
sti
mov p2,eip
add p2,24
bp p2
esto
bc p2
sti
sti
go 820458
mov !ZF,1
msg "选择单进程"
eoe exp2
eob exp2
run

exp2:
add seh,1
log seh
cmp seh,18
je next2
esto

next2:
cob
coe

eoe exp3
eob exp3
esto

exp3:
add seh,1
log seh
cmp seh,48
je next3
esto

next3:
cob exp3
coe exp3
log cb
log cs
bprm cb,cs
esto
bpmc
cmt eip,"OEP"

ret

err:
msg "error"
ret
2007-6-11 21:12
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
skylly 谦虚了,虽然我是个刚开始crake学习的菜鸟,但是从论坛你的回复能看的出来你是很有实力的。话又说回来,即便是老话说一山更比一山高,但是对我们这些在门口摸索的菜鸟们来说,能有像你这样"喜欢指手画脚"的前辈指点一二,是件很令人振奋的事情。谢谢了
先把马屁拍了再去研究问题
2007-6-11 21:35
0
雪    币: 233
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
skylly关于这个壳还有很多不懂地方想请教你下:
你修改后的脚本跟之前区别在于:

1)你PATCH的是GetSystemInfo函数。
2)是一开始就PATCH上了。

我想问得是:

  试了几次发现:只要在第A次异常前PATCH就能顺利达到OEP,我跟了从A到B的过程没有找到GetSystemInfo函数的调用,很不解为什么会出现这种情况呢?

var seh
var p1
var p2
var p3
eoe exp1
eob exp1

run
exp1:
add seh,1
log seh
cmp seh,a//小于a时PATCH就能到OEP
je patch
cmp seh,11
je stop1
esto

patch:
mov [7c812d73],#EB#
esto

stop1:
coe
cob
mov p1,[esp+4]
bp p1
esto
bc p1
sti
mov p2,eip
add p2,24
bp p2
esto
bc p2
sti
sti
go 820458
mov !ZF,1//选择单进程
eoe exp2
eob exp2
run

exp2:
add seh,1
log seh
cmp seh,18
je next2
esto

next2:
cob
coe
eoe exp3
eob exp3
esto

exp3:
add seh,1
log seh
cmp seh,48
je next3
esto

next3:
ret
2007-6-12 17:26
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
18
你在820458这个地址改变ZF,是治标的patch,GetSystemInfo 是治本的patch
壳通过GetSystemInfo 来判断是否单cpu,然后决定是否创建anti线程,只要在壳执行这个api之前patch,不管什么时候都无关紧要。
一般而言,壳会执行两次GetSystemInfo ,第一次后创建线程(create with flag suspend), 第二次恢复线程(resume thread)
2007-6-15 16:11
0
游客
登录 | 注册 方可回帖
返回
//