首页
论坛
课程
招聘
逆向修改手机内核,绕过反调试
2016-1-30 19:02 50594

逆向修改手机内核,绕过反调试

2016-1-30 19:02
50594
逆向修改手机内核,绕过反调试

Android应用反调试里最常用的一种反调试方法是查看/proc/self/status的信息,如果TracerPid不为0,就判断为正在被调试。如果自己拥有内核源码,就可以自己编译生成zImage去替换内核就能正常运行了,但可惜的是,很多手机的内核都不开源,为此只能自己去逆向修改。


一、  提取zImage内核文件
在提取zImage前,必须确保自己拥有root权限。
输入命令:
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
使用abootimg工具,该工具见附件解开boot.img

将zImage文件复制为文件名为z.gz的文件,并使用010editor查找十六进制1f 8b 08 00,找到后把前面的数据全删掉,使kernel.gz文件变成标准的gzip压缩文件,这样子就可以使用gunzip解压了。
命令:gunzip 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 E3,指令的文件偏移为(C02BA568-C0008000=2B2568),及把BL sub_C01B083C替换为MOV R0, #0,机器码为00 00 A0 E3,指令的文件偏移为(C01B083C-C0008000=1A883C)。
至少,内核文件修改成功。
三、  刷回手机
刷回前需要先打包boot.img文件
使用命令压缩成z.gz:gzip -n -f -9 z
使用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。
完成刷机后,重新开机,就大功告成了。
四、  还原砖头
刷内核,不免会有刷成砖头的情况。
使用步骤1中提取到的原版boot.img,在刷机模式下,执行fastboot flash boot boot.img就还原系统了。

喜欢交流的加个群282215163

[注意] 招人!base上海,课程运营、市场多个坑位等你投递!

上传的附件:
收藏
点赞2
打赏
分享
最新回复 (95)
雪    币: 24
活跃值: 活跃值 (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
harborian 活跃值 2016-1-30 19:48
2
0
分析的非常清楚,顶
雪    币: 40
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mumuhacker 活跃值 2016-1-30 20:02
3
0
mark
雪    币: 6
活跃值: 活跃值 (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
妖友 活跃值 2016-1-30 22:19
4
0
mark
雪    币: 19
活跃值: 活跃值 (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
golyke 活跃值 2016-1-30 23:40
5
0
mark
雪    币: 298
活跃值: 活跃值 (56)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
七少月 活跃值 2016-1-31 01:13
6
0
哥们,顶一个
雪    币: 3
活跃值: 活跃值 (562)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lookzo 活跃值 2016-1-31 11:33
7
0
感谢分享
雪    币: 280
活跃值: 活跃值 (161)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vVv一 活跃值 2016-1-31 12:27
8
0
感谢分享~
雪    币: 43
活跃值: 活跃值 (203)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
AJISky 活跃值 7 2016-1-31 20:57
9
0
顶顶顶顶
雪    币: 421
活跃值: 活跃值 (592)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wormfox 活跃值 2016-2-1 01:02
10
0
mark!
雪    币: 1837
活跃值: 活跃值 (136)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
dats 活跃值 2016-2-1 09:39
11
0
mark....
雪    币: 211
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binlanone 活跃值 2016-2-1 10:51
12
0
虽然看不懂,但是好厉害的样子
雪    币: 216
活跃值: 活跃值 (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SANCDAYE 活跃值 2016-2-1 11:08
13
0
N年前就搞了
雪    币: 101
活跃值: 活跃值 (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
lcweik 活跃值 1 2016-2-1 11:35
14
0
大神见笑了
雪    币: 18
活跃值: 活跃值 (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
deadxing 活跃值 2016-2-1 11:49
15
0
太6了,mark
雪    币: 213
活跃值: 活跃值 (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jasonzhou 活跃值 2016-2-1 11:56
16
0
N<=0
雪    币: 94
活跃值: 活跃值 (279)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wangzehua 活跃值 2016-2-1 12:13
17
0
不错~感谢分享
雪    币: 23
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
了log 活跃值 2016-2-1 14:48
18
0
开源的何必这么累
雪    币: 412
活跃值: 活跃值 (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pwelyn 活跃值 2016-2-1 14:57
19
0
mark
雪    币: 101
活跃值: 活跃值 (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
lcweik 活跃值 1 2016-2-1 23:18
20
0
也来顶我贴子了
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lonshek 活跃值 2016-2-2 15:22
21
0
mark
雪    币: 393
活跃值: 活跃值 (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wogao 活跃值 2016-2-2 16:52
22
0
思路好,江大大V5
雪    币: 63
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gzxlwxp 活跃值 2016-2-3 10:01
23
0
请问楼主 “使用010editor将z.gz的二进制数据覆盖到原zImage文件的1F 8B 08 00处的位置(新的z.gz文件必须比原z.gz文件小,并且回写回去时不能改变原zImage文件的大小及修改原zImage文件后面的内容,否则会很麻烦)”这句话怎么理解啊? 新的z.gz比原来的小的话,那么新的zImage就会比原来的小啊,如何在不修改zImage文件后面内容的情况下使新zImage与原zImage一样大?
雪    币: 101
活跃值: 活跃值 (67)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
lcweik 活跃值 1 2016-2-3 16:06
24
0
原本的zImage假如是9M大小,而你的z.gz是7m大小,1f 8f在文件前1m位置,那么你的z.gz就只能覆盖在1M-8M的位置上,前1M和后1m不能变。
雪    币: 216
活跃值: 活跃值 (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SANCDAYE 活跃值 2016-2-3 17:11
25
0
井底之蛙
游客
登录 | 注册 方可回帖
返回