原文http://blog.csdn.net/zkdemon/article/details/8242064

越狱检测/越狱检测绕过——xCon

一直忽略了越狱检测与越狱检测绕过的问题,因为我认为在app争抢装机率的环境下,是不会在乎对方的设备越狱与否的。但很显然,我忽略了一个问题,app在设计的时候或许会依照设备是否越狱而采取不同的流程,比如说对越狱的设备采取更多的安全措施,在这种场景下,越狱检测是否可靠就成为了关键问题。本篇文章主要介绍越狱检测的常见方法(并配有相应的测试代码),以及最流行的越狱检测绕过插件xCon(会分析该工具会绕过哪些检测方法),最后总结了个人认为的比较可靠的越狱检测方法。
一、越狱检测

(一)《Hacking and Securing iOS Applications》这本书的第13章介绍了以下方面做越狱检测
1. 沙盒完整性校验
根据fork()的返回值判断创建子进程是否成功
(1)返回-1,表示没有创建新的进程
(2)在子进程中,返回0
(3)在父进程中,返回子进程的PID
沙盒如何被破坏,则fork的返回值为大于等于0.
我在越狱设备上,尝试了一下,创建子进程是失败,说明不能根据这种方法来判断是否越狱。xCon对此种方法有检测。
代码如下:


2. 文件系统检查
(1)检查常见的越狱文件是否存在
以下是最常见的越狱文件。可以使用stat函数来判断以下文件是否存在
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="str" style="line-height: 25px;">/Library/</span><span class="typ" style="line-height: 25px;">MobileSubstrate</span><span class="pun" style="line-height: 25px;">/</span><span class="typ" style="line-height: 25px;">MobileSubstrate</span><span class="pun" style="line-height: 25px;">.</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">dylib </span><span class="pun" style="line-height: 25px;">最重要的越狱文件,几乎所有的越狱机都会安装</span><span class="typ" style="line-height: 25px;">MobileSubstrate</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="typ" style="line-height: 25px;">Applications</span><span class="pun" style="line-height: 25px;">/</span><span class="typ" style="line-height: 25px;">Cydia</span><span class="pun" style="line-height: 25px;">.</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">app</span><span class="str" style="line-height: 25px;">/ </span><span class="str" style="line-height: 25px;">/</span><span class="kwd" style="line-height: 25px;">var</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">lib</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">cydia</span><span class="pun" style="line-height: 25px;">/</span><span class="pun" style="line-height: 25px;">绝大多数越狱机都会安装</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="kwd" style="line-height: 25px;">var</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">cache</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">apt </span><span class="pun" style="line-height: 25px;">/</span><span class="kwd" style="line-height: 25px;">var</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">lib</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">apt </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">etc</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">apt</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">bin</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">bash </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">bin</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sh</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">usr</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sbin</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sshd </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">usr</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">libexec</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">ssh</span><span class="pun" style="line-height: 25px;">-</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">keysign </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">etc</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">ssh</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sshd_config </span></p>

代码如下

(1)返回0,表示指定的文件存在
(2)返回-1,表示执行失败,错误代码存于errno中
错误代码:
    ENOENT         参数file_name指定的文件不存在
    ENOTDIR        路径中的目录存在但却非真正的目录
    ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接
    EFAULT         参数buf为无效指针,指向无法存在的内存空间
    EACCESS        存取文件时被拒绝
    ENOMEM         核心内存不足
    ENAMETOOLONG   参数file_name的路径名称太长
