模拟器修改内核绕过ptracepid检测

模拟器修改内核绕过ptracepid检测

我看了下很多检测反调试的应用都会调用这个功能个,修改个内核做个系统还是很重要的。不够我自己嫌修改真机的内核太麻烦,现在模拟器上练个手,虽然网上没有如何修改具体的教程,不过真机修改内核还是有很多。我这里自己类推下:

模拟器文件结构分析

模拟器修改内核绕过ptracepid检测_第1张图片
我们先要找到内核文件的位置,如果是真机的话,需要找到boot.img。模拟器要简单很多,如上图,内核文件就是kernel-qemu文件。其他文件解释看这里:
http://blog.sina.com.cn/s/blog_a3f364920102x49z.html
我们直接把kernel-qemu文件复制出来备份一下,
之后010eidt编辑打开搜索的1F 8B 08 00处的位置,删除字符串之前的所有数据保存文kernel-new文件。
gzip -d 文件一下( gunzip.exe z.gz )

接下来我们就可以用ida打开了。

IDA静态分析

处理器类型为ARM Little-endian,
ROM start address和Loading address填0xc0008000
其实这里我一之怀疑为什么要填0xc0008000
我还自己把内核符号导出来观察了一下,想把开始的函数和这个地址对应一下
但改了几次发现,解析的函数怪怪的。感觉有点不对。

我在网上看了一下网上真机的地址都是填0xc0008000
按shift+f12,搜索TracerPid,找到以下项
搜索引用还是有的,说明应该就是这个文件。
先不管了
adb shell
echo 0 > /proc/sys/kernel/kptr_restrict
关闭符号屏蔽
再输入以下命令查看这两函数的地址
cat /proc/kallsyms | grep prco_pid_status
cat /proc/kallsyms | grep __task_pid_nr_ns
找下这两个函数地址。
在ida对应的地址里面找下。
修改方法是把MOVEQ R10, R0替换为MOV R10, #0,机器码为00 A0 A0 E3,指令的文件偏移为(C02BA568-C0008000=2B2568),及把BL sub_C01B083C替换为MOV R0, #0,机器码为00 00 A0 E3,指令的文件偏移为(C01B083C-C0008000=1A883C)。
之后把数据还原成原来的样子,还有些没分析完,之后在弄。

备注

使用010editor 将 z.gz 的二进制数据覆盖到原zImage 文件的1F 8B 08 00处的位置(新的z.gz文件必须比原 z.gz 文件小,并且回写回去时不能改变原zImage文件的大小及修改原 zImage 文件后面的内容,否则会很麻烦),这时得到了zImage文件。
执行命令abootimg –create boot.img -f bootimg.cfg -k zImage -r initrd.img得到boot.img文件。
手机重启进入刷机模式,然后,执行命令fastboot flash boot boot.img

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 和boot.img文件放到同一目录

执行bootimg –unpack-bootimg 该命令会解包出内核:kernel和ramdisk.gz.
kernel就是内核文件 和zImage相同

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

生成文件z就是祼二进制文件zImage。

你可能感兴趣的:(android脱壳)