吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 33015|回复: 90
收起左侧

[Android 原创] 过apk模拟器检测,关于特定模拟器检测蓝叠模拟器

  [复制链接]
yutao531315 发表于 2019-10-18 13:33
在学习android逆向过程中,包括在实际接单过程中,都会有遇到关于模拟器检测的,今天搞到一个关于特定模拟器,比如蓝叠模拟器,关键文件检测,small代码分析,
初次详细解释java代码,转换为small代码,详细解释过程,如有错误,忘各位大神点播,感激不尽。

首先我们来看java源代码!
//关键路径检测特定模拟器检测
       
[Asm] 纯文本查看 复制代码
private static String[] known_bluestacks = {			"/data/app/com.bluestacks.appmart-1.apk",
			"/data/app/com.bluestacks.BstCommandProcessor-1.apk",
			"/data/app/com.bluestacks.help-1.apk",
			"/data/app/com.bluestacks.home-1.apk",
			"/data/app/com.bluestacks.s2p-1.apk",
			"/data/app/com.bluestacks.searchapp-1.apk",
			"/data/bluestacks.prop", 
			"/data/data/com.androVM.vmconfig",
			"/data/data/com.bluestacks.accelerometerui",
			"/data/data/com.bluestacks.appfinder",
			"/data/data/com.bluestacks.appmart",
			"/data/data/com.bluestacks.appsettings",
			"/data/data/com.bluestacks.BstCommandProcessor",
			"/data/data/com.bluestacks.bstfolder",
			"/data/data/com.bluestacks.help", 
			"/data/data/com.bluestacks.home",
			"/data/data/com.bluestacks.s2p",
			"/data/data/com.bluestacks.searchapp",
			"/data/data/com.bluestacks.settings",
			"/data/data/com.bluestacks.setup",
			"/data/data/com.bluestacks.spotlight",
			"/mnt/prebundledapps/bluestacks.prop.orig" 
	};

public static boolean checkBlueStacksFiles() {
		for (int i = 0; i < known_bluestacks.length; i++) {
			String file_name = known_bluestacks[i];
			File qemu_file = new File(file_name);
			if (qemu_file.exists()) {
				
				Log.e("Result:", "Find BlueStacks Files!");
				return true;
			}
		}
		Log.e("Result:", "Not Find BlueStacks Files!");
		return false;
    }  


下面,我们打开killer 神器,直接定位到 checkBlueStacksFiles  方法出,直接看small代码
QQ图片20190927162204.png

