山东001在线

 找回密码
 立即注册
搜索
查看: 281|回复: 0

[美女] 聊聊Android 内存执行ELF研究2023/3/27 20:13:15

[复制链接]
  • TA的每日心情
    开心
    2023-10-11 21:31
  • 签到天数: 104 天

    [LV.6]常住居民II

    发表于 2023-3-27 20:13:13 | 显示全部楼层 |阅读模式

    A内存执行ELF研究无痕注入的最新消息可以到我们平台网站了解一下,也可以咨询客服人员进行详细的解答!

    初遇
    在L系统中,我们可以通过_和现内存运行ELF,但是在A中,却遇到了这样的问题







    1




    CANNOTLINKEXECUTABLE
    ""
    :
    ""

    :



    64

    _

    ()





    通过了解到可以通过LD_DEBUG环境变量开启日志,执行





    LD_DEBUG=1





    并通过抓到了如下日志







    1


    2


    3


    4


    5


    6


    7


    8


    9




































































    32


    33




    W:[A(
    64
    -
    )]


    W:[L
    ""
    ]


    W:[L
    "[]"
    ]


    W:[R
    ""
    ]


    W:[U
    "****"
    ]


    W:[L
    ""
    ]


    W:[L
    "64"
    ]


    W:[L
    "64"
    ]


    W:[L
    "64"
    ]


    W:[L
    "64"
    ]


    W:[L
    "64++"
    ]


    W:[L
    "64_"
    ]


    W:[L
    "64"
    ]


    W:[L
    "64"
    ]


    W:[CFI
    00
    +
    7000
    ]


    W:[CFI
    778000
    +
    000

    -

    1
    ]


    W:[CFI
    77648000
    +
    0000
    ]


    W:[CFI
    77387000
    +
    7000
    ]


    W:[CFI
    77000
    +
    000
    ]


    W:[CFI
    770
    +
    000
    ]


    W:[CFI
    77600
    +
    0000

    +
    +
    ]


    W:[CFI
    773945000
    +
    000
    _:
    77394000
    ]


    W:[CFI
    773900
    +
    00
    ]


    W:[CFI
    77384000
    +
    000
    ]


    W:[CFI
    773900
    +
    00
    ]


    W:[CFI
    77384000
    +
    000
    ]


    W:[J_(
    0
    )]


    W:[A(
    64
    -
    )]


    W:[L
    ":-()"
    ]


    W:[L
    "[]"
    ]


    W:[R
    ""
    ]


    W:[L
    ":-()"
    ]


    F:CANNOTLINKEXECUTABLE
    ""
    :
    ""

    :



    64

    _

    (
    *
    *

    *
    *
    )





    看起来是命空间的问题,我们的的命空间为,但是为什么会这样呢,明明是。


    相知
    通过G搜索看到官方文档,在文件中配置了相关信息







    1


    2


    3


    4


    5


    6


    7


    8


    9



























    =












    =



    64






    =












    =












    =












    =












    =












    =











    []



    =
    __,__,__,__,__,__,__,___,__,__,__,,,,_



    =




    =




    =



    ${LIB}








    首先我们要知道这个文件可不可以写,查看信息发现该文件所在的不是只读文件系统,所以可以直接修改







    1


    2


    3




    #|




    ,,,,,,
    =
    5846680
    ,_
    =
    670
    ,
    =
    755
    0
    0




    ,,,,,,
    =
    5846680
    ,_
    =
    670
    ,
    =
    755
    0
    0






    以下使用编辑文件




    原来命空间是根据路径来的,于是编辑该文件,在比较前面手动加上一行







    1






    =

    :





    然后重新执行,问题依旧。



    难道是没有路径分割符的问题,于是在代码中给文件加上一个







    1




    _(“


    -
    ”,MFD_CLOEXEC);





    编译并重新执行,还是一样的报错。








    1






    =






    这次报错多了一行







    1




    WARNING::



    :
    1
    ::



    ()





    看样子是没办法通过单纯的改配置文件完成了,于是前往阅读的源码


    相识

    由于服务比较近不太稳定,我在看的时候刚好打不开,使用了官方的,然而这个玩意并不好用






    众所周知,的源码在目录下。





    通过字符串“U”定位到_的函数,在阅读代码后,我们上面的尝试为什么会失败,就已经有了答案。


    为什么设置:目录不行








    1


    2


    3


    4


    5


    6


    7


    8


    9





    ((_(),R_OK)!
    =
    0
    ){




    (
    =
    =
    ENOENT){








    -





    ;



    }





    I

    ,'





    SELU



    _
    =
    ;


    }





    因为它不是一个真存在的目录,在代码中通过函数判断改路径不存在,所以不行


    为什么设置根目录不行








    1


    2


    3


    4


    5


    6


    7


    8


    9













    ''



    (!()()
    =
    =
    ''
    ){



    _();


    }






    (()){



    DL_WARN(
    "%:%::()"
    ,



    ___,



    ());




    ;


    }





    因为代码中删除了末尾所有的符号,传入根目录之后字符串变成了空字符串,于是抛出了那个W


    相杀
    修改非两个思路:



    静态替换
    动态

    虽然有,替换分区下文件变得方便了起来,但是替换依然是一件麻烦事,动态H对于解决这个问题来说,我觉得更加方便。由于目标代码位置的特殊性,现有,轮子都不能取得比更早的执行时机。



    也许是我孤陋寡闻,如果有请务必告诉我






    比较终我选择的方案是先生成一个子进程,对子进程进行,修改逻辑后再掉。





    对于逻辑的修改,主要有两步:



    给添加"=:\”
    让这个目录返回0

    首步
    直接编辑该文件添加上述行即可


    第二步





    1


    2


    3


    4


    5


    6


    7


    8


    9




































































    32


    33


    34


    35


    36


    37


    38


    39


    40


    41


    42


    43


    44


    45


    46


    47


    48


    49





    _(::,
    *
    *
    ,
    *
    *
    ){





    创建内存文件,设置这个参数会在

    后自动关闭这个文件





    =
    _(
    "-"
    ,MFD_CLOEXEC);



    (,(

    )());


    设置文件长度




    *

    =
    (,(),PROT_WRITE,MAP_SHARED,,
    0
    );



    (,(),());



    (,());





    此时已经将ELF内容写入到内存文件里面





    =
    ();




    (
    0
    ){



    (
    "_\"
    );


    失败




    ;



    }


    (
    =
    =
    0
    ){





    这里是子进程,使用PTRACE_TRACEME主动建立连接



    (PTRACE_TRACEME);



    (,,);



    }





    这里是父进程




    ;



    __{};



    {};



    _
    =
    ;



    _
    =
    (__);




    (){



    ();


    等待子进程暂停




    (WIFEXITED()){




    ;


    子进程退出



    }





    读取通用寄存器,系统调用号



    (PTRACE_GETREGSET,,NT_PRSTATUS,);




    ([
    8
    ]
    =
    =
    __NR_){


    函数使用的系统调用号



    []
    =
    ":"
    ;




    ;





    注意,PTRACE_PEEKDATA固定一次读取(

    )字节长度的内容




    =
    (PTRACE_PEEKDATA,,[
    1
    ],NULL);




    ((,(
    *
    ))
    =
    =
    0
    ){


    判断是否是我们添加的目录



    (PTRACE_SINGLESTEP,,NULL,NULL);


    单步执行,让系统调用执行完



    ();


    等待系统调用执行完



    (PTRACE_GETREGSET,,NT_PRSTATUS,);


    读取寄存器



    [
    0
    ]
    =
    0
    ;


    修改返回值为寄存器



    (PTRACE_SETREGSET,,NT_PRSTATUS,);


    修改寄存器



    (PTRACE_DETACH,,NULL,NULL);


    进程




    ;



    }



    }



    (PTRACE_SYSCALL,,NULL,NULL);


    执行到下一个系统调用时暂停



    }




    ;


    }
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|山东001在线 ( ICP11027147 )

    GMT+8, 2026-4-6 11:46 , Processed in 0.053361 second(s), 19 queries , Gzip On.

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表