首页
社区
课程
招聘
[原创]某车联网APPx梆反调试分析
发表于: 2023-6-19 17:43 30442

[原创]某车联网APPx梆反调试分析

2023-6-19 17:43
30442

Last edited by: FANGG3

论坛关于反反调试的帖子很多,但是总觉得少了些什么。周末整理了一下自己之前的笔记,这里从我自己的角度,一步一步的抽丝剥茧,懂得原理才能走的更远,愿自己不要再做脚本boy。文中如有暇疵遗漏,欢迎各位斧正。

ptrace占坑

原理:a进程同一时间只能被b进程ptrace调试,如果c进程对a进程ptrace调试,则会失败。

对于frida,它的进程注入依赖于ptrace,详细可以看这篇Frida Internal - Part 2: 核心组件 frida-core

运行App后,通过ps -A |grep byd 可以看到有两个进程:

pid分别为29976、30008。其中29976为主进程,其父进程为15576(zygote)。30008为子进程,父进程为29976。

继续查看/proc/29976/status,如下

尝试附加进程:

a. 得出结论,主进程被子进程Ptrace占坑调试,导致frida附加不上。
b. 附加子进程时,过段时间闪退,猜测存在frida检测。

如何实现ptrace占坑

首先,从ptrace函数出发,其主要用法如下:

enum __ptrace_request

PTRACE_TRACEME :表示本进程将被其父进程跟踪,此时剩下的pid、addr、data参数都没有实际意义可以全部为0

这个选项只能用在被调试的进程中,也是被调试的进程唯一能用的request选项,其他的都只能用父进程调试器使用

PTRACE_ATTACH:attach到一个指定的进程,使其成为当前进程跟踪的子进程,而子进程的行为等同于它进行了一次PTRACE_TRACEME操作,可想而知,gdb的attach命令使用这个参数选项实现的

由此可拓展出反调试思路:

PTRACE_TRACEME 父进程占坑

检测当前tracerPid

循环读取/proc/self/status中tracerPid的值

子线程附加父线程(也就是本App的反ptrace调试方法)

反ptrace占坑

假设,app的占坑逻辑在某个So的_init中,app加载该So时,已完成了占坑查找。使用frida attach注入app时,必然会失败。在这个前提下,我们有3种方法反占坑:

在尽可能早的时机完成注入操作,例如frida spawn 注入的时机是root启动app线程后,app的So加载前。

可以发现,方法3并没有更改So的逻辑。如果调试进程Tracer修改了被调试进程Tracee的内存等,方法1和方法2可能会导致App运行异常。

了解pthread_create函数

pthread_create,作用是创建一个线程,可以指定新线程的运行函数地址,以及传递参数。

从开发的角度看frida检测

在我的理解中,作为开发而言,大概率不会在主线程进行检测,否则有可能会使程序阻塞卡顿。所以,创建一个线程,进行检测会比较好。由于frida attach后,经过了几秒后App才被kill,可以推断出使用了定时器,循环检测frida。

接下来验证我的猜测:

直接启动目标app,通过ps -T -p $(主进程pid),查看进程中的线程,我们得到以下结果:

这样看起来似乎很复杂,我们知道linux中在没有指定线程名称时,线程的名称与进程的名称一致。

我们过滤一下包名,得到下面结果:

这样就可以区分出,哪些是App通过pthrea_create自己创建的线程了。

继续往下分析,通过WCHAN观察线程状态,其中hrtimer_nanosleep 尤其显眼,说明该线程正在调用msleep之类的函数,也就验证了我之前的假设。

绕过frida检测

方法1: patch pthread_create 函数

方法2: patch 所有调用pthread_create 函数的caller

例如:获取caller偏移地址为 0xa765c

000a7658为函数pthread_create调用,成功时返回值0放在寄存器X0中,000a765c中W0则是取寄存器X0的低32位。

frida实现如下:

验证结果:

frida可以正常spawn,不闪退。

查看线程状态,frida检测线程未创建,不影响执行流程。

