bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
阅读:1961回复:13

[100分]讨论一下核心未被引出的函数,变量怎样比较可靠获得

楼主#
更多 发布于:2005-05-16 12:43
大家讨论一下
对于服务描述表中的,可以映射ntdll.dll到核心,分析PE文件,找到调用指令处判断服务号,再在服务描述表中按号找
那么其它的例程,变量又如何
使用硬编码与调试符号的方法除外
暴力搜索的请给出比较稳妥地依据
还有其它新方法的,非常欢迎,针对一个例程或变量也可以

最新喜欢:

aasa2aasa2
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
沙发#
发布于:2005-05-16 12:54

这个找KeServiceDescriptorTableShadow()

DWORD findAddressofShadowTable(void)
{
int i;
unsigned char *p;
DWORD val;
int result;

p = (unsigned char *)KeAddSystemServiceTable;
                         
for (i = 0; i < PAGE_SIZE; i++, p++)
{
__try
{
val = *(unsigned int *)p;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return 0;
}
if (MmIsAddressValid((PVOID)val))
{
result = memcmp((PVOID)val, KeServiceDescriptorTable, 16);
if (memcmp((PVOID)val, KeServiceDescriptorTable, 16) == 0)
{
if((PVOID)val != KeServiceDescriptorTable){
return val;
}
}
}
}
return 0;
}
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
板凳#
发布于:2005-05-16 18:36
方便最稳当的方法还是要数硬编码口牙

针对不同的操作系统版本收集不同的偏移
然后加到基地上
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-17 10:10
自己顶一下
看一下这个
http://www.xfocus.net/articles/200408/724.html
能不能根据输出函数设计的数据结构推导出来
哪怕是一个例程,一个变量也请说说
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-05-17 10:25

这个找KeServiceDescriptorTableShadow()

DWORD findAddressofShadowTable(void)
{
int i;
unsigned char *p;
DWORD val;
int result;

p = (unsigned char *)KeAddSystemServiceTable;
                         
for (i = 0; i < PAGE_SIZE; i++, p++)
{
__try
{
val = *(unsigned int *)p;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
return 0;
}
if (MmIsAddressValid((PVOID)val))
{
result = memcmp((PVOID)val, KeServiceDescriptorTable, 16);
if (memcmp((PVOID)val, KeServiceDescriptorTable, 16) == 0)
{
if((PVOID)val != KeServiceDescriptorTable){
return val;
}
}
}
}
return 0;
}


再问问:KeAddSystemServiceTable 你是如何获取的?
琢磨悟真知
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
5楼#
发布于:2005-05-17 12:00
 
再问问:KeAddSystemServiceTable 你是如何获取的?


extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable;
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-05-17 15:47
[quote]再问问:KeAddSystemServiceTable 你是如何获取的?


extern PSERVICE_DESCRIPTOR_TABLE KeServiceDescriptorTable; [/quote]
老大眼花了
是  KeAddSystemServiceTable
不是KeServiceDescriptorTable
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
7楼#
发布于:2005-05-18 00:09
 
再问问:KeAddSystemServiceTable 你是如何获取的?  


p = (unsigned char *)KeAddSystemServiceTable;  :D :D
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-05-19 11:07
再顶一下,思路是从已知例程的具体实现与未引出的例程之间的关系
周末结贴,请大家不吝赐教
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wywwwl
驱动大牛
驱动大牛
  • 注册日期2002-08-16
  • 最后登录2018-04-07
  • 粉丝1
  • 关注0
  • 积分-10分
  • 威望135点
  • 贡献值6点
  • 好评度76点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2005-05-19 11:39
再顶一下,思路是从已知例程的具体实现与未引出的例程之间的关系
周末结贴,请大家不吝赐教


hook的第一步就是要找到被hook的对象,要找到被hook的对象,就要使用搜索,
\"对于服务描述表中的,可以映射ntdll.dll到核心,分析PE文件,找到调用指令处判断服务号,再在服务描述表中按号找
那么其它的例程\" 这也是一种搜索,只不过这个方法具有系统无关性.

对于变量,通过名字了,或者对怀疑地址进行监控.

swapconext 老外写的代码,采用硬编码.作为搜索的关键字来用.
在我机器上stop.

在就是动态获得被hook对象地址,这个估计很难.因为不知道:
是否存在一个算法,可以计算当前执行的指令属于哪个内核函数.

估计如果看机器码达到读小说这种程度的人,才能搞出来(如果算法存在)
琢磨悟真知
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
10楼#
发布于:2005-05-19 13:24
如何得到未导出的符号名字?是否使用ln来查找,还是遍历pdb文件得到所有的符号名字呢?
走走看看开源好 Solaris vs Linux
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-05-22 08:57
如何得到未导出的符号名字?是否使用ln来查找,还是遍历pdb文件得到所有的符号名字呢?

ln是什么东东
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
KMK
KMK
驱动大牛
驱动大牛
  • 注册日期2001-09-12
  • 最后登录2017-10-06
  • 粉丝2
  • 关注0
  • 积分42分
  • 威望404点
  • 贡献值2点
  • 好评度58点
  • 原创分1分
  • 专家分1分
  • 社区居民
12楼#
发布于:2005-05-22 12:19
 
ln是什么东东

List Nearest Symbols
a Windbg\'s command
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-05-22 12:40
[quote]ln是什么东东

List Nearest Symbols
a Windbg\'s command
 [/quote]
还以为是新技术呢,还是用调试符号啊
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
游客

返回顶部