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

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

2010-10-20 16:38
12392

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

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

2.步骤:

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

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


  (2)PEID加载

        观察是否加壳;


        结论:无壳

  (3)OLLYDBG上场调试

        程序入口点:


        这里步入:


        这里再步入:


        程序流程出现:

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


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (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
活跃值: (76)
能力值: (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
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
7
(4)很幸运内存中直接有“Exploit success”我们直接调用,一下子就可以省好多。


内存中到底有没有这个串啊    不知道如何找  难道暴力搜索吗?
2010-10-20 17:02
0
雪    币: 3171
活跃值: (76)
能力值: (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
雪    币: 388
活跃值: (707)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
我试着连,但是我这写的代码没有看到字节数有减,反而好像还增加了!
2010-10-20 17:31
0
雪    币: 267
活跃值: (24)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
12
内存中确实没这个字符串,昨晚弄的时候自己弄得太长了,悲剧
2010-10-20 17:34
0
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
不调大家胃口,我的答案可能违规了.不违规的是31或32,31有要用到DLL中的地址,通用性好象差了些.
2010-10-20 17:42
0
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
14
期待把你的到时候分享下给大家看看
2010-10-20 17:45
0
雪    币: 411
活跃值: (247)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
先看看别人的再说,我怕放出来要挨批惨
2010-10-20 17:49
0
雪    币: 171
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
嗯,看了一晚上也没有分析出来。
2010-10-20 17:59
0
雪    币: 82
活跃值: (291)
能力值: ( 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
活跃值: (76)
能力值: (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
活跃值: (421)
能力值: ( 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
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
21
呵呵 就是这样
2010-10-20 19:57
0
雪    币: 458
活跃值: (421)
能力值: ( 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
活跃值: (587)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
25
这都可以精华。。早知道我也混个了
2010-10-20 22:16
0
游客
登录 | 注册 方可回帖
返回
//