虚拟框架加载So脱壳

So分析

checkCode算法分析

参考:

https://xz.aliyun.com/t/6882 Linux逆向之调试&反调试

https://www.cnblogs.com/jiaoxiake/p/6793906.html 浅谈Android反调试 之 PTRACE_TRACEME

http://blog.csdn.net/qq1084283172/article/details/53613481 解决Android加固多进程ptrace反调试的思路整理

https://blog.csdn.net/mijichui2153/article/details/82855925 pthread_create函数详解(向线程函数传递参数)

https://bbs.kanxue.com/thread-277034.htm [原创]绕过bilibili frida反调试

https://www.cnblogs.com/hellokitty2/p/16808118.html timerslack 与 sleep()/usleep()

 
u0_a222 29976 15576 6848868 360644 Sys_epoLl_wait 780e128208 S com. byd. aeri.caranywhere
u0_a222 30008 29976 6106376 256560 do_wait 780e129928 S com. byd. aeri. caranywhere
u0_a222 29976 15576 6848868 360644 Sys_epoLl_wait 780e128208 S com. byd. aeri.caranywhere
u0_a222 30008 29976 6106376 256560 do_wait 780e129928 S com. byd. aeri. caranywhere
Name:    eri.caranywhere
State:    S (sleeping)
Tgid:    29976
Pid:    29976        #本进程pid
PPid:    15576      #父进程pid
TracerPid:    30008  #调试进程pid
..........
 
Name:    eri.caranywhere
State:    S (sleeping)
Tgid:    30008
Pid:    30008
PPid:    29976
TracerPid:    0 #0没有被调试
Name:    eri.caranywhere
State:    S (sleeping)
Tgid:    29976
Pid:    29976        #本进程pid
PPid:    15576      #父进程pid
TracerPid:    30008  #调试进程pid
..........
 
Name:    eri.caranywhere
State:    S (sleeping)
Tgid:    30008
Pid:    30008
PPid:    29976
TracerPid:    0 #0没有被调试
❯ frida -U 29976
 
Failed to attach: unable to access process with pid 29976 due to system restrictions; try `sudo sysctl kernel.yama.ptrace_scope=0`, or run Frida as root
 
# 子进程
# 附加后过一会,app会闪退
❯ frida -U 30008
 
[Redmi Note 7::PID::30008 ]-> Process terminated
❯ frida -U 29976
 
Failed to attach: unable to access process with pid 29976 due to system restrictions; try `sudo sysctl kernel.yama.ptrace_scope=0`, or run Frida as root
 
# 子进程
# 附加后过一会,app会闪退
❯ frida -U 30008
 
[Redmi Note 7::PID::30008 ]-> Process terminated
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace有四个参数:
 1). enum __ptrace_request request:指示了ptrace要执行的命令。
 2). pid_t pid: 指示ptrace要跟踪的进程。
 3). void *addr: 指示要监控的内存地址。
 4). void *data: 存放读取出的或者要写入的数据。
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace有四个参数:
 1). enum __ptrace_request request:指示了ptrace要执行的命令。
 2). pid_t pid: 指示ptrace要跟踪的进程。
 3). void *addr: 指示要监控的内存地址。
 4). void *data: 存放读取出的或者要写入的数据。