struct stat {
    dev_t         st_dev;       //文件的设备编号
    ino_t         st_ino;       //节点
    mode_t        st_mode;      //文件的类型和存取的权限
    nlink_t       st_nlink;     //连到该文件的硬连接数目,刚建立的文件值为1
    uid_t         st_uid;       //用户ID
    gid_t         st_gid;       //组ID
    dev_t         st_rdev;      //(设备类型)若此文件为设备文件,则为其设备编号
    off_t         st_size;      //文件字节数(文件大小)
    unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)
    unsigned long st_blocks;    //块数
    time_t        st_atime;     //最后一次访问时间
    time_t        st_mtime;     //最后一次修改时间
    time_t        st_ctime;     //最后一次改变时间(指属性)
};
该方法最简单,也是流程最广的,但最容易被破解。在使用该方法的时候,注意使用底层的c函数 stat函数来判断以下路径名,路径名做编码处理(不要使用base64编码),千万不要使用NSFileManager类,会被hook掉
(2) /etc/fstab文件的大小
该文件描述系统在启动时挂载文件系统和存储设备的详细信息,为了使得/root文件系统有读写权限,一般会修改该文件。虽然app不允许查看该文件的内容,但可以使用stat函数获得该文件的大小。在iOS 5上,未越狱的该文件大小未80字节,越狱的一般只有65字节。
代码如下:
在安装了xCon的越狱设备上运行,result的大小为803705776 ;卸载xCon后在越狱设备上运行,result的大小为66
个人觉得该方法不怎么可靠,并且麻烦,特别是在app在多个iOS版本上运行时。xCon对此种方法有检测,不能采用这种办法
(3)检查特定的文件是否是符号链接文件
iOS磁盘通常会划分为两个分区,一个只读,容量较小的系统分区,和一个较大的用户分区。所有的预装app(例如appstore)都安装在系统分区的/Application文件夹下。在越狱设备上,为了使得第三方软件可以安装在该文件夹下同时又避免占用系统分区的空间,会创建一个符号链接到/var/stash/下。因此可以使用lstat函数,检测/Applications的属性,看是目录,还是符号链接。如果是符号链接,则能确定是越狱设备。
以下列出了一般会创建符号链接的几个文件,可以检查以下文件

代码如下:

没有检测过未越狱设备的情况,所以不好判断该方法是否有效

(二)http://theiphonewiki.com/wiki/index.php?title=Bypassing_Jailbreak_Detection 给出了以下6种越狱监测方法
1、检测特定目录或文件是否存在
检测文件系统是否存在越狱后才会有的文件,例如/Applications/Cydia.app, /privte/var/stash
一般采用NSFileManager类的- (BOOL)fileExistsAtPath:(NSString *)path方法(很容易被hook掉)
或者采用底层的C函数,例如fopen(),stat() or access()
《Hacking and Securing iOS Applications》的方法2文件系统检查相同
xCon对此种方法有检测
2、检测特定目录或文件的文件访问权限
检测文件系统中特定文件或目录的unix文件访问权限(还有大小),越狱设备较之未越狱设备有太多的目录或文件具备写权限
一般采用NSFileManager类的- (BOOL)isWritableFileAtPath:(NSString *)path(很容易被hook掉)
或者采用底层的C函数,例如statfs()
xCon对此种方法有检测
3、检测是否能创建子进程
检测能否创建子进程,在非越狱设备上,由于沙箱保护机制,是不允许进程的
可以调用一些会创建子进程的C函数,例如fork(),popen()
《Hacking and Securing iOS Applications》的方法1沙盒完整性检查相同
xCon对此种方法有检测
4、检测能否执行ssh本地连接
检测能否执行ssh本地连接,在绝大多数的非越狱设备上,一般会安装OpenSSH(ssh服务端),如果能检测到ssh 127.0.0.1 -p 22连接成功,则说明为越狱机
xCon对此种方法有检测
5、检测system()函数的返回值
检测system()函数的返回值,调用sytem()函数,不要任何参数。在越狱设备上会返回1,在非越狱设备上会返回0
sytem()函数如果不要参数会报错
6、检测dylib(动态链接库)的内容

这种方法是目前最靠谱的方法,调用_dyld_image_count()和_dyld_get_image_name()来看当前有哪些dylib被加载

测试结果: 
使用下面代码就可以知道目标iOS设备加载了哪些dylib

<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="com" style="line-height: 25px;">#include</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="str" style="line-height: 25px;"><string.h></span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="com" style="line-height: 25px;">#import </span><span class="com" style="line-height: 25px;"><mach-o/loader.h></span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="com" style="line-height: 25px;">#import </span><span class="com" style="line-height: 25px;"><mach-o/dyld.h></span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="com" style="line-height: 25px;">#import </span><span class="com" style="line-height: 25px;"><mach-o/arch.h></span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="kwd" style="line-height: 25px;">void</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> printDYLD</span><span class="pun" style="line-height: 25px;">()</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">{</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="com" style="line-height: 25px;">//Get count of all currently loaded DYLD</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="typ" style="line-height: 25px;">uint32_t</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> count </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">_dyld_image_count</span><span class="pun" style="line-height: 25px;">();</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="kwd" style="line-height: 25px;">for</span><span class="pun" style="line-height: 25px;">(</span><span class="typ" style="line-height: 25px;">uint32_t</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> i </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="lit" style="line-height: 25px;">0</span><span class="pun" style="line-height: 25px;">;</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> i </span><span class="pun" style="line-height: 25px;"><</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> count</span><span class="pun" style="line-height: 25px;">;</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> i</span><span class="pun" style="line-height: 25px;">++)</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="pun" style="line-height: 25px;">{</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="com" style="line-height: 25px;">//Name of image (includes full path)</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="kwd" style="line-height: 25px;">const</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="kwd" style="line-height: 25px;">char</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pun" style="line-height: 25px;">*</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">dyld </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">_dyld_get_image_name</span><span class="pun" style="line-height: 25px;">(</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">i</span><span class="pun" style="line-height: 25px;">);</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="com" style="line-height: 25px;">//Get name of file</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="kwd" style="line-height: 25px;">int</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> slength </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">strlen</span><span class="pun" style="line-height: 25px;">(</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">dyld</span><span class="pun" style="line-height: 25px;">);</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="kwd" style="line-height: 25px;">int</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> j</span><span class="pun" style="line-height: 25px;">;</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="kwd" style="line-height: 25px;">for</span><span class="pun" style="line-height: 25px;">(</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">j </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> slength </span><span class="pun" style="line-height: 25px;">-</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="lit" style="line-height: 25px;">1</span><span class="pun" style="line-height: 25px;">;</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> j</span><span class="pun" style="line-height: 25px;">>=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="lit" style="line-height: 25px;">0</span><span class="pun" style="line-height: 25px;">;</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pun" style="line-height: 25px;">--</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">j</span><span class="pun" style="line-height: 25px;">)</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">            </span><span class="kwd" style="line-height: 25px;">if</span><span class="pun" style="line-height: 25px;">(</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">dyld</span><span class="pun" style="line-height: 25px;">[</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">j</span><span class="pun" style="line-height: 25px;">]</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pun" style="line-height: 25px;">==</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="str" style="line-height: 25px;">'/'</span><span class="pun" style="line-height: 25px;">)</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="kwd" style="line-height: 25px;">break</span><span class="pun" style="line-height: 25px;">;</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">       </span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">        </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">printf</span><span class="pun" style="line-height: 25px;">(</span><span class="str" style="line-height: 25px;">"%s\n"</span><span class="pun" style="line-height: 25px;">,</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">  dyld</span><span class="pun" style="line-height: 25px;">);</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="pun" style="line-height: 25px;">}</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">printf</span><span class="pun" style="line-height: 25px;">(</span><span class="str" style="line-height: 25px;">"\n"</span><span class="pun" style="line-height: 25px;">);</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">}</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="kwd" style="line-height: 25px;">int</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> main</span><span class="pun" style="line-height: 25px;">(</span><span class="kwd" style="line-height: 25px;">int</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> argc</span><span class="pun" style="line-height: 25px;">,</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="kwd" style="line-height: 25px;">char</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pun" style="line-height: 25px;">*</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">argv</span><span class="pun" style="line-height: 25px;">[])</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">{</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">printDYLD</span><span class="pun" style="line-height: 25px;">();</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;">
</p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="typ" style="line-height: 25px;">NSAutoreleasePool</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pun" style="line-height: 25px;">*</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">pool </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pun" style="line-height: 25px;">[[</span><span class="typ" style="line-height: 25px;">NSAutoreleasePool</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">alloc</span><span class="pun" style="line-height: 25px;">]</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">init</span><span class="pun" style="line-height: 25px;">];</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="kwd" style="line-height: 25px;">int</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> retVal </span><span class="pun" style="line-height: 25px;">=</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="typ" style="line-height: 25px;">UIApplicationMain</span><span class="pun" style="line-height: 25px;">(</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">argc</span><span class="pun" style="line-height: 25px;">,</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> argv</span><span class="pun" style="line-height: 25px;">,</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="kwd" style="line-height: 25px;">nil</span><span class="pun" style="line-height: 25px;">,</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> </span><span class="kwd" style="line-height: 25px;">nil</span><span class="pun" style="line-height: 25px;">);</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="pun" style="line-height: 25px;">[</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">pool </span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">release</span><span class="pun" style="line-height: 25px;">];</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">    </span><span class="kwd" style="line-height: 25px;">return</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;"> retVal</span><span class="pun" style="line-height: 25px;">;</span></p>
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">}</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"></p>

下图显示了我的iOS设备当前加载的dylib的路径,最下面就可以看到xCon

此种方法存在一个问题,是否能通过app store审核呢?

