美文网首页AOSP开发入门
修改android内核 的Tracerpid,避免一些壳的调试检

修改android内核 的Tracerpid,避免一些壳的调试检

作者: 一条咸鱼_9667 | 来源:发表于2021-11-22 11:06 被阅读0次

    一些必备工具:
    1、一台root的android手机
    2、下载"rom制作工具"超级好用
    3、导出bootimg的工具,我用了“搞机助手",可以一键导出boot.img
    4、linux下查看boot.img压缩方式的工具。
    5、010 editor

    步骤:
    首先用搞机助手导出boot.img。


    1637545301(1).png
    1637545359(1).png
    image.png

    导出后在桌面可以找到boot.img。
    提取到boot.img后,进行下一步
    将boot.img用复制到bootimg.exe的同一文件夹下


    image.png
    输入命令:.\bootimg.exe --unpack-bootimg
    生成如下:
    image.png
    提取这个kernel文件
    用linux(我用windows安装了子系统的方式)安装binwalk
    git clone https://github.com/devttys0/binwalk
    cd binwalk
    python setup.py install
    

    安装好后,因为我的linux是windows子系统,所以找了一下安装路径在,binwalk在:
    C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\su\binwalk
    下面。把kernel文件复制到该文件下面,执行 binwalk kernel


    image.png

    输入:binwalk -e kernel --run-as=root,开始解压缩


    image.png
    生成文件
    下面开始对文件内容进行修改
    将541C文件导入010 editor ,CTRL+F 查找Text:TracerPid:
    image.png

    我的红米A8 安装的是android10系统,发现与网上的大部分教程都不一致:


    image.png

    网上大部分的系统里面都是这种:

    "TracerPid:\t%d\n"
    

    翻看了红米A8的源代码,发现是这种形式的:
    tracerpid 没有%d这个借记符号

     seq_put_decimal_ull(m, "\nTracerPid:\t", tpid);
    

    所以我这个需要另辟蹊径了。
    用IDA打开文件


    image.png

    设置处理器类型为ARM Little-endian,点ok后,弹下图


    image.png
    在ROM start address和Loading address填0xc0008000,点ok,没有函数名,不方便定位代码。
    在ida中搜索(我已经导入了android的内核的函数文件所以可以识别出函数),在红米源代码中定位到调用函数在proc_pid_status函数中,所以直接找该函数去修改
    image.png

    我们只需要 把 BL _task_pid_nr_ns 替换为MOV R0, #0,机器码为00 00 A0 E3,指令的文件偏移为(C03559F0-C0008000 = 34d9f0)。
    打开010editor,找到该位置


    image.png
    修改为
    image.png

    修改好后,将541c文件在ubuntu下用命令重新压缩gzip格式
    gzip -n -f -9 541C
    发现用这个命令压缩的基本一致,红米这个内核压缩包有crc32校验,必须把压缩号的文件覆盖到原来的541C.gz里面去,


    image.png

    在原压缩包里搜索gz的尾部特征码: F7 DF 2F 9A B1 CC C8 90 95 01


    image.png

    把新的压缩包的所有内容覆盖到原压缩包到特征码的位置位置。
    这个就与原压缩包一模一样了。

    然后重新写入到kernel文件里面去,用python脚本:

    with open(r"./541c.gz","rb") as f:
        content = f.read()
    
    with open(r"./kernel","rb") as f:
        f.seek(0xA7D110)#地址查看前面截图,把压缩包后面剩余的原样添加进去的意思
        content += f.read()
        
    with open(r"./kernel_new","wb") as f:
        f.write(content)
    

    相关文章

      网友评论

        本文标题:修改android内核 的Tracerpid,避免一些壳的调试检

        本文链接:https://www.haomeiwen.com/subject/mfnvtrtx.html