首页
社区
课程
招聘
7
[讨论]勾引第一题最精妙答案~先抛个砖
发表于: 2010-10-20 16:38 12509

[讨论]勾引第一题最精妙答案~先抛个砖

2010-10-20 16:38
12509

看见大家都在期待第一阶段的最精妙答案,但是达人们 也不见放出来 我先就最老套的方法来个讲解吧!
期待大神前来指教,引导不明真相的群众来围观:
1.题目要求:

直接传送门帖子可以看到:http://bbs.pediy.com/showthread.php?t=122497

2.步骤:

  (1)测试样本,直接双击打开样本:

        弹出“Failed”并自动生成一个0字节的文件


  (2)PEID加载

        观察是否加壳;


        结论:无壳

  (3)OLLYDBG上场调试

        程序入口点:


        这里步入:


        这里再步入:


        程序流程出现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
0040104B  |.  53            push    ebx                          ; /hTemplateFile = NULL
0040104C  |.  68 80000000   push    80                           ; |Attributes = NORMAL
00401051  |.  6A 04         push    4                            ; |Mode = OPEN_ALWAYS
00401053  |.  53            push    ebx                          ; |pSecurity => NULL
00401054  |.  6A 01         push    1                            ; |ShareMode = FILE_SHARE_READ
00401056  |.  68 00000080   push    80000000                     ; |Access = GENERIC_READ
0040105B  |.  68 30604000   push    00406030                     ; |FileName = "exploit.dat"
00401060  |.  8BE8          mov     ebp, eax                     ; |
00401062  |.  FF15 1C504000 call    dword ptr [<&KERNEL32.Create>; \CreateFileA
00401068  |.  8BF0          mov     esi, eax
0040106A  |.  83FE FF       cmp     esi, -1
0040106D  |.  897424 18     mov     dword ptr [esp+18], esi
00401071  |.  0F84 05010000 je      0040117C
00401077  |.  53            push    ebx                          ; /pFileSizeHigh => NULL
00401078  |.  56            push    esi                          ; |hFile
00401079  |.  FF15 18504000 call    dword ptr [<&KERNEL32.GetFil>; \GetFileSize
0040107F  |.  8BD8          mov     ebx, eax
00401081  |.  81FB 00020000 cmp     ebx, 200
00401087  |.  0F87 EF000000 ja      0040117C
0040108D  |.  8D4424 1C     lea     eax, dword ptr [esp+1C]
00401091  |.  6A 00         push    0                            ; /pOverlapped = NULL
00401093  |.  50            push    eax                          ; |pBytesRead
00401094  |.  8D8C24 300100>lea     ecx, dword ptr [esp+130]     ; |
0040109B  |.  53            push    ebx                          ; |BytesToRead
0040109C  |.  51            push    ecx                          ; |Buffer
0040109D  |.  56            push    esi                          ; |hFile
0040109E  |.  FF15 14504000 call    dword ptr [<&KERNEL32.ReadFi>; \ReadFile
004010A4  |.  8BCB          mov     ecx, ebx
004010A6  |.  8DB424 280100>lea     esi, dword ptr [esp+128]
004010AD  |.  8BD1          mov     edx, ecx
004010AF  |.  8BFD          mov     edi, ebp
004010B1  |.  C1E9 02       shr     ecx, 2
004010B4  |.  F3:A5         rep     movs dword ptr es:[edi], dwo>
004010B6  |.  8BCA          mov     ecx, edx
004010B8  |.  33C0          xor     eax, eax
004010BA  |.  83E1 03       and     ecx, 3
004010BD  |.  68 54604000   push    00406054                     ; /FileName = "user32.dll"
004010C2  |.  F3:A4         rep     movs byte ptr es:[edi], byte>; |
004010C4  |.  B9 80000000   mov     ecx, 80                      ; |
004010C9  |.  8DBC24 2C0100>lea     edi, dword ptr [esp+12C]     ; |
004010D0  |.  F3:AB         rep     stos dword ptr es:[edi]      ; |
004010D2  |.  FF15 10504000 call    dword ptr [<&KERNEL32.LoadLi>; \LoadLibraryA
004010D8  |.  8B3D 0C504000 mov     edi, dword ptr [<&KERNEL32.G>;  kernel32.GetProcAddress
004010DE  |.  8BF0          mov     esi, eax
004010E0  |.  68 48604000   push    00406048                     ; /ProcNameOrOrdinal = "MessageBoxW"
004010E5  |.  56            push    esi                          ; |hModule
004010E6  |.  FFD7          call    edi                          ; \GetProcAddress
004010E8  |.  68 3C604000   push    0040603C                     ; /ProcNameOrOrdinal = "MessageBoxA"
004010ED  |.  56            push    esi                          ; |hModule
004010EE  |.  A3 10854000   mov     dword ptr [408510], eax      ; |
004010F3  |.  FFD7          call    edi                          ; \GetProcAddress
004010F5  |.  81FB 84000000 cmp     ebx, 84
004010FB  |.  A3 14854000   mov     dword ptr [408514], eax
00401100  |.  77 16         ja      short 00401118
00401102  |.  8BCB          mov     ecx, ebx
00401104  |.  8BF5          mov     esi, ebp
00401106  |.  8BC1          mov     eax, ecx
00401108  |.  8D7C24 24     lea     edi, dword ptr [esp+24]
0040110C  |.  C1E9 02       shr     ecx, 2
0040110F  |.  F3:A5         rep     movs dword ptr es:[edi], dwo>
00401111  |.  8BC8          mov     ecx, eax
00401113  |.  83E1 03       and     ecx, 3
00401116  |.  F3:A4         rep     movs byte ptr es:[edi], byte>
00401118  |>  8B4C24 14     mov     ecx, dword ptr [esp+14]
0040111C  |.  55            push    ebp                          ; /pMemory
0040111D  |.  6A 01         push    1                            ; |Flags = HEAP_NO_SERIALIZE
0040111F  |.  51            push    ecx                          ; |hHeap
00401120  |.  FF15 08504000 call    dword ptr [<&KERNEL32.HeapFr>; \HeapFree
00401126  |.  B9 20000000   mov     ecx, 20
0040112B  |.  33C0          xor     eax, eax
0040112D  |.  8BFD          mov     edi, ebp
0040112F  |.  81FB 84000000 cmp     ebx, 84
00401135  |.  F3:AB         rep     stos dword ptr es:[edi]
00401137  |.  77 19         ja      short 00401152
00401139  |.  8BCB          mov     ecx, ebx
0040113B  |.  8BF5          mov     esi, ebp
0040113D  |.  8BD1          mov     edx, ecx
0040113F  |.  8DBC24 A80000>lea     edi, dword ptr [esp+A8]
00401146  |.  C1E9 02       shr     ecx, 2
00401149  |.  F3:A5         rep     movs dword ptr es:[edi], dwo>
0040114B  |.  8BCA          mov     ecx, edx
0040114D  |.  83E1 03       and     ecx, 3
00401150  |.  F3:A4         rep     movs byte ptr es:[edi], byte>
00401152  |>  8B4424 20     mov     eax, dword ptr [esp+20]
00401156  |.  8D4C24 20     lea     ecx, dword ptr [esp+20]
0040115A  |.  FF10          call    dword ptr [eax]
0040115C  |.  8B9424 A40000>mov     edx, dword ptr [esp+A4]
00401163  |.  8D8C24 A40000>lea     ecx, dword ptr [esp+A4]
0040116A  |.  FF12          call    dword ptr [edx]
0040116C  |.  8B7C24 14     mov     edi, dword ptr [esp+14]
00401170  |.  8B7424 18     mov     esi, dword ptr [esp+18]
00401174  |.  C74424 10 010>mov     dword ptr [esp+10], 1
0040117C  |>  85F6          test    esi, esi
0040117E  |.  74 07         je      short 00401187
00401180  |.  56            push    esi                          ; /hObject
00401181  |.  FF15 04504000 call    dword ptr [<&KERNEL32.CloseH>; \CloseHandle
00401187  |>  85ED          test    ebp, ebp
00401189  |.  74 0A         je      short 00401195
0040118B  |.  55            push    ebp                          ; /pMemory
0040118C  |.  6A 01         push    1                            ; |Flags = HEAP_NO_SERIALIZE
0040118E  |.  57            push    edi                          ; |hHeap
0040118F  |.  FF15 08504000 call    dword ptr [<&KERNEL32.HeapFr>; \HeapFree
00401195  |>  85FF          test    edi, edi
00401197  |.  74 07         je      short 004011A0
00401199  |.  57            push    edi                          ; /hHeap
0040119A  |.  FF15 00504000 call    dword ptr [<&KERNEL32.HeapDe>; \HeapDestroy
004011A0  |>  8B4424 10     mov     eax, dword ptr [esp+10]
004011A4  |.  5F            pop     edi
004011A5  |.  5E            pop     esi
004011A6  |.  5D            pop     ebp
004011A7  |.  5B            pop     ebx
004011A8  |.  81C4 18030000 add     esp, 318
004011AE  \.  C3            retn
004011AF      90            nop
004011B0   .  6A 01         push    1                            ; /Timeout = 1. ms
004011B2   .  FF15 28504000 call    dword ptr [<&KERNEL32.Sleep>>; \Sleep
004011B8   .  C3            retn
004011B9      90            nop
004011BA      90            nop
004011BB      90            nop
004011BC      90            nop
004011BD      90            nop
004011BE      90            nop
004011BF      90            nop
004011C0   .  6A 00         push    0
004011C2   .  68 6C604000   push    0040606C                     ;  UNICODE "ExploitMe"
004011C7   .  68 60604000   push    00406060                     ;  UNICODE "Fail"
004011CC   .  6A 00         push    0
004011CE   .  FF15 10854000 call    dword ptr [408510]
004011D4   .  C3            retn

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

上传的附件:
收藏
免费 7
支持
分享
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞~
2024-5-31 04:07
伟叔叔
为你点赞~
2024-2-24 00:26
QinBeast
为你点赞~
2024-1-18 02:10
心游尘世外
为你点赞~
2024-1-14 00:24
shinratensei
为你点赞~
2024-1-11 04:11
飘零丶
为你点赞~
2023-12-25 00:31
PLEBFE
为你点赞~
2023-3-16 00:57
最新回复 (38)
雪    币: 258
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
利用地址硬编码,估计不能算优秀
2010-10-20 16:51
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这也拿了个精

放个触发漏洞的解释不知道能拿到精不
2010-10-20 16:53
0
雪    币: 3171
活跃值: (81)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
4
见笑了~~
希望是能够 激起大家讨论的热情
也承蒙kanxue厚爱,惭愧~
2010-10-20 16:56
0
雪    币: 103
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
是啊,这个精也太好拿了
2010-10-20 16:57
0
雪    币: 241
活跃值: (235)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
6
勾引贴,呵呵就这个名也要给精
2010-10-20 17:01
0
雪    币: 458
活跃值: (426)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7
(4)很幸运内存中直接有“Exploit success”我们直接调用,一下子就可以省好多。


内存中到底有没有这个串啊    不知道如何找  难道暴力搜索吗?
2010-10-20 17:02
0
雪    币: 3171
活跃值: (81)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
8
题目跟帖中有人爆料 说内存中暴力搜索到了
但是,我用softice  

s 0 l ffffffff ** ** **暴力搜索了一圈 没有找到  successful 倒是很多
2010-10-20 17:07
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
Exploit 和 success貌似都有
我开始是想rep连接起来
但是不懂汇编
2010-10-20 17:20
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
mov ecx, x
mov edi, x
mov esi, x
rep movs

2次起码要花掉20字节了
2010-10-20 17:30
0
雪    币: 435
活跃值: (767)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
我试着连,但是我这写的代码没有看到字节数有减,反而好像还增加了!
2010-10-20 17:31
0
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
内存中确实没这个字符串,昨晚弄的时候自己弄得太长了,悲剧
2010-10-20 17:34
0
雪    币: 411
活跃值: (262)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
不调大家胃口,我的答案可能违规了.不违规的是31或32,31有要用到DLL中的地址,通用性好象差了些.
2010-10-20 17:42
0
雪    币: 3171
活跃值: (81)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
14
期待把你的到时候分享下给大家看看
2010-10-20 17:45
0
雪    币: 411
活跃值: (262)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
先看看别人的再说,我怕放出来要挨批惨
2010-10-20 17:49
0
雪    币: 171
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
嗯,看了一晚上也没有分析出来。
2010-10-20 17:59
0
雪    币: 82
活跃值: (386)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
既然已经硬编码了
8d 04 24   lea eax,[dword esp]
这里换个寄存器
后面
6a 00      push 0
就可以用一个字节的
50         push eax
然后没说程序不能崩溃吧?
直接减少一个push 0
e92a152d00 jmp 004011cc
还能少点
2010-10-20 18:01
0
雪    币: 3171
活跃值: (81)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
18
[QUOTE=Aaah;875255]既然已经硬编码了
8d 04 24   lea eax,[dword esp]
这里换个寄存器
后面
6a 00      push 0
就可以用一个字节的
50         push eax
然后没说程序不能崩溃吧?
直接减少一个push 0
e92a152d00 jmp 004011cc
还...[/QUOTE]

呵呵 forgot兄的答案大家可以看看 确实不错,至于为什么要平栈 ,这是个人习惯。。。
2010-10-20 18:07
0
雪    币: 458
活跃值: (426)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
19
请问forgot大大的答案在哪   也好膜拜下
2010-10-20 18:18
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
20
何必两次,直接把success复制到Exploit后面就可以了,然后压入Exploit的地址,一次足够~
2010-10-20 19:31
0
雪    币: 3171
活跃值: (81)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
21
呵呵 就是这样
2010-10-20 19:57
0
雪    币: 458
活跃值: (426)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
22
你这样的话 就破坏ExploitMe这个MessageBox的标题(第二个参数)了   貌似不可取吧。
2010-10-20 20:38
0
雪    币: 69
活跃值: (41)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
23
的确破坏标题了.
后来在kernel32.dll中也找到ExploitMe.exe的字符串了..想将success 传人过去...还是会破坏标题,这样的做法..能到32字节...
2010-10-20 21:52
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
奇怪,楼上的,和LS的LS那字符串Exploit内存是不可写的吧,。。。你怎么接啊。。。
2010-10-20 21:54
0
雪    币: 133
活跃值: (622)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
25
这都可以精华。。早知道我也混个了
2010-10-20 22:16
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册