修改系统内核绕过反调试tracerpid为0

Mark_YPQ Mark_YPQ     2022-12-09     710

关键词:

原文 http://bbs.pediy.com/showthread.php?t=207538

感谢作者整理,亲测可用 坐着用的mac 现在改成windows下操作

设备nexus5 系统android 4.4

如果 设备与上不符 按照以下方法获取boot.img

一、  提取ker内核文件
在提取zImage前,必须确保自己拥有root权限。adb root 获取root权限
输入命令:

adb shell
ls -l /dev/block/platform/msm_sdcc.1(具体设备具体定)/by-name,
找到boot这一项,记下路径

 

将boot导出为boot.img
dd if=/dev/block/mmcblk0p19 of=/data/local/boot.img
adb pull /data/local/boot.img boot.img

如果设备和系统的和给出符话直接 使用源码的boot.img更好

 

二.使用 bootimg.exe工具,解开boot.img

 

Bootimg boot.img文件放到同一目录


执行bootimg --unpack-bootimg  该命令会解包出内核:kernelramdisk.gz.

kernel就是内合文件 和zImage相同

 

kernel文件复制为文件名为z.gz的文件,并使用010editor查找十六进制1f 8b 08 00,找到后把前面的数据全删掉,使z.gz文件变成标准的gzip压缩文件,这样子就可以使用gunzip解压了。
命令:gunzip.exe z.gz 

 

生成文件z就是祼二进制文件zImage。
二、  提位、修改关键代码
zImage文件可以直接使用IDA去打开,但需要设置参数。

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



在ROM start address和Loading address填0xc0008000,点【ok】,IDA显示效果如下图所示,没有函数名,不方便定位代码。

先回到root下的adb shell,输入命令:
echo 0 > /proc/sys/kernel/kptr_restrict
关闭符号屏蔽
再输入以下命令查看这两函数的地址

回到IDA,按g跳转到c01b083c(__task_pid_nr_ns)地址处,在光标放在在该函数处:

然后按x,弹出引用搜索框

在搜索框里,找到sub_c02b9ff8(proc_pid_status)地址对应的函数,双击它,如果IDA没有分析出该函数,就进行以下操作:
按shift+f12,搜索TracerPid,找到以下项

双击它,看到

再双击【DATA XREF: sub_c02b9ff8+190】,IDA就能分析出sub_c02b9ff8函数了,然后重新搜索sub_c01b083c的引用。找到后,双击它,得以下图:

经本人分析得到的修改方法是把MOVEQ R10, R0替换为MOV R10, #0,机器码 00 A0 A0 01 替换为 00 A0 A0 E3  

指令的文件偏移为(C02BA568-C0008000=2B2568) (使用010editor修改)

及把BL sub_C01B083C替换为MOV R0, #0,机器码 AF DB FB EB 为00 00 A0 E3,

指令的文件偏移为(C02BA578-C0008000=2B2578)|(原文中错误的地方)

三、  刷回手机
刷回前需要先打包boot.img文件
使用命令压缩成z.gz:gzip -n -f -9 z

三、使用010editor将z.gz的二进制数据覆盖到原kernel文件的1F 8B 08 00处的位置(新的z.gz文件必须比原z.gz文件小,并且回写回去时不能改变原kernel文件的大小及修改原kernel文件后面的内容,否则会很麻烦),这时得到了kernel文件。

注:这个地方可以新建一个用010editor 新建hex文件  把 原kernel文件1F 8B 08 00处一起的数据复制到 新文件里 然后把 z.gz的数据添加复制到 新文件里 ,这时候 比对 原kernel和新文件

把原kernel文件中 多的数据 一个字节不少的赋值到新的文件中,这样就组成新的 kernel 文件 新文件和原kernel一样大。把原kernel文件删除 把新文件重命名为kernel

执行命令bootimg --repack-bootimg base cmdline page_size padding_size

其中上述命令中的黑体部分为包命令的输出值。得到boot.img文件。
手机重启进入刷机模式,然后,执行命令fastboot flash boot boot.img。
完成刷机后,重新开机,就大功告成了。


四、  还原砖头
刷内核,不免会有刷成砖头的情况。
使用步骤1中提取到的原版boot.img,解包后会被命名为 bootold.img 在刷机模式下,执行fastboot flash boot bootold.img就还原系统了。


所以工具下载地址 http://pan.baidu.com/s/1bo8RUmN


frida反调试

...2.11.18windows10使用frida-U注入app结果如下这里有两个com.shark.tracerpidapp名称的进程我们直接进入adb查看进程可以看到确实有两个进程,frida分不清你要注入哪个进程所以报出如上错误。我们选择父进程进行注入叫我们用root去执行,这... 查看详情

源码编译绕过反调试

参考师弟的贴子修改的,基本我一次就弄好了,没有遇到啥问题,下面我主要是补充下他的帖子http://bbs.pediy.com/showthread.php?t=213481一.环境搭建(1).环境介绍:手机:nexus5ubuntu版本:15.10android版本:4.4.4android源码官网(这里有很多相关的... 查看详情