void ptraceCheck()
{
        // 当前线程被非父线程调试,返回-1;否则返回0
        // 成功时,tracerPid为父进程的Pid
    int ck=ptrace(PTRACE_TRACEME, 0, 0, 0);
    if(ck == -1)
    {
        LOGA("进程正在被调试\n");
        return;
    }else
    {
        LOGB("ptrace的返回值为:%d\n",ck);
        return;
     }
}
void ptraceCheck()
{
        // 当前线程被非父线程调试,返回-1;否则返回0
        // 成功时,tracerPid为父进程的Pid
    int ck=ptrace(PTRACE_TRACEME, 0, 0, 0);
    if(ck == -1)
    {
        LOGA("进程正在被调试\n");
        return;
    }else
    {
        LOGB("ptrace的返回值为:%d\n",ck);
        return;
     }
}
void anti_ptrace(void) 
    pid_t child; 
 
    // 创建子进程
    child = fork(); 
    if (child)
    {
        // 返回在父进程中
        wait(NULL); 
    
    else
    {
        // 获取父进程的pid
        pid_t parent = getppid(); 
        // ptrace附加父进程
        if (ptrace(PTRACE_ATTACH, parent, 0, 0) < 0)
        {
        while(1); 
        sleep(1); 
        }
 
        // 释放附加的进程
        ptrace(PTRACE_DETACH, parent, 0, 0); 
        // 结束当前进程
        exit(0); 
    
}
void anti_ptrace(void) 
    pid_t child; 
 
    // 创建子进程
    child = fork(); 
    if (child)
    {
        // 返回在父进程中
        wait(NULL); 
    
    else
    {
        // 获取父进程的pid
        pid_t parent = getppid(); 
        // ptrace附加父进程
        if (ptrace(PTRACE_ATTACH, parent, 0, 0) < 0)
        {
        while(1); 
        sleep(1); 
        }
 
        // 释放附加的进程
        ptrace(PTRACE_DETACH, parent, 0, 0); 
        // 结束当前进程
        exit(0); 
    
}
> 总结:使用frida spawn 即可
>
> 总结:使用frida spawn 即可
>
int pthread_create(pthread_t* restrict tidp,const pthread_attr_t* restrict_attr,void* (*start_rtn)(void*),void *restrict arg);
 
1)tidp:事先创建好的pthread_t类型的参数。成功时tidp指向的内存单元被设置为新创建线程的线程ID
 
2)restrict_attr:用于定制各种不同的线程属性,通常直接设为NULL。
 
**3)start_rtn:新创建线程从此函数开始运行。无参数是arg设为NULL即可。**
 
4)arg:start_rtn函数的参数。无参数时设为NULL即可。有参数时输入参数的地址。当多于一个参数时应当使用结构体传入。(以下举例)
 
5、返回值:成功返回0,否则返回错误码。
int pthread_create(pthread_t* restrict tidp,const pthread_attr_t* restrict_attr,void* (*start_rtn)(void*),void *restrict arg);
 
1)tidp:事先创建好的pthread_t类型的参数。成功时tidp指向的内存单元被设置为新创建线程的线程ID
 
2)restrict_attr:用于定制各种不同的线程属性,通常直接设为NULL。
 
**3)start_rtn:新创建线程从此函数开始运行。无参数是arg设为NULL即可。**
 
4)arg:start_rtn函数的参数。无参数时设为NULL即可。有参数时输入参数的地址。当多于一个参数时应当使用结构体传入。(以下举例)
 
