首页
社区
课程
招聘
[旧帖] 关于利用LD_PRELOAD进行hook的问题 0.00雪花
发表于: 2016-2-2 18:15 3983

[旧帖] 关于利用LD_PRELOAD进行hook的问题 0.00雪花

2016-2-2 18:15
3983

http://hbprotoss.github.io/posts/li-yong-ld_preloadjin-xing-hook.html
看到利用LD_PRELOAD在Ring3级别进行hook,就照着代码试了一下,没有成功。后来多次尝试发现,当main.c的代码为:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    if( strcmp(argv[1], "test") )
    {
        printf("Incorrect password\n");
    }
    else
    {
        printf("Correct password\n");
    }
    return 0;
}

时,便hook不成功。但是若代码为:

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char a[]="test";
    if( strcmp(argv[1], a) )
    {
        printf("Incorrect password\n");
    }
    else
    {
        printf("Correct password\n");
    }
    return 0;
}

时,便可以成功hook,查了很久也没搞明白为什么,请各位大牛赐教。

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
是不是因为a[]末尾有结束字符,而"test"后面没有?
2016-2-2 19:02
0
雪    币: 1141
活跃值: (809)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
有可能 strcmp 被編譯器優化掉了
看一下編譯出來的 binary 吧
2016-2-3 06:14
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
"test"是const char *
char a[]是char *
类型不同,你的mock函数怎么定义的
2016-2-3 10:49
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=fuchuang;1414245]"test"是const char *
char a[]是char *
类型不同,你的mock函数怎么定义的[/QUOTE]

我试了,和这个是没有关系的。
2016-2-3 11:22
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个。。功力不够呃
2016-2-3 11:23
0
雪    币: 198
活跃值: (957)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
一个是全局,一个是局部数据,是不是因为重定位的原因。
2016-2-3 11:46
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
目前猜可能是当参数直接"text"时,字符串是放在数据段的,会有问题。
而其它的,包括
char *a = "text";
因为函数堆栈区有指针a,所以没问题。
现在就是想知道为什么会这样,但不知道该怎么往下研究了。
2016-2-3 16:29
0
游客
登录 | 注册 方可回帖
返回
//