android签名验证与反调试机制的对抗技术(代码片段)

...言签名验证1.1签名机制1.2签名验签1.3签名绕过反反调试2.1tracerPid检测2.2进程名称检测2.3关键文件检测2.4调试端口检测2.5ptrace值检测2.6时间差异检测2.7内置函数检测2.8调试断点检测总结前言Android的APK文件为了防止被篡改和重打包&#... 查看详情

android签名验证与反调试机制的对抗技术(代码片段)

...言签名验证1.1签名机制1.2签名验签1.3签名绕过反反调试2.1tracerPid检测2.2进程名称检测2.3关键文件检测2.4调试端口检测2.5ptrace值检测2.6时间差异检测2.7内置函数检测2.8调试断点检测总结前言Android的APK文件为了防止被篡改和重打包&#... 查看详情

学习:反调试之检测类名与标题名(代码片段)

...成功的话那么直接ExitProcess反调试之检测类名与标题名的绕过:FindWindow接收两个参数,上面我们可以看到传入的参数为类名,标题名不进行判断直接在判断比较的时候将ZF标志位置1不进行跳转就可以成功绕过了 查看详情

逆向手机内核,添加调试支持和反调试

...然后重打包,这样非常麻烦,而且效率低。第二个条件是内核配置文 查看详情

过反调试

...二者本为一体破解技术就不要我多介绍了,下面我来介绍反调试技术也就是所谓的防破解技术反调试技术可以简单通俗的理解为:防止OD分析软件的技术,也就是反调试技术那么反调试技术又有几种呢?下面我介绍几种常用反调... 查看详情

ios逆向笔记之反调试以及反反调试和反反反调试ptrace篇

...就提供了一种对运行进程进行跟踪和控制的手段,那就是系统调用ptrace.通过ptrace可以实现对另一个进程实现调试和跟踪.同时,ptrace提供了一个非常有用的参数,那就是PT_DENY_ATTACH,这个参数用于告诉系统阻止调试器依附我们创建一个m... 查看详情

windows下反(反)调试技术汇总(代码片段)

...意识到自己被调试时,它们可能改变正常的执行路径或者修改自身程序让自己崩溃,从而增加调试时间和复杂度。很多种反调试技术可以达到反调试效果。这里介绍当前常用的几种反调试技术,同时也会介绍一些逃避反调试的技... 查看详情

elf反调试初探

...m/sectool/83509.html ELF(ExecutableandLinkableFormat)是Unix及类Unix系统下可执行文件、共享库等二进制文件标准格式。为了提高动态分析的难度,我们往往需要对ELF文件增加反调试措施。本文便对相关技术进行了总结归纳。1.背景知识1.1E... 查看详情

so中函数断点的的反调试检测(代码片段)

...算内存中一段指令的hash值进行校验,检测函数是否被修改或被下断点。实现原理当我们程序中的函数被下软件断点,则断点地址会被改写为bkpt指令,可以在函数体中搜索bkpt指令来检测 查看详情

java层反调试

...nfest.xml文件中,在application标签下,Android:debuggable=true。2.系统默认调式,在build.prop(boot.img),ro.debugable=1。一:实例演示java层反调试以“百度加固”为例。1.将样本拖入jdax-gui中,进行反编译,来到加固程序的onCreate里,如下图所示... 查看详情

破解“贪吃蛇大作战”的签名信息服务端验证机制

...时版,最好成绩也就3000多。我分析的版本是v2.0.1:经过修改,玩了一把5分钟限时赛:长度69224,击杀1456。将原包重新签名,安装到手机上,一直提示网络无法连接,原包没有问题。这里很明显是将签名信息上传到了服务器端,... 查看详情

反调试手法之createprocess反调试(代码片段)

              反调试手法之CreateProcess反调试在学习Win32创建进程的时候.我们发现了有一个进程信息结构体.STARTUPINFO.这个结构体可以实现反调试.具体CreateProcess可以参考上一篇博客.:  https://www.cnblogs.com/iBi... 查看详情

通过inotify实现反调试

1.inotifylinux下inotify可以实现监控文件系统事件(打开,读写删除等),inotify最常见的api有以下几个:inotify_init:用于创建一个inotify实例的系统调用,并返回一个指向该实例的文件描述符。inotify_add_watch:增加对文件或者目录的... 查看详情

javascript加密代码反调试

...调试,本文分享一种反调试技术。功能效果使函数名不可修改,修改则代码无法运行技术原理将JS代码用可逆算法进行加密。公开或发布的代码时,只提供这部分“密文”。运行代码中包含解密函数,但密钥是隐式传递,难被发... 查看详情

javascript加密代码反调试

...调试,本文分享一种反调试技术。功能效果使函数名不可修改,修改则代码无法运行技术原理将JS代码用可逆算法进行加密。公开或发布的代码时,只提供这部分“密文”。运行代码中包含解密函数,但密钥是隐式传递,难被发... 查看详情

反调试-checkremotedebuggerpresent

和IsDebuggerPresent差不多简单的反调试技术 查看详情