二、越狱检测绕过——xCon
可以从Cydia中安装,是目前为止最强大的越狱检测工具。由n00neimp0rtant与Lunatik共同开发,它据说patch了目前所知的所有越狱检测方法(也有不能patch的应用)。估计是由于影响太大了,目前已不开放源码了。

安装xCon后,会有两个文件xCon.dylib与xCon.plist出现在设备/Library/MobileSubstrate/DynamicLibraries目录下
(1)xCon.plist
该文件为过滤文件,标识在调用com.apple.UIKit时加载xCon.dylib
(2) xCon.dylib
可以使用otool工具将该文件的text section反汇编出来从而了解程序的具体逻辑(在windows下可以使用IDA Pro查看)
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0);">DANI</span><span class="pun">-</span><span class="pln" style="color: rgb(0, 0, 0);">LEE</span><span class="pun">-</span><span class="lit">2</span><span class="pun">:</span><span class="pln" style="color: rgb(0, 0, 0);">iostools danqingdani$ otool </span><span class="pun">-</span><span class="pln" style="color: rgb(0, 0, 0);">tV xCon</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">dylib </span><span class="pun">></span><span class="pln" style="color: rgb(0, 0, 0);">xContextsection </span></p>

可以根据文件中的函数名,同时结合该工具的原理以及越狱检测的一些常用手段(文章第一部分有介绍)来猜其逻辑,例如越狱检测方法中的文件系统检查,会根据特定的文件路径名来匹配,我们可以使用strings查看文件中的内容,看看会有哪些文件路径名。

<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pln" style="color: rgb(0, 0, 0);">DANI</span><span class="pun">-</span><span class="pln" style="color: rgb(0, 0, 0);">LEE</span><span class="pun">-</span><span class="lit">2</span><span class="pun">:</span><span class="pln" style="color: rgb(0, 0, 0);">IAP tools danqingdani$ strings xCon</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">dylib </span><span class="pun">></span><span class="pln" style="color: rgb(0, 0, 0);">xConReadable</span></p>

以下是xCon中会匹配的文件名

<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="str">/usr/</span><span class="pln" style="color: rgb(0, 0, 0);">bin</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">sshd</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">usr</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">libexec</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">sftp</span><span class="pun">-</span><span class="pln" style="color: rgb(0, 0, 0);">server</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">usr</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">sbin</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">sshd</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">bin</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">bash</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">bin</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">sh</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">bin</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">sw</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">etc</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">apt</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">etc</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">fstab</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">blackra1n</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Cydia</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Cydia</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span><span class="pun">/</span><span class="typ">Info</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Cycorder</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Loader</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">FakeCarrier</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Icy</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">IntelliScreen</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">MxTube</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">RockApp</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">SBSettings</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">WinterBoard</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">bin</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">bash</span><span class="pun">/</span><span class="typ">Applications</span><span class="pun">/</span><span class="typ">Cydia</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">app</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">LaunchDaemons</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">com</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">openssh</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">sshd</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">Frameworks</span><span class="pun">/</span><span class="typ">CydiaSubstrate</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">framework</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span><span class="str">/</span>
<span class="str">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span><span class="pun">/</span><span class="typ">DynamicLibraries</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span><span class="pun">/</span><span class="typ">DynamicLibraries</span><span class="str">/</span>
<span class="str">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span><span class="pun">/</span><span class="typ">DynamicLibraries</span><span class="pun">/</span><span class="typ">LiveClock</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span><span class="pun">/</span><span class="typ">DynamicLibraries</span><span class="pun">/</span><span class="typ">Veency</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span>
<span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span><span class="pun">/</span><span class="typ">DynamicLibraries</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">xCon</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span>
<span class="pun">/</span><span class="kwd">private</span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">lib</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">apt</span>
<span class="pun">/</span><span class="kwd">private</span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">lib</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">apt</span><span class="str">/</span>
<span class="str">/</span><span class="kwd">private</span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">lib</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">cydia</span>
<span class="pun">/</span><span class="kwd">private</span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">mobile</span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">SBSettings</span><span class="pun">/</span><span class="typ">Themes</span>
<span class="pun">/</span><span class="kwd">private</span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">stash</span>
<span class="pun">/</span><span class="kwd">private</span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">tmp</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">cydia</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">log</span>
<span class="pun">/</span><span class="typ">System</span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">LaunchDaemons</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">com</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">ikey</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">bbot</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span>
<span class="pun">/</span><span class="typ">System</span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">LaunchDaemons</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">com</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">saurik</span><span class="pun">.</span><span class="typ">Cydia</span><span class="pun">.</span><span class="typ">Startup</span><span class="pun">.</span><span class="pln" style="color: rgb(0, 0, 0);">plist</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span lang="EN-US" style="font-family: 宋体; font-size: 10.5pt;"><span class="pln" style="color: rgb(0, 0, 0);">NzI0MS9MaWJyYXJ5L01vYmlsZVN1YnN0cmF0ZQ</span><span class="pun">==</span><span class="pln" style="color: rgb(0, 0, 0);">  </span><span class="pun">(</span></span><span style="font-family: 宋体; font-size: 10.5pt;"><span class="pun">对应</span><span lang="EN-US"><span class="lit">7241</span><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">MobileSubstrate</span></span><span class="pun">)</span></span></p>

通过分析,xCon会绕过以下越狱检测方法

(1)    根据是否存在特定的越狱文件,及特定文件的权限是否发生变化来判断设备是否越狱

fileExistsAtPath:

fileExistsAtPath:isDirectory:

filePermission:

fileSystemIsValid:

checkFileSystemWithPath:forPermissions:

mobileSubstrateWorkaround

detectIllegalApplication:

(2)       根据沙箱完整性检测设备是否越狱

canUseFork

(3)       根据文件系统的分区是否发生变化来检测设备是否越狱

partitionsModified

(4)       根据是否安装ssh来判断设备是否越狱

ssh root@127.0.0.1

三、总结
总之,要做好越狱检测,建议使用底层的c语言函数进行,用于越狱检测的特征字符也需要做混淆处理,检测函数名也做混淆处理。第一部分介绍的以下三种方法,可以尝试一下
(1)检查常见的越狱文件是否存在,使用stat(),检查以下文件是否存在
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="str" style="line-height: 25px;">/Library/</span><span class="typ" style="line-height: 25px;">MobileSubstrate</span><span class="pun" style="line-height: 25px;">/</span><span class="typ" style="line-height: 25px;">MobileSubstrate</span><span class="pun" style="line-height: 25px;">.</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">dylib </span><span class="pun" style="line-height: 25px;">最重要的越狱文件,几乎所有的越狱机都会安装</span><span class="typ" style="line-height: 25px;">MobileSubstrate</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="typ" style="line-height: 25px;">Applications</span><span class="pun" style="line-height: 25px;">/</span><span class="typ" style="line-height: 25px;">Cydia</span><span class="pun" style="line-height: 25px;">.</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">app</span><span class="str" style="line-height: 25px;">/ </span><span class="str" style="line-height: 25px;">/</span><span class="kwd" style="line-height: 25px;">var</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">lib</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">cydia</span><span class="pun" style="line-height: 25px;">/</span><span class="pun" style="line-height: 25px;">绝大多数越狱机都会安装</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="kwd" style="line-height: 25px;">var</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">cache</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">apt </span><span class="pun" style="line-height: 25px;">/</span><span class="kwd" style="line-height: 25px;">var</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">lib</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">apt </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">etc</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">apt</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">bin</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">bash </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">bin</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sh</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">usr</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sbin</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sshd </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">usr</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">libexec</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">ssh</span><span class="pun" style="line-height: 25px;">-</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">keysign </span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">etc</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">ssh</span><span class="pun" style="line-height: 25px;">/</span><span class="pln" style="color: rgb(0, 0, 0); line-height: 25px;">sshd_config </span></p>

(2)检查特定的文件是否是符号链接文件,使用lstat(),检查以下文件是否为符号链接文件
<p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="str">/Applications</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="str">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">Ringtones</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun">/</span><span class="typ">Library</span><span class="pun">/</span><span class="typ">Wallpaper</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">usr</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">include</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">usr</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">libexec</span></p><p style="padding-top: 0px; padding-bottom: 0px; margin-top: 0px; margin-bottom: 10px;"><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">usr</span><span class="pun">/</span><span class="pln" style="color: rgb(0, 0, 0);">share</span></p>

   (3)检差dylib(动态链接库)的内容,使用_dyld_image_count与_dyld_get_image_name,检查是否包含越狱插件的dylib文件

参考:
http://theiphonewiki.com/wiki/index.php?title=XCon
http://theiphonewiki.com/wiki/index.php?title=Bypassing_Jailbreak_Detection

