首页
社区
课程
招聘
[求助]问几个基于got表hook的问题
发表于: 2015-1-21 15:30 13559

[求助]问几个基于got表hook的问题

2015-1-21 15:30
13559
最近研究so hook,之前以为只会有几个问题,但发帖问了下后才发现,原来自己是错的,自己根本就是个渣。于是就决定慢慢来,从最简单的开始。于是就先自己写了个demo来试着基于got表的hook,但还是被虐了,所以只好又回来问问题了

1.安装后程序加载的so库的路径是什么啊?是data/data/程序/lib 里的? 还是在/proc/pid/maps中看到的/data/app-lib/xxxxx/ 里的?
2.如果问题1确定后,我是用dlopen+dlsym找到了so库中想要hook的函数的地址,假设地址为A。然后我遍历so的头部,找到.got段的位置,进入.got再进行遍历,每次获得的地址假设是B。
  然后比较A和B是否相等,相等的话就修改。这样的思路正确吗?但为什么我遍历完后都没有没试过A和B相等啊?

其实就是根据http://blog.csdn.net/eqera/article/details/38022045 和 http://bbs.pediy.com/showthread.php?t=157419 来尝试hook 我自己写的demo中的so

但是结果如下:
old_method = 0x73d9ec31
got_item = 73d9f7d0
got_item = 73d9f7d8
got_item = 73d9f7e0
got_item = 4005da95
got_item = 73da02d8
got_item = 73da01d0
got_item = 0
got_item = 0
got_item = 0
got_item = 0
got_item = 40073399
got_item = 4007348d
got_item = 4005da95
got_item = 4006b758
got_item = 4006c000
got_item = 0
got_item = 0

old_method 是我用dlopen+dlsym得到的,自己demo中的so中的,想要hook的函数地址
got_item是跑got表得到的地址,但没有相等的 。

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

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
骚年。。。
2015-1-21 16:00
0
雪    币: 3094
活跃值: (319)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
3
我足足对了古河大大的libinject,和另一个网上的例子 2天了..

不过刚又有点发现,我试试先。
2015-1-21 16:05
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
表示完全看不懂,算了还是等LZ下给答案
2015-1-21 16:31
0
雪    币: 3094
活跃值: (319)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
5
是我表达不清楚?
2015-1-21 16:36
0
雪    币: 201
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
1. 首先你要清楚so hook的原理,源so路径(srcSo)和hook函数所在的so路径(destSo)需要在程序中指定的
2. inject之后,srcSo和destSo在同一进程空间,你就可以在got表中找到要hook的函数地址,然后做替换即可
2015-1-21 17:42
0
雪    币: 3094
活跃值: (319)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
7
我知道要指定,就是发现了源so有两个路径,不知道哪个是对的。一个是在程序的文件夹里的,另一个是在程序的映射表中看到的路径。(我是指定后者的

还有,我是将so注入到目标程序中的,而且在maps中可以看到两个so都在了,就是在遍历got表找函数地址时,找不到啊...
2015-1-21 17:58
0
雪    币: 201
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
印象中android4.2之前版本是用/data/data/package/lib,4.2以上版本是用/data/app-lib/,以你/proc/pid/maps看到的为实吧。
你怎么找的函数地址,是根据函数名去找的吗?
比如源so的函数名A,目标so要替换的函数名B,根据名称找地址,应该可以,不然可能就是你名字搞错了
2015-1-22 13:55
0
雪    币: 3094
活跃值: (319)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
9
是根据函数名找,也找到了。不过这是用dlopen和dlsym直接对so库操作找到的,假设为A。但是在got表中找不到一个地址和A是相等的。
2015-1-22 14:45
0
雪    币: 201
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
你怎么找的?
dlopen得到soinfo,在symtab里面找
2015-1-22 15:46
0
雪    币: 3094
活跃值: (319)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
11
我是直接dlsym(dopen(so_path,RTLD_LAZY),function_name) 得到函数的地址的
2015-1-22 15:52
0
雪    币: 228
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
got表里存放的是外部符号的地址,不是所有符号的地址都能在got表找到。
2015-1-22 17:33
0
雪    币: 3094
活跃值: (319)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
13
原来这样子的啊....那我自己用jni写的so就不算是外部符号,所以就找不到。这样理解没错吧?
2015-1-22 19:43
0
雪    币: 228
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
差不多的
2015-1-22 19:58
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
这么奇怪啊,现在问题解决了吗,我也碰到了
2016-4-18 11:43
0
游客
登录 | 注册 方可回帖
返回
//