首页
社区
课程
招聘
[求助] 遇到 ida调式app子进程android service下的so库进程被系统关闭。大佬们求解
2022-3-6 16:06 6679

[求助] 遇到 ida调式app子进程android service下的so库进程被系统关闭。大佬们求解

2022-3-6 16:06
6679

APP现状

app启动时,启动了个android service子进程。他们之间用android自带的ipc进行通信。

  • 大概是这样子的:
    图片描述

目前hook防止退出的有:

图片描述
图片描述

问题

操作流程:
1、app
2、下hook
3、ida附加进程(附加后一直正常运行)
4、下断点
5、app去触发(这里就出问题了)

 

出问题后,对logcat报出来的日志进行各种hook防止退出后,最后出现如下错误。
图片描述
看到进程pid为 5725,对进程进行查看。最终看到是个 system_server。
图片描述
于是去阅读了几篇关于system_server的文章,懵懵懂懂(理解能力有问题)好像是system_server会有进程守护之类的机制,底层自动把service杀死了。

废话部分

我尝试了用frida去hook函数,通过hook参数+静态分析的方式,但是难度太大了,有些函数分析着分析着就跟理解的不一样。另外也尝试着用过unidbg去主动调用so库,一点一点分析下去,但是so老的报各种错误,去还原他代码难度巨大,其实也很复杂,嵌套的东西太多了(app的协议写在so里面的)。看了看雪知识库里的各种方法,各种失败(主要是菜。。。) 。导致我必须对动态调式下手。

最终目的!!!

能调式这个android service里的so库

 

研究了很多天,各种方法,各种尝试。走投无路,只能求助看雪各位大佬了。遇到这种情况怎么办呢? 求解!!!!提前谢谢你们!


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2022-3-6 16:27 被好名字_654931编辑 ,原因: 改下标题
收藏
点赞0
打赏
分享
最新回复 (24)
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 19:09
2
0
 没大佬遇到过吗? 求解!!!!
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-6 20:25
3
0
进程挂了而已,signal4,执行了cpu无法识别的汇编指令
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 21:19
4
0
请教一下。这种情况要这么排查呢?或者有什么解决方法? 
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 21:20
5
0
不吃早饭 进程挂了而已,signal4,执行了cpu无法识别的汇编指令
请教一下。这种情况要这么排查呢?或者有什么解决方法? 
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 22:21
6
0
有偿求跪。能解决的加qq:1170941265
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-6 22:39
7
0
好名字_654931 请教一下[em_67]。这种情况要这么排查呢?或者有什么解决方法?

ida之类的调试器附加上去,收到signal 4信号时看一下是哪条指令造成的,还有调用堆栈之类的

最后于 2022-3-6 22:39 被不吃早饭编辑 ,原因:
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-6 22:42
8
0
好名字_654931 请教一下[em_67]。这种情况要这么排查呢?或者有什么解决方法?
或者注册一下signal 4的信号处理函数,在里面输出一下pc寄存器,lr寄存器之类的,更深一步可以通过信号处理函数里传入的ucontext回溯一下调用堆栈,可以用libart.so里的DumpNativeStack这个导出函数
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-6 22:43
9
0
这种情况正常情况下系统应该就会输出堆栈回溯的,这里看上去并没有输出,可能是signal 4的信号处理函数被替换了之类的
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 22:44
10
0
不吃早饭 好名字_654931 请教一下[em_67]。这种情况要这么排查呢?或者有什么解决方法? ida之类的调试器附加上去,收到signal& ...
能加个好友嘛。有偿请教
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 22:53
11
0
不吃早饭 或者注册一下signal 4的信号处理函数,在里面输出一下pc寄存器,lr寄存器之类的,更深一步可以通过信号处理函数里传入的ucontext回溯一下调用堆栈,可以用libart.so里的DumpNat ...
好的。我研究一下。谢谢!
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-6 23:15
12
0
不吃早饭 好名字_654931 请教一下[em_67]。这种情况要这么排查呢?或者有什么解决方法? ida之类的调试器附加上去,收到signal& ...

ida没有过多的打印。只看到 Debugger: process has exited (exit code 4)

雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-6 23:59
13
0
好名字_654931 ida没有过多的打印。只看到 Debugger: process has exited (exit code 4)
没有断下来么
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-7 00:01
14
0
好名字_654931 ida没有过多的打印。只看到 Debugger: process has exited (exit code 4)
ida什么版本,会不会是ida版本较低导致的
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 01:51
15
0
不吃早饭 ida什么版本,会不会是ida版本较低导致的
用的是7.5.201028版本。不算低吧
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 01:52
16
0
不吃早饭 没有断下来么
没断下来,子进程直接被结束掉了
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 02:05
17
0
好名字_654931 没断下来,子进程直接被结束掉了
但是可以肯定是的。肯定是断点相关的东西,导致退出的。 因为是没下断点,程序可以正常运行
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-7 10:45
18
0
好名字_654931 但是可以肯定是的。肯定是断点相关的东西,导致退出的。 因为是没下断点,程序可以正常运行
看一下你的ida的异常信号设置,可能你把signal 4设置为了不拦截
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 14:27
19
0
不吃早饭 看一下你的ida的异常信号设置,可能你把signal 4设置为了不拦截

您好,我找了一下,好像没看到设置信号的地方? 我目前的调试设置如下:

然后终端那边显示:

这个不是很懂。于是去看了一些类似这种报错的的文章:

好像跟系统架构方面的有关? 

雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 14:29
20
0
不吃早饭 或者注册一下signal 4的信号处理函数,在里面输出一下pc寄存器,lr寄存器之类的,更深一步可以通过信号处理函数里传入的ucontext回溯一下调用堆栈,可以用libart.so里的DumpNat ...
这个看了很多文章,还是没看懂不知道具体得怎么操作。能否麻烦一下分享个类似的学术文章?
雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-7 15:56
21
0
好名字_654931 这个看了很多文章,还是没看懂不知道具体得怎么操作。能否麻烦一下分享个类似的学术文章?

你把样本发出来,我看看怎么回事

雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 17:10
22
0
不吃早饭 你把样本发出来,我看看怎么回事

您好。我这里并没有看到signal4 是需要我手动添加嘛?


另外样本,我去找了一下那个文件,那个文件是在哪里的,怎么找也找不到。


按照根目录:

system目录下:

还有find命令,貌似文件是没被创建出来。于是想去改他的参数,看看能不能把文件改到其他目录:


但是好像。他并没办法改输出的.debug文件目录。就很奇怪。。。。

雪    币: 29
活跃值: (5115)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不吃早饭 2022-3-7 17:48
23
0
好名字_654931 您好。我这里并没有看到signal4 是需要我手动添加嘛?另外样本,我去找了一下那个文件,那个文件是在哪里的,怎么找也找不到。按照根目录:system目录下:还有find命令,貌似文件是没被创建出来。 ...

你把app发出来,复现步骤讲清楚

最后于 2022-3-7 17:49 被不吃早饭编辑 ,原因:
雪    币: 148
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
好名字_654931 2022-3-7 23:32
24
0
不吃早饭 好名字_654931 您好。我这里并没有看到signal4 是需要我手动添加嘛?另外样本,我去找了一下那个文件,那个文件是在哪里的,怎么找也找不到 ...


app链接: https://cloud.189.cn/web/share?code=MZNZVjj6n6bm(访问码:4cnh)

hook脚本:https://cloud.189.cn/web/share?code=imYnYvIZR7Nr(访问码:6kxj)

日志文件:https://cloud.189.cn/web/share?code=aqA3Mz2iAZFb(访问码:oh7x)



工具:

红米9A(root+面具)、frida、jadx、ida7.5


复现:


1、正常运行app(点击 我先看看):

2、点击导航中间之后。点击搜索


3、点击歌手查找(需要每次都对app进行清理数据后重新打开才会显示

4、最终进入如下页面。

5、在上面(第4步)的步骤中,最终触发一个函数:nativeSendBizData。 可以来回切上面(第4步)步骤里头部的选择器,进行多次触发nativeSendBizData进行测试。

6、adb连接转发端口、开启logcat日志、frida环境、ida环境等服务启动。运行hook_hIM.py (阻止主进程对子进程的生命进程保护)脚本。结果如下:


7、进入ida:

8、附加 com.tencent.karaoke:service 进程

9、找到函数位置。 搜索库:wns、 搜索方法:biz


10、此时可以任意操作(步骤4)页面上的导航,任意触发nativeSendBizData函数。APP正常、ida正常。


11、下断点开始测试。

12、操作(步骤4)页面上的导航,进行再次触发nativeSendBizData函数。此时hook脚本正常阻拦java层,但是ida退出调试模式。


13、最终。

雪    币: 817
活跃值: (1481)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
margina1 2022-7-8 17:23
25
0
师傅问题解决了吗
游客
登录 | 注册 方可回帖
返回