能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我猜你是要搞root
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
额古河大哥那个通过root权限inject的方法我现在能跑,但是老板说不要通过root权限。有没有办法只改本进程的GOT表而不root的方法啊? 吧古河大哥那段代码嵌入到apk里面也是不行的。
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
自己顶,解决了。在Application创建前run下hook的代码就能把函数hook到自己的函数了。
|
能力值:
(RANK:1290 )
|
-
-
5 楼
直接修改符号的st_value,指向你的代理函数就好。
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
玩命大侠放点代码出来吧 方便下我们这些懒人
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
符号指向何处呢? 另一个动态库? 那怎么添加DT_NEEDED项。 请指教~~~~~~~
|
能力值:
(RANK:1290 )
|
-
-
8 楼
楼主问的是如何hook本地的。 首先你写个壳附加上去, 然后写好桩函数,记录到这个桩的va,然后遍历目标程序的符号表,获取st_value值,将桩的va替换上去。写得好点就引出一个全局变量把原先st_value记录到上面,作为返回。 这套就搞定了。
你也可以指向另外一个动态库,这个实现比较复杂。代码写的多些。 如果单只添加一个DT_NEEDED也不是很难。 你把原先的PT_DYNAMIC复制出来。然后添加一项DT_NEEDED项。 在把原先的字符串表复制出来,添加一个你要加载的so名称,核算一下字符串的索引,把这个索引给到新的DT_NEEDED就好了。 这个字符串和符号表与哈希表都没啥关系。所以可以任意添加。
|
能力值:
(RANK:1290 )
|
-
-
9 楼
楼主要是仅hook自己,连壳都不用写,直接在自己的代码中写好就行...
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
感谢斑竹大人回复
我现在也在做这一块,我的做法是修改被hook的函数的符号名称,然后添加一个NEEDED项把自己的so添加到目标文件依赖项上。
这样做有个难点我找了个相对取巧的方法,我把DT_RELENT项给换成DT_NEEDED了,从android的linker源码看,这一项必须有但是linker不处理。
伪造段我想过,也试过,主要是段的问题;段是连续的,比如字符串section所在的段有好几个段,我想伪造一个字符串section(符号名称、库名称都在这里),就得伪造整个段(字符串section所在),而且偏移、vaddr都会变化(因为字符串section变长了),非常麻烦,斑竹大人能否指点一下看是否有更好的方法。
加壳这块我不太明白,斑竹大人是否能够指点一下。
最后祝工作顺心。
|
能力值:
(RANK:1290 )
|
-
-
11 楼
直接替换DT_RELENT确实没什么问题。但是只能添加一项,至于你说的第二点我没看懂你说的? 这也不算什么伪造段, PT_DYNAMIC本来就包含在第二个段里。 你新添加的PT_DYNAMIC可以追加到后面更新一下段表的长度就好了。或者直接内存粒度展开直接拍成一个段,你随意添加东西,然后更新段大小就成了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
我的意思是这样,PT_LOAD类型的段里面包含若干节(section),如下:
Section to Segment mapping:
Segment Sections...
00
01 .interp
02 .interp .note.ABI-tag .note.gnu.build-id .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rel.dyn .rel.plt .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame
处于同一segment中的section,他们都是连续的,如下:
[ 4] .gnu.hash GNU_HASH 080481ac 0001ac 000020 04 A 5 0 4
[ 5] .dynsym DYNSYM 080481cc 0001cc 000050 10 A 6 1 4
[ 6] .dynstr STRTAB 0804821c 00021c 00004c 00 A 0 0 1
[ 7] .gnu.version VERSYM 08048268 000268 00000a 02 A 5 0 2
[ 8] .gnu.version_r VERNEED 08048274 000274 000020 00 A 6 1 4
[ 9] .rel.dyn REL 08048294 000294 000008 08 A 5 0 4
[10] .rel.plt REL 0804829c 00029c 000018 08 A 5 12 4
[11] .init PROGBITS 080482b4 0002b4 00002e 00 AX 0 0 4
[12] .plt PROGBITS 080482f0 0002f0 000040 04 AX 0 0 16
如果我将dynstr section中添加一个字符串,那这个section肯定变大了,将会影响到后续section的偏移以及他们的vaddr,修改起来很麻烦。
若我再做一个section(比如是dynstr)放在文件结尾,则与原有的处于同一个segment的section不再连续,貌似载入会出现问题。
关于这个问题我没有找到很舒服的解决办法,请斑竹指教。
|
能力值:
(RANK:1290 )
|
-
-
13 楼
section是文件形式的才有效果的。 在内存中就是段。 你修复section表干嘛。不用管它,直接全部删掉。 在之前记录到它的位置就好。 连续不连续没关系,修复了PT_DYNAMIC里的对应项目就好。总给加起来不到100行代码就搞定 你说的东西了。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
我试试看
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
这个不用root的吧 直接Hook自身进程 直接HOOK就可以了吧
|
|
|