| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2887 人关注过本帖
标题:XP WIN7 下获取Kernel32.exe基址的程序片段(通杀 xp win7 (32位 64位)
取消只看楼主 加入收藏
水哥
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:65
专家分:111
注 册:2012-8-11
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
XP WIN7 下获取Kernel32.exe基址的程序片段(通杀 xp win7 (32位 64位)
这俩天写一个shellcode的小程序,调用以前XP下从PEB获取kernel32基址的方法在win7(64位)下失效。
程序代码:
mov eax,fs:[30h]     ;得到PEB结构地址
mov eax,[eax + 0ch] ;得到PEB_LDR_DATA结构地址
mov esi,[eax + 1ch] 
lodsd ; 得到KERNEL32.DLL所在LDR_MODULE结构的InInitializationOrderModuleList地址
mov edx,[eax + 8h]   ;得到BaseAddress,既Kernel32.dll基址

上面是XP下以前的方法可惜在WIN7下不能用了
有没有通用的办法那,要不咋的shellcode没法整了,别急看下面的
程序代码:
assume fs:nothing
    xor     ecx,ecx
    mov eax,fs:[30h]       ;得到PEB结构地址
    mov eax,[eax + 0ch]    ;得到PEB_LDR_DATA结构地址 
    mov esi,[eax + 1ch]
next_module:
        mov   eax,[esi+08h]    ;取列表中模块基址到eax
        mov   edi,[esi+20h]    ;取所属模块的字串首地址到EDI
        mov   esi,[esi]
        cmp  [edi+12*2],cx     ;cx=0 比较字串的尾部是否为0
        jnz  next_module       ;继续枚举
     
        mov  edx,eax           ;eax保存着kernel32的基址
其中[edi+12*2]为啥要取这个偏移那?
因为kernel32.exe在PEB中的字串是以unicode的形式保存着,
所以kernel32.exe占内存24个字节
首地址加24个字节就是kernel32的尾部
比较模块尾部是否为0来确定是否是kernel32的基址
此方法通用于XP WIN7 32位和64位,俺亲自做了测试可以通用哦;
亲们写注入又有好办法了
说明:此方法非自己原创
搜索更多相关主题的帖子: color win7 
2012-09-05 13:35
水哥
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:65
专家分:111
注 册:2012-8-11
收藏
得分:0 
俺孤陋寡闻了,一直用以前的方法,这是这俩天需要获取基址了,百度研究了下,觉得好用才共享下
2012-09-05 13:41
快速回复:XP WIN7 下获取Kernel32.exe基址的程序片段(通杀 xp win7 (32位 64位 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029335 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved