zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

安卓逆向_20 --- 模拟器检测、反调试检测、ELF动态调试、__libc_init 下断

安卓调试 动态 --- 检测 20 逆向 __
2023-09-11 14:13:59 时间

 

From( 模拟器检测实战分析 ):https://www.bilibili.com/video/BV1UE411A7rW?p=65

怎样过 app 的模拟器检测:https://bbs.pediy.com/thread-249759.htm

Android 模拟器如何不被检测思路:https://bbs.pediy.com/thread-227050.htm

Android 模拟器检测常用方法:https://blog.csdn.net/sinat_33150417/article/details/51320228

如何判断 Android 设备是真机还是模拟器?:https://www.zhihu.com/question/21355176/answer/272069337

检测 Android 模拟器的方法和代码实现:https://blog.csdn.net/earbao/article/details/82746605

一行代码帮你检测Android模拟器(更新至1.1.0):https://www.jianshu.com/p/434b3075b5dd

过 apk 模拟器检测,关于特定模拟器检测蓝叠模拟器:https://www.52pojie.cn/thread-1039699-1-1.html

android-模拟器检测方法:https://www.jianshu.com/p/ec99371f00ed

 

模拟器检测

 

 

 

使用 AndroidStudio 动态调试 smali 代码 查找 检测模拟器 代码

 

入口点入口页面 看下 ,分析有没有模拟器检测。。。

使用 AndroidStudio 动态调试 smali 代码 查找 检测模拟器 代码:https://www.bilibili.com/video/BV1UE411A7rW?p=65

 

 

反调试检测手段

( 其实有好多种检测,这里只列举了:关键文件检测、端口检测、进程名检测  来进行简单说明。。。)

IDA Pro 动态调试,分析检测( 这里分析的是 " 可执行文件 ",不是 so 库 )

1. 关键文件检测( 例如:android_server 文件检测 ):https://www.bilibili.com/video/BV1UE411A7rW?p=66

libc_init

 

相关端口检测,例如 23946 

 

进程名称检测

 

2. 动态轮询检测( 使用 ptrace ):https://www.bilibili.com/video/BV1UE411A7rW?p=67

libc_init 下断点

源码:

 

trackpid  ( cat /proc/进程id/status  、cat /proc/进程id/cmdline )

 

 

 

动态调试 进程名称 检测( 调试 可执行程序 【不是 apk )

 

Android反调试方法总结以及源码实现之检测篇(一):https://blog.csdn.net/feibabeibei_beibei/article/details/60956307

安卓常见的反调试与对抗方案:https://www.52pojie.cn/thread-709669-1-1.html

视频地址( 动态调试 ELF ):https://www.bilibili.com/video/BV1UE411A7rW?p=68

安卓 反调试

可执行文件源码( 编译成可执行文件之后,adb push 传到 手机上执行,然后 动态调试进程 ):

上传可执行文件到手机,并运行程序:

运行 android_servers 

端口转发( 在打开一个 cmd 窗口,运行 端口转发命令 ):

执行转发命令

使用 IDA Pro 调试

注意:

  • 调试 可执行程序 是 Debugger ---> run 
  • 调试 so 是 Debugger ---> attach

调试可执行程序:

填写可执行文件路径、IP、和 端口号

点击 OK 之后,会挂起程序,然后勾选 三项

因为是从 libc.so 加载的,所以直接点击是跳转不过来的,如图所示:

点击运行加载 libc.so 

点击进入 libc.so ,然后再 libc.so  里面搜索 libc,找到 libc_init,点进去,下断点

然后再点击 "运行",让程序运行到断点处。。。

 

可执行文件 的 导出函数 只有一个 main,点击去,可以找到 __libc_init ,这个函数有 4 个参数,这4个是固定的

但是怎么找一个可执行文件一开始执行的地方,其实就是 __libc_init 的第 3 个参数,

即 R2 ,指向 main 函数,即就是程序的入口点。。。

分析 main 函数即可看到 检测逻辑代码

 

 

libc_init  下断点

 

libc_init  下断点:https://www.bilibili.com/video/BV1UE411A7rW?p=65