5、返回值:成功返回0,否则返回错误码。
lavender:/proc/4027/task # ps -Twwww -p 4027
USER           PID   TID  PPID     VSZ    RSS WCHAN            ADDR S CMD
u0_a222       4027  4027 15576 7587780 598880 SyS_epoll_wait 780e128208 S eri.caranywhere
u0_a222       4027  4031 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Jit thread pool
u0_a222       4027  4036 15576 7587780 598880 do_sigtimedwait 780e128488 S Signal Catcher
u0_a222       4027  4044 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S HeapTaskDaemon
u0_a222       4027  4045 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ReferenceQueueD
u0_a222       4027  4046 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S FinalizerDaemon
u0_a222       4027  4047 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S FinalizerWatchd
u0_a222       4027  4054 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_1
u0_a222       4027  4055 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_2
u0_a222       4027  4056 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_3
u0_a222       4027  4057 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Profile Saver
u0_a222       4027  4059 15576 7587780 598880 hrtimer_nanosleep 780e128f68 S eri.caranywhere
u0_a222       4027  4063 15576 7587780 598880 hrtimer_nanosleep 780e128f68 S eri.caranywhere
u0_a222       4027  4064 15576 7587780 598880 poll_schedule_timeout 780e1283a8 S eri.caranywhere
u0_a222       4027  4065 15576 7587780 598880 hrtimer_nanosleep 780e128f68 S eri.caranywhere
u0_a222       4027  4068 15576 7587780 598880 pipe_wait  780b6ac008 S eri.caranywhere
u0_a222       4027  4070 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S mRecordExecutor
u0_a222       4027  4075 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-1-thread-1
u0_a222       4027  4076 15576 7587780 598880 SyS_epoll_wait 780e128208 S default
u0_a222       4027  4078 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_4
u0_a222       4027  4079 15576 7587780 598880 SyS_epoll_wait 780e128208 S ConnectivityThr
u0_a222       4027  4081 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S looper_logic
u0_a222       4027  4083 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-1
u0_a222       4027  4084 15576 7587780 598880 unix_stream_read_generic 780e1291a8 S TcmReceiver
u0_a222       4027  4086 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Gtc-ScheduleQue
u0_a222       4027  4093 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S .1, thread No.1
u0_a222       4027  4097 15576 7587780 598880 SyS_epoll_wait 780e128208 S RenderThread
u0_a222       4027  4102 15576 7587780 598880 SyS_epoll_wait 780e128208 S Binder:intercep
u0_a222       4027  4103 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ThreadTask #1
u0_a222       4027  4104 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-1-thread-2
u0_a222       4027  4107 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S BuglyThread-1
u0_a222       4027  4108 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S BuglyThread-2
u0_a222       4027  4109 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Bugly-ThreadMon
u0_a222       4027  4110 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S BuglyThread-3
u0_a222       4027  4111 15576 7587780 598880 wait_woken 780b6ac008 S FileObserver
u0_a222       4027  4114 15576 7587780 598880 SyS_epoll_wait 780e128208 S queued-work-loo
u0_a222       4027  4115 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxSchedulerPurg
u0_a222       4027  4116 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxCachedWorkerP
u0_a222       4027  4123 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S AsyncTask #1
u0_a222       4027  4125 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-5-thread-1
u0_a222       4027  4126 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Okio Watchdog
u0_a222       4027  4138 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S .1, thread No.2
u0_a222       4027  4151 15576 7587780 598880 SyS_epoll_wait 780e128208 S Gtc HandlerThre
u0_a222       4027  4161 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-8-thread-1
u0_a222       4027  4171 15576 7587780 598880 SyS_epoll_wait 780e128208 S magnifier pixel
u0_a222       4027  4179 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_5
u0_a222       4027  4193 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-5-thread-2
u0_a222       4027  4211 15576 7587780 598880 SyS_epoll_wait 780e128208 S GBD-Thread
u0_a222       4027  4213 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-10-thread-
u0_a222       4027  4214 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-10-thread-
u0_a222       4027  4215 15576 7587780 598880 SyS_epoll_wait 780e128208 S GWS-Thread
u0_a222       4027  4216 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S gws-thread
u0_a222       4027  4218 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-10-thread-
u0_a222       4027  4219 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-5-thread-3
u0_a222       4027  4226 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ZX-Api-Thread
u0_a222       4027  4228 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ZX-Api-Thread
u0_a222       4027  4231 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-2
u0_a222       4027  4248 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-10-thread-
u0_a222       4027  4569 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-3
u0_a222       4027  4572 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-4
u0_a222       4027  4785 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-5
u0_a222       4027  4788 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-6
u0_a222       4027  4999 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-7
u0_a222       4027  5006 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-8
u0_a222       4027  5466 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-9
u0_a222       4027  7602 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S OkHttp Connecti
u0_a222       4027  8067 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S glide-source-th
u0_a222       4027  8073 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S glide-disk-cach
u0_a222       4027  8075 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S glide-source-th
u0_a222       4027  8081 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S glide-source-th
u0_a222       4027  8082 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S glide-source-th
u0_a222       4027  8107 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S hwuiTask0
u0_a222       4027  8108 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S hwuiTask1
u0_a222       4027  8109 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S glide-active-re
u0_a222       4027  8120 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxCachedThreadS
u0_a222       4027  8121 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxCachedThreadS
u0_a222       4027  8132 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ThreadTask #2
u0_a222       4027  8189 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S z TaskRunner
u0_a222       4027  8191 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ThreadTask #3
u0_a222       4027  8192 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ThreadTask #4
u0_a222       4027  8236 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Okio Watchdog
u0_a222       4027  8259 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxCachedThreadS
u0_a222       4027  8260 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxCachedThreadS
u0_a222       4027  8265 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S RxCachedThreadS
u0_a222       4027  8269 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-13-thread-
u0_a222       4027  8357 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S process reaper
lavender:/proc/4027/task # ps -Twwww -p 4027
USER           PID   TID  PPID     VSZ    RSS WCHAN            ADDR S CMD
u0_a222       4027  4027 15576 7587780 598880 SyS_epoll_wait 780e128208 S eri.caranywhere
u0_a222       4027  4031 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Jit thread pool
u0_a222       4027  4036 15576 7587780 598880 do_sigtimedwait 780e128488 S Signal Catcher
u0_a222       4027  4044 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S HeapTaskDaemon
u0_a222       4027  4045 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ReferenceQueueD
u0_a222       4027  4046 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S FinalizerDaemon
u0_a222       4027  4047 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S FinalizerWatchd
u0_a222       4027  4054 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_1
u0_a222       4027  4055 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_2
u0_a222       4027  4056 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_3
u0_a222       4027  4057 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Profile Saver
u0_a222       4027  4059 15576 7587780 598880 hrtimer_nanosleep 780e128f68 S eri.caranywhere
u0_a222       4027  4063 15576 7587780 598880 hrtimer_nanosleep 780e128f68 S eri.caranywhere
u0_a222       4027  4064 15576 7587780 598880 poll_schedule_timeout 780e1283a8 S eri.caranywhere
u0_a222       4027  4065 15576 7587780 598880 hrtimer_nanosleep 780e128f68 S eri.caranywhere
u0_a222       4027  4068 15576 7587780 598880 pipe_wait  780b6ac008 S eri.caranywhere
u0_a222       4027  4070 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S mRecordExecutor
u0_a222       4027  4075 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-1-thread-1
u0_a222       4027  4076 15576 7587780 598880 SyS_epoll_wait 780e128208 S default
u0_a222       4027  4078 15576 7587780 598880 binder_ioctl 780e128348 S Binder:4027_4
u0_a222       4027  4079 15576 7587780 598880 SyS_epoll_wait 780e128208 S ConnectivityThr
u0_a222       4027  4081 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S looper_logic
u0_a222       4027  4083 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-3-thread-1
u0_a222       4027  4084 15576 7587780 598880 unix_stream_read_generic 780e1291a8 S TcmReceiver
u0_a222       4027  4086 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Gtc-ScheduleQue
u0_a222       4027  4093 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S .1, thread No.1
u0_a222       4027  4097 15576 7587780 598880 SyS_epoll_wait 780e128208 S RenderThread
u0_a222       4027  4102 15576 7587780 598880 SyS_epoll_wait 780e128208 S Binder:intercep
u0_a222       4027  4103 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S ThreadTask #1
u0_a222       4027  4104 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S pool-1-thread-2
u0_a222       4027  4107 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S BuglyThread-1
u0_a222       4027  4108 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S BuglyThread-2
u0_a222       4027  4109 15576 7587780 598880 futex_wait_queue_me 780e0d7440 S Bugly-ThreadMon

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2023-6-19 17:48 被FANGG3编辑 ,原因:
收藏
免费 14
支持
分享
最新回复 (19)
雪    币: 620
活跃值: (2313)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请问下我执行ps -T -p $(主进程pid),只能看到一个主线程,通过查看/proc/pid/task/tid/status文件得到的线程名存在截断,这种情况怎么办
2023-6-20 09:21
0
雪    币: 435
活跃值: (2636)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
mb_ckfmrnqa 请问下我执行ps -T -p $(主进程pid),只能看到一个主线程,通过查看/proc/pid/task/tid/status文件得到的线程名存在截断,这种情况怎么办
一般来说,主进程是zygote fork出来的,检查一下他的ppid是否是zygote的pid。linux规定线程名不能超过16个字符,会出现截断。
2023-6-20 10:38
0
雪    币: 4038
活跃值: (3427)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
6的
2023-6-20 15:29
0
雪    币: 14806
活跃值: (6043)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
你这个企业版没有检测root?
2023-6-20 17:01
0
雪    币:
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
tDasm 你这个企业版没有检测root?
隐藏root就行吧
2023-6-20 17:22
0
雪    币: 435
活跃值: (2636)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
7
tDasm 你这个企业版没有检测root?
会弹窗“应用环境不安全”,但不是强检测
2023-6-21 19:28
0
雪    币: 435
活跃值: (2636)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
    StriveMario 6的