贴上,所分析的small代码 ,希望给大家,在过模拟器检测的时候提供一个思路
[Asm] 纯文本查看 复制代码
.method public static checkBlueStacksFiles()Z   #根据特定模拟器检测
    .locals 5

    .prologue
    .line 239
    const/4 v1, 0x0

    .local v1, "i":I  #i=0  初始化 
    #java代码 i=0  
    :goto_0
    sget-object v3, Lcom/qianyu/antiemulator/AntiEmulator;->known_bluestacks:[Ljava/lang/String;   
    #sget读取  known_bluestacks   出来,设定的模拟器文件名称   保存在数组v3
    
    array-length v3, v3   #在数组里面读取预设的文件信息 保存在v3 
    # 
    if-lt v1, v3, :cond_0    small代码 注释 lt小于 le 小于等于 ,跳转到cond_0  
    #   判断获取到的指定文件数量是否大于0   ,文件在上面有定义需要检测德文件
                                                                         
    .line 247  
    
    const-string v3, "Result:"   #定义一个数据 result   保存在v3

    const-string v4, "Not Find BlueStacks Files!"    #//定义一个数据  Not Find BlueStacks Files!  保存在v4
    #对应java代码 Log.e("Result:", "Find BlueStacks Files!"); 
    invoke-static {v3, v4}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I    #调用一个   调用实例的静态方法    打印log日志信息
    
    #对应java代码  Log.e("Result:", "Not Find BlueStacks Files!");  
    .line 248
    const/4 v3, 0x0#给v3 赋值0
    #

    :goto_1
    return v3    # 返回0    表示没有检测到模拟器

    .line 240
    :cond_0
    sget-object v3, Lcom/qianyu/antiemulator/AntiEmulator;->known_bluestacks:[Ljava/lang/String;
      #sget读取指定的文件信息, v3是需要读取文件的名称,返回值是string类型
      #small指令普及 sget 是读  sput 写
        
       #从引用数组到v0  数组引用位置位于v3  元素索引位于v1
    aget-object v0, v3, v1  #从对象引用数组获取一个对象引用到v0,对象数组的引用位于v3,需获取的元素的索引位于v1。
       #类似于 a=b[1] 读取出来数组里面的数据
    .line 241
    .local v0, "file_name":Ljava/lang/String;
    new-instance v2, Ljava/io/File; #new 创建一个对象,

    invoke-direct {v2, v0}, Ljava/io/File;-><init>(Ljava/lang/String;)V
     #调用实例的直接方法 。传入v2  v0  v2等于的数组元素缩影的文件名称,v0 是  "file_name"
     #用"file_name" 函数查找 指定的文件  返回值 是V  
    .line 242
    .local v2, "qemu_file":Ljava/io/File;
    invoke-virtual {v2}, Ljava/io/File;->exists()Z
      #判断相关关键文件是否存在,存在就返回true  不存在返回false 。
    move-result v3  #接受返回结果 

    if-eqz v3, :cond_1  #判断返回值v3 是否为true  如果是就表示程序在模拟器中运行

    .line 243
    const-string v3, "Result:"

    const-string v4, "Find BlueStacks Files!"

    invoke-static {v3, v4}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I

    .line 244
    const/4 v3, 0x1  #赋值为1   程序在模拟器中运行
     #const/4 v3, 0x0
      #这里可以直接把0x1 改成0   const/4 v3, 0x0 ,这样就算是检测到在模拟器运行,也返回0            
    goto :goto_1

    .line 239
    :cond_1
    add-int/lit8 v1, v1, 0x1

    goto :goto_0
.end method
















免费评分

参与人数 24吾爱币 +28 热心值 +18 收起 理由
Duozhe52 + 1 + 1 用心讨论,共获提升!
StevenK + 1 + 1 谢谢@Thanks!
monsterbaby521 + 1 热心回复!
gaosld + 1 + 1 谢谢@Thanks!
nanmobei + 1 + 1 我很赞同!
联合卡环 + 1 + 1 热心回复!
shen19970802 + 1 + 1 我很赞同!
hihaar + 1 热心回复!
JerusalemSky + 1 用心讨论,共获提升!
JusticeTian + 1 + 1 谢谢@Thanks!
GG爱JJ + 1 + 1 用心讨论,共获提升!
lxlxxxl + 1 + 1 我九想知道魔灵召唤 模拟器怎么能开按键精灵,root了 直接开了按键不能玩,.
灵之约 + 1 + 1 有趣又有用
jianing666 + 1 + 1 谢谢@Thanks!
fei8255 + 1 + 1 用心讨论,共获提升!
_小白 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lcbnooo + 1 + 1 学习一下了
初晨曦流辉 + 1 热心回复!
起名好困难 + 1 热心回复!
十一大魔王i + 1 + 1 热心回复!
LOJUBB + 1 热心回复!
qtfreet00 + 6 感谢发布原创作品,吾爱破解论坛因你更精彩!
hzzheyang + 1 + 1 用心讨论,共获提升!
一萬只草泥马 + 2 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Antigen 发表于 2019-10-18 16:27
不知所云,装X
8204118 发表于 2019-10-18 18:14
赤〆夜 发表于 2019-10-18 15:58
 楼主| yutao531315 发表于 2019-10-18 13:34
关于样本下载链接!链接:https://share.weiyun.com/5WcjSYY 密码:acy3ib
 楼主| yutao531315 发表于 2019-10-18 13:36
如果此贴反馈效果好,评分多,下面我会在详细讲解基于     基于模拟器cpu信息的检测      检测手机上的一些硬件信息  等相关文章,希望多多鼓励
wto1322 发表于 2019-10-18 13:57
我先来一贴,这个可以,现在很多都检测模拟器,不过我看不懂代码呀~~~尴尬
wind941 发表于 2019-10-18 13:59
我不太懂 这个能直接使用在需要过检的游戏上面吗 比如刺激战场什么的
 楼主| yutao531315 发表于 2019-10-18 14:08
wto1322 发表于 2019-10-18 13:57
我先来一贴,这个可以,现在很多都检测模拟器,不过我看不懂代码呀~~~尴尬

看java代码,在看small代码
FoundWay 发表于 2019-10-18 14:14
smail代码看不懂,但是如果把文件路径的数组(known_bluestacks )里的路径替换成一个空路径是不是就可以了呢?
gaoxiaoyan 发表于 2019-10-18 15:01
强大,多谢楼主分享,不能看懂
hu007 发表于 2019-10-18 15:56
向高手演习!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 16:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表