越狱检测/越狱检测绕过——xCon相关推荐

  1. 越狱检测/越狱检测绕过—xCon

    http://www.freebuf.com/articles/wireless/6318.html 一直忽略了越狱检测与越狱检测绕过的问题,因为我认为在app争抢装机率的环境下,是不会在乎对方的设备 ...

  2. iOS逆向(10)-越狱!越狱!远程连接登录手机

    之前的九篇文章讲述的是在不越狱的情况下,详细的讲解了对APP重签名的原理,如何动态库注入,以及之后的各种调试技巧.这些功能其实已经很强大了,能够帮助咱们在绝大多数情况下去分析并且更改对方的APP了.这 ...

  3. [免费专栏] ATTACK安全之Android车机证书攻击场景检测「检测系统代理」

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 ATTACK付费专栏长期更新,本篇最新内容请前往: [车联网 ...

  4. matlab瓶盖盖严检查,盖检机|瓶盖检测|外观检测设备|誉阵科技

    盖检机--五加仑盖系列 设备型号YZ-JPG10K-1YZ-JPG10K-5YZ-JPG10K-6相机组数1组5组6组检测速度10000个/小时检测位置瓶盖正面瓶盖正面,360°外圆面及盖耳朵 瓶盖正 ...

  5. yolo 负样本_SSD——样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016)...

    SSD--样本正负比控制+多尺度检测 (目标检测)(one-stage)(深度学习)(ECCV 2016) 发布时间:2018-11-23 20:57, 浏览次数:1399 , 标签: SSD one ...

  6. DBnet检测知识蒸馏+tensorrt推理(文字检测+条形码检测)

    向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习  公众号:datayx 一.DBnet 提出了 Differentiable Binarization (DB),它 ...

  7. 有未经处理的异常(在 xx.exe 中): 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出。

    有未经处理的异常(在 xx.exe 中): 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出. 参考文章: (1)有未经处理的异常(在 xx.exe 中): 堆栈 Cookie 检测代码检测到基 ...

  8. 行人检测/人体检测综述

    行人检测/人体检测综述 更详细的资料整理到了个人的github上,地址为 https://github.com/whitenightwu/11-Algorithm_and_Data\11-Paper ...

  9. VJ框架 与 人脸检测/物体检测 详解

    Viola-Jones Object Detection Framework 1. VJ Framework 1.1 Overview 本文详细阐述 Viola-Joines 人脸检测/物体检测 实时 ...

最新文章

  1. qlabel 边加载边更新_王者荣耀:9月版本更新,九位英雄调整,三大战边回归,飞牛笑了...
  2. 最大调用堆栈大小超出错误
  3. (转载)各Linux发行版本 网络配置文件
  4. 2021高考成绩查询时间 新闻,教育资讯:2021高考成绩一般公布时间 多久出成绩...
  5. 线程池的几个重要参数?—— 七大参数
  6. 基因组与数据整合:DNA应用开发正在临近
  7. button 和input 的区别及在表单form中的用法
  8. 【软件开发底层知识修炼】十八 快速学习GDB调试五 使用GDB进行调试的一些小技巧
  9. 《DSP using MATLAB》示例Example7.25
  10. 2018 ios开发者账号同意新协议加联系电话教程
  11. WPF 入门笔记之基础
  12. 高德地图偏移android,关于JS接高德地图API,以及坐标偏移坐标转换(示例代码)
  13. centos7内网穿透(frp、zerotier)
  14. win7 系统盘 减肥
  15. MetaFun 小传
  16. S2e-env环境及编译学习1
  17. 清华张敏教授:个性化推荐研究进展(可解释性、鲁棒性和公平性)
  18. 外企工作日常:全英文CrossTalk反串讲-讲前紧张,讲后淡定
  19. 如何隐藏TPageControl Delphi控件的选项卡
  20. 已解决for example: not eligible for auto-proxying

热门文章

  1. mysql 存储过程学习
  2. 如何成为有效学习的高手
  3. 我的世界服务器加皮肤不显示不出来,我的世界启动器添加皮肤,启动器为什么换不了皮肤...
  4. 联想Lenovo 小新Pro-13 AIR 2020 Windows 10 间歇性 蓝屏 的解决方法 : 又一个AI变成 人工智障的失败案例?
  5. 计算机博士英文复试自我介绍,博士生面试英文自我介绍范文
  6. 面试题-100盏灯问题
  7. IBM 2022年关于安全的五大预测;美通社推出2022年巴塞罗那世界移动通信大会整合传播方案 | 全球TMT...
  8. 军犬舆情:从京东美妆口红事件看企业舆情监测的重要性
  9. 安装Ubuntu后必须要做的几件事(二)--开发工具篇
  10. php 获取短信验证码