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

利用系统时间实现APP内部随机IMEI和IMSI的方法

2014-10-08 16:16 337 查看
前言

我们知道很多APP都有第一次使用的体验功能,如Wifi伴侣,手机第一次使用时就会免费时长;还有很多的APP活动,比如百度糯米、安客居等,还有以前360应用的下载赚金币等等,都是手机的初次使用时才有。很显然,他们识别初次的方法就是手机的IMEI或者IMSI,如果能有一种方法,让APP启动时都像第一次启动那样被服务器端识别的话,那么Wifi伴侣就有无限的使用时长了,或许百度糯米也可以无限领优惠了..(意淫结束 与钱挂钩的东西,从来没有那么容易的。。)下面就说说随机的方法。

该方法来源于好友 @晴天 的分享。

一开始的考虑是直接产生随机数。先写Java代码 然后再转化为Smali的话,必然是一大串,这就增加了错误的几率,那有没有一种更简单的。唉 不做引诱了,也不多说明了,老累%>_<% 其实就是借助系统时间。利用的 currentTimeMillis()方法,获取相对于1970年1月1日0时起到当前的毫秒。一般是19位长型数字,然后在用substring()方法取到15位数字就可以随机伪装IMEI和IMSI。具体代码见下:

修改IMSI:示例是我是车神_Ver1.2.6


.local v1, "telManager":Landroid/telephony/TelephonyManager;
    invoke-virtual {v1}, Landroid/telephony/TelephonyManager;->getSubscriberId()Ljava/lang/String;

    move-result-object v0
   //获取系统的时间
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

   invoke-static {v0, v0}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
	
    move-result-object v0
   //获取长度
    invoke-virtual {v0}, Ljava/lang/String;->length()I

    move-result v1
   //截取15位
    add-int/lit8 v1, v1, -0xf

    invoke-virtual {v0, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v0
	
    .local v0, "imsi":Ljava/lang/String;


修改IMEI:示例是追魂3_Ver1.0

invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String;

    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0
	
    invoke-static {v0, v0}, Ljava/lang/String;->valueOf(J)Ljava/lang/String;
		
    move-result-object v0

    iget-object v1, p0, Lcom/call3/VerifyActivity;->c:Landroid/widget/TextView;

    invoke-virtual {v0}, Ljava/lang/String;->length()I

    move-result v2

    add-int/lit8 v2, v2, -0x6

    invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String;

    move-result-object v0
然后谢谢 @Allen 大神的指导,唉 基础不行..

图片




添加之后打log:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: