首页
社区
课程
招聘
[原创]破解7notes with mazec体验版的10天限制
2012-11-26 12:43 16118

[原创]破解7notes with mazec体验版的10天限制

2012-11-26 12:43
16118
声明:本文章仅做技术研究,请勿用于非法用途。
 
  这个软件是日文手写输入法,对于工作当中经常要用日文进行书写的人来说还是很不错的,但是这个版本是体验版,有10天的限制,10天过后会弹出提示不能继续使用,如下图:
  

  用到的工具:APKTOOL、JD-GUI、Notepad++
  
  1、用APKTOOL反编译该程序,由弹出的过期提示,在smali文件中搜索关键字:"Expired",如下图:
  
  其中isTrialExpired方法值得我们注意,由字面意思可以推测,这个方法应该是判读是否过期。因此,我们再次搜索关键字:isTrialExpired,如下图:
  
  其中有对该方法的定义和调用该方法的地方,我们不妨先看看这个方法的定义,在smali\com\sevenknowledge\mazec\MazecIms.smali文件中的定义:
  
  
.method public isTrialExpired()Z
    .locals 7

    .prologue
    const-wide/16 v5, 0x0

    const/4 v2, 0x0

    .line 207
    sget-object v3, Lcom/sevenknowledge/common/BuildOption;->PRODUCT_TYPE:Lcom/sevenknowledge/common/BuildOption$ProductType;

    sget-object v4, Lcom/sevenknowledge/common/BuildOption$ProductType;->TRIAL:Lcom/sevenknowledge/common/BuildOption$ProductType;

    if-ne v3, v4, :cond_3

    .line 209
    iget-wide v3, p0, Lcom/sevenknowledge/mazec/MazecIms;->mExpireBase:J

    cmp-long v3, v3, v5

    if-ltz v3, :cond_0

    iget-wide v3, p0, Lcom/sevenknowledge/mazec/MazecIms;->mExpireTime:J

    cmp-long v3, v3, v5

    if-gez v3, :cond_1

    .line 210
    :cond_0
    invoke-direct {p0}, Lcom/sevenknowledge/mazec/MazecIms;->initExpireDate()V

    .line 212
    :cond_1
    invoke-static {}, Ljava/lang/System;->currentTimeMillis()J

    move-result-wide v0

    .line 213
    .local v0, t:J
    iget-wide v3, p0, Lcom/sevenknowledge/mazec/MazecIms;->mExpireBase:J

    cmp-long v3, v0, v3

    if-ltz v3, :cond_2

    iget-wide v3, p0, Lcom/sevenknowledge/mazec/MazecIms;->mExpireTime:J

    cmp-long v3, v3, v0

    if-gez v3, :cond_3

    :cond_2
    const/4 v2, 0x1

    .line 216
    .end local v0           #t:J
    :cond_3
    return v2
.end method

由于smali语句不太方便阅读,因此我们用JD-GUI工具来阅读对应的JAR文件,上面这一段代码对应的java语句:
 
 public boolean isTrialExpired()
  {
    int i = 0;
    if (BuildOption.PRODUCT_TYPE == BuildOption.ProductType.TRIAL)
    {
      if ((this.mExpireBase < 0L) || (this.mExpireTime < 0L))
        initExpireDate();
      long l = System.currentTimeMillis();
      if ((l < this.mExpireBase) || (this.mExpireTime < l))
        i = 1;
    }
    return i;
  }
  

  很明显,返回值决定了是否过期,返回值i=0时,没有过期,i=1时,过期。所以,我们在这里可以改变返回值,让i始终=0,就可以永不过期。
  在smali文件中,我们在该方法的末尾如此修改:
   
   if-gez v3, :cond_3

    :cond_2
    const/4 v2, 0x1

    .line 216
    .end local v0           #t:J
    :cond_3
    [COLOR="Red"]const/4 v2, 0x0[/COLOR]
    return v2
