【文章标题】: 某安卓软件免积分破解
【文章作者】: 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期)