哈哈哈
最后于 2023-6-21 19:34 被FANGG3编辑 ,原因:
2023-6-21 19:28
0
雪    币: 14806
活跃值: (6043)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
侬本多情 会弹窗“应用环境不安全”,但不是强检测
强检测root启动就over无任何提示
2023-6-22 06:47
0
雪    币: 435
活跃值: (2636)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
10
tDasm 强检测root启动就over无任何提示
如果使用了pthread_create,思路是一样的
2023-6-22 21:45
0
雪    币: 102
活跃值: (2030)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
mark
2023-6-25 11:17
0
雪    币: 158
活跃值: (1096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
方法2的patch讨论:
1.cw.putLdrRegU64("x0", 0)这里会直接崩溃(反反调失败,且指令没有修改成功,变成这样了 : 
ldr x0, #0x7ae3dbcfcc)
2.如果思路是把” bl pthread_create“ 给替换掉且不影响后续的值(还会用到的只有X0寄存器了?),那么建立在这个思路的基础上,把”bl pthread_create“替换成”MOV X0, #0“也应该成立的,但是实操发现不行,还是存在frida反调试。(注:方法1修改pthread_create的回调逻辑是有效的)

上面两个问题很奇怪,请大佬解惑。
2023-6-28 17:24
0
雪    币: 116
活跃值: (1012)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
mark
2023-6-28 23:56
0
雪    币: 2948
活跃值: (30846)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark
2023-6-29 09:33
0
雪    币: 435
活跃值: (2636)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
15
教教我吧~ 方法2的patch讨论: 1.cw.putLdrRegU64("x0", 0)这里会直接崩溃(反反调失败,且指令没有修改成功,变成这样了 : ldr x0, #0x7ae3d ...
你的样本是文中的么,可否发给我看一下
2023-7-10 09:41
0
雪    币: 435
活跃值: (2636)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
16
教教我吧~ 方法2的patch讨论: 1.cw.putLdrRegU64("x0", 0)这里会直接崩溃(反反调失败,且指令没有修改成功,变成这样了 : ldr x0, #0x7ae3d ...
1. 崩溃的原因可能是因为修改的时机不对,样本的so是抽取壳,在JNI_OnLoad后再进行修改.
2. 原因同问题1
2023-7-10 10:03
0
雪    币: 1735
活跃值: (4695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
虽然还看不太明白,但非常敬佩大佬。
2023-7-10 11:13
0
雪    币: 18
活跃值: (841)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
18
ps -A   中出现7个进程,有4条是hrtimer_nanosleep,但是ps -Twwww -p 【主进程】中仅有一条,是什么情况呢
2024-7-3 21:00
0
雪    币: 138
活跃值: (497)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
最新版我记得检测了pthread_create是否被hook
2024-7-4 10:47
0
雪    币: 193
活跃值: (1210)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
大神,有空能讲下i国网这个检测吗,也挺牛逼的
2024-8-21 18:38
0
游客
登录 | 注册 方可回帖
返回
//