.end method


还有一种改法,我们看到,if (BuildOption.PRODUCT_TYPE == BuildOption.ProductType.TRIAL),i的值才为1,那么BuildOption.PRODUCT_TYPE 的值都有哪些呢?
通过jd-gui,我们找到在BulidOption.class中定义了ProductType类型有哪些
 
 public static enum ProductType
  {
    static
    {
      FREE = new ProductType("FREE", 2);
      ProductType[] arrayOfProductType = new ProductType[3];
      arrayOfProductType[0] = PREMIUM;
      arrayOfProductType[1] = TRIAL;
      arrayOfProductType[2] = FREE;
      $VALUES = arrayOfProductType;
    }
  }

  可以看到ProductType有三种类型:PREMIUM、TRIAL、FREE。而在类的成员变量当中就已经初始化了ProductType的值:
  
public class BuildOption
{
  public static final String APP_PACKAGE_NAME = "com.sevenknowledge.sevennotestrial";
  public static final boolean DEVELOP_MODE = false;
  public static final DeviceName DEVICE_NAME;
  public static final DeviceType DEVICE_TYPE;
  public static final DeviceVendor DEVICE_VENDOR;
  public static final boolean KEYBOARD_CONVERSION_MODE = false;
  public static final MarketType MARKET_TYPE;
  public static final String PRODUCT_NAME = "AndroidS-Edit-J-T";
[COLOR="red"]  public static final ProductType PRODUCT_TYPE = ProductType.TRIAL;[/COLOR]
  public static final boolean VALID_ENGLISH_MODE;

因此我们可以修改初始化的值为ProductType.PREMIUM
  public static final ProductType PRODUCT_TYPE = ProductType.PREMIUM
对应到smali文件中的修改:
# direct methods
.method static constructor <clinit>()V
    .locals 1

    .prologue
    .line 32
    sget-object v0, Lcom/sevenknowledge/common/BuildOption$ProductType;->[COLOR="red"]PREMIUM[/COLOR]:Lcom/sevenknowledge/common/BuildOption$ProductType;

    sput-object v0, Lcom/sevenknowledge/common/BuildOption;->PRODUCT_TYPE:Lcom/sevenknowledge/common/BuildOption$ProductType;

    
最后重建APK,签名,测试,更改系统时间超过10天,不再弹出限制,可以继续使用。

APK附件太大,无法上传,给出网盘链接
原版:
http://pan.baidu.com/share/link?shareid=135408&uk=604460222
修改后:
http://pan.baidu.com/share/link?shareid=135409&uk=604460222

[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (8)
雪    币: 247
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
arsusanh 2012-11-26 16:35
2
0
不错 学习了~~~~
雪    币: 107
活跃值: (311)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 2012-11-27 14:43
3
0
呵呵..他们为什么都没加混淆??
雪    币: 247
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
arsusanh 2012-11-27 17:37
4
0
很明显欺负我们不懂日文,所以没有加      
雪    币: 37
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
XGalaxy 2012-11-27 17:53
5
0
电视机。。。。。。。。。。。
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
风逐天 2012-11-27 18:09
6
0
不错,最新版是1.5.0,不过方法一样,没有大的变化
雪    币: 465
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lqll 2012-12-1 23:32
7
0
不错,最新版是1.5.0,
雪    币: 507
活跃值: (120)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
鬼谷子c 1 2012-12-9 07:30
8
0
个人认为,在下面这段代码中
  if-gez v3, :cond_3

    :cond_2
    const/4 v2, 0x1

    .line 216
    .end local v0           #t:J
    :cond_3
    const/4 v2, 0x0
    return v2
.end method

将红色部分if-gez修改为if-lez即可,将判断进行修改,然后可以不限制使用时间
雪    币: 1546
活跃值: (1461)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ndaye 2013-7-27 00:16
9
0
正在学习中!!
游客
登录 | 注册 方可回帖
返回