首页
社区
课程
招聘
[原创]某安卓软件免积分破解
发表于: 2013-4-12 16:57 11244

[原创]某安卓软件免积分破解

2013-4-12 16:57
11244
【文章标题】: 某安卓软件免积分破解
【文章作者】: pojiemyie
【软件名称】: 疯狂接水果
【下载地址】: 自己搜索下载
【使用工具】: ApkIDE(APK改之理)
【操作平台】: android 4.2.2
【作者声明】: 第一次玩android破解,给自己留点记号,免得忘记。高手略过,请勿拍砖!
--------------------------------------------------------------------------------
【详细过程】
  重力感应游戏,给小朋友玩锻炼平衡感。试玩一次后就出现对话框要激活。
  穷人一个,还是自力更生比较好。祭出工具ApkIDE。
  参考网上的教程,在右边的搜索框中搜索“开始(激活)”的十六进制unicode:\u靠\u59cb(\u6fc0\u6d3b),未果。
  在右边的搜索框中搜索中文“开始(激活)”   
  (备注:在资源文件中可以直接搜索中文,但在smali文件中不能直接搜索中文,要,最好两样都试试。这个问题我纠结了半天,血的教训。)
  出现搜索结果:
  mainac.xml,双击打开,发现以下信息:
      <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerInParent="true">
          <TextView android:textSize="30.0dip" android:textColor="#fffaebd7" android:gravity="center" android:id="@id/PointsTextView" android:visibility="visible" android:layout_width="fill_parent" android:layout_height="wrap_content" />
          <Button android:textSize="20.0dip" android:gravity="center" android:layout_gravity="center" android:id="@id/nextb" android:layout_width="190.0dip" android:layout_height="50.0dip" android:text="开始(激活)" />
          <Button android:textSize="20.0dip" android:gravity="center" android:layout_gravity="center" android:id="@id/moreb" android:layout_width="190.0dip" android:layout_height="50.0dip" android:text="更多免费游戏应用" />
          <Button android:textSize="20.0dip" android:gravity="center" android:layout_gravity="center" android:id="@id/radvb" android:layout_width="190.0dip" android:layout_height="50.0dip" android:text="免费积分" />
      </LinearLayout>
  正好是激活对话框的三个按钮,终于找到了位置!泪奔!
  猜测mainac可能就是相应调用程序的名称。继续搜索mainac,找到两处,双击打开其中一个public.xml,看到如下代码:
  <resources>
      <public type="drawable" name="backadzs" id="0x7f020001" />
      <public type="drawable" name="icon" id="0x7f020000" />
      <public type="layout" name="main" id="0x7f030000" />
      <public type="layout" name="mainac" id="0x7f030001" />    --->此处
      <public type="layout" name="upload" id="0x7f030002" />
      <public type="string" name="hello" id="0x7f040000" />
      <public type="string" name="app_name" id="0x7f040001" />
      <public type="id" name="glview" id="0x7f050000" />
      <public type="id" name="linearLayout" id="0x7f050001" />
      <public type="id" name="PointsTextView" id="0x7f050002" />
      <public type="id" name="nextb" id="0x7f050003" />
      <public type="id" name="moreb" id="0x7f050004" />
      <public type="id" name="radvb" id="0x7f050005" />
      <public type="id" name="AdLinearLayout" id="0x7f050006" />
      <public type="id" name="progressBar2" id="0x7f050007" />
  </resources>
  看到id号为0x7f030001,这个是程序调用的ID,再搜索0x7f030001,出来三个结果,双击打开MainA.smali,看到代码。
      invoke-virtual {v0, p0}, Lcom/kuguo/pushads/PushAdsManager;->receivePushMessage(Landroid/content/Context;)V
  
      .line 107
      const v0, 0x7f030001    --->此处
  
      invoke-virtual {p0, v0}, Lcom/adroidzscpc/bzyi/MainA;->setContentView(I)V
  
      .line 108
      const v0, 0x7f050006
  
      invoke-virtual {p0, v0}, Lcom/adroidzscpc/bzyi/MainA;->findViewById(I)Landroid/view/View;
  
      move-result-object v7
  
      check-cast v7, Landroid/widget/LinearLayout;
  
      .line 110
      .local v7, container:Landroid/widget/LinearLayout;
      new-instance v0, Lcom/waps/AdView;
  
      invoke-direct {v0, p0, v7}, Lcom/waps/AdView;-><init>(Landroid/content/Context;Landroid/widget/LinearLayout;)V
  
      const/16 v1, 0x1e
  
      invoke-virtual {v0, v1}, Lcom/waps/AdView;->DisplayAd(I)V
  
      .line 112
      invoke-static {p0}, Lcom/waps/AppConnect;->getInstance(Landroid/content/Context;)Lcom/waps/AppConnect;
  
      move-result-object v0
  
      invoke-virtual {v0}, Lcom/waps/AppConnect;->getPushAd()V
  
      .line 113
      const v0, 0x7f050002
  
      invoke-virtual {p0, v0}, Lcom/adroidzscpc/bzyi/MainA;->findViewById(I)Landroid/view/View;
  
      move-result-object v0
  
      check-cast v0, Landroid/widget/TextView;
  
      iput-object v0, p0, Lcom/adroidzscpc/bzyi/MainA;->pointsTextView:Landroid/widget/TextView;
  
      .line 114
      invoke-static {p0}, Lcom/waps/AppConnect;->getInstance(Landroid/content/Context;)Lcom/waps/AppConnect;
  
      move-result-object v0
  
      invoke-virtual {v0, p0}, Lcom/waps/AppConnect;->getPoints(Lcom/waps/UpdatePointsNotifier;)V
  
  看不懂android程序,但看英文也猜出这里应该是显示激活对话框、上网激活、推送广告的位置了。
  不管了,向上找到位置直接返回就行了。
  .method public onCreate(Landroid/os/Bundle;)V
      .locals 14
      .parameter "savedInstanceState"
  
      .prologue
      const/4 v5, 0x1
  
      const/4 v4, 0x0
  
      .line 61
      invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
  
      .line 62
      const v0, 0x7f030002
  
      invoke-virtual {p0, v0}, Lcom/adroidzscpc/bzyi/MainA;->setContentView(I)V
  
      .line 63
      invoke-static {p0}, Lcom/waps/AppConnect;->getInstance(Landroid/content/Context;)Lcom/waps/AppConnect;
  
      .line 65
      invoke-static {p0}, Lcom/mobclick/android/MobclickAgent;->updateOnlineConfig(Landroid/content/Context;)V
  
      .line 66
      iget-object v0, p0, Lcom/adroidzscpc/bzyi/MainA;->PREFS_NAME:Ljava/lang/String;
  
      invoke-virtual {p0, v0, v4}, Lcom/adroidzscpc/bzyi/MainA;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences;
  
      move-result-object v0
  
      iput-object v0, p0, Lcom/adroidzscpc/bzyi/MainA;->settings:Landroid/content/SharedPreferences;
  
      .line 67
      iget-object v0, p0, Lcom/adroidzscpc/bzyi/MainA;->settings:Landroid/content/SharedPreferences;
  
      const-string v1, "times"
  
      invoke-interface {v0, v1, v4}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
  
      move-result v0
  
      iput-boolean v0, p0, Lcom/adroidzscpc/bzyi/MainA;->times:Z
  
      .line 68
      iget-object v0, p0, Lcom/adroidzscpc/bzyi/MainA;->settings:Landroid/content/SharedPreferences;
  
      const-string v1, "jump"
  
      invoke-interface {v0, v1, v4}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
  
      move-result v0
  
      iput-boolean v0, p0, Lcom/adroidzscpc/bzyi/MainA;->removeadv:Z
  
      .line 70
      invoke-direct {p0}, Lcom/adroidzscpc/bzyi/MainA;->se()V
  
      .line 71
      iget-object v0, p0, Lcom/adroidzscpc/bzyi/MainA;->a:Ljava/lang/String;
  
      const-string v1, "752016e66a64b2e281ba326d4d21fefb"
  
      invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
  
      move-result v0
  
      if-nez v0, :cond_0  --->改此处
  
  向下看到程序结尾:
          goto/16 :goto_0
  .end method
  
  将 if-nez v0, :cond_0改成goto/16 :goto_0,保存,重编译,世界清静了。
  
--------------------------------------------------------------------------------
【经验总结】
  过程中走了两个弯路,费了很多时间:
  一个是搜索问题,是搜中文还是16进制unicode,一个是修改完后没有保存就编译,结果始终不成功,总以为找错了位置。
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2013年04月12日 下午 04:55:14

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
..目前的安卓开源  东西都好破解 嘎嘎  看看先
2013-4-12 17:04
0
雪    币: 507
活跃值: (130)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
(开始)激活,转义为是这样样子    (\u5F00\u59CB)\u6FC0\u6D3B   ,楼主使用工具有误。。
2013-4-12 17:10
0
雪    币: 87
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不能看懂。学习学习。   改之理是个强大的软件啊。
2013-4-12 18:30
0
雪    币: 8178
活跃值: (4131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习了,不错的文章!
2013-4-12 19:54
0
雪    币: 228
活跃值: (75)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
我下的游戏版本跟LZ的不一样?反编译出来的代码也不一样的?


这样对于新手来说学习起来有点困难啊
上传的附件:
2013-5-9 17:27
0
雪    币: 44
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看看先mark
2013-5-16 06:37
0
游客
登录 | 注册 方可回帖
返回
//