好友
阅读权限25
听众
最后登录1970-1-1
|
落华无痕
发表于 2014-4-27 13:36
本帖最后由 淡然出尘 于 2015-2-3 19:22 编辑
破解方法1
首先反编译APK。
查看AndroidManifest.xml,如下
[Java] 纯文本查看 复制代码 <?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.call3">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">
<activity android:name=".VerifyActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"/>
<service android:name=".PhoneService"/>
</application>
</manifest>
从上得知com.call3.VerifyActivity为主Activity。
打开VerifyActivity.smali,查找onCreate,如下(Unicode码已转中文,已加部分注释):
[Java] 纯文本查看 复制代码 .method protected onCreate(Landroid/os/Bundle;)V
.locals 4 #使用寄存器为v0-v3
.prologue #代码开始
const/4 v3, 0x0 #参数,作用未知
.line 30
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
.line 31
const v0, 0x7f030001 #R.layout.activity_verify
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->setContentView(I)V #显示登录验证界面
.line 32
new-instance v0, Landroid/app/ProgressDialog; #新建一个ProgressDialog实例
invoke-direct {v0, p0}, Landroid/app/ProgressDialog;-><init>(Landroid/content/Context;)V #初始化ProgressDialog实例
iput-object v0, p0, Lcom/call3/VerifyActivity;->g:Landroid/app/ProgressDialog; #保存ProgressDialog实例的引用
.line 33
iget-object v0, p0, Lcom/call3/VerifyActivity;->g:Landroid/app/ProgressDialog; #取得ProgressDialog实例的引用
invoke-virtual {v0, v3}, Landroid/app/ProgressDialog;->setCanceledOnTouchOutside(Z)V
#给Dialog设置触摸事件处理,由v3=0知,按对话框以外的地方不起作用。
.line 34
iget-object v0, p0, Lcom/call3/VerifyActivity;->g:Landroid/app/ProgressDialog; #取得ProgressDialog实例的引用
const-string v1, "正在验证,请稍候..."
invoke-virtual {v0, v1}, Landroid/app/ProgressDialog;->setMessage(Ljava/lang/CharSequence;)V #提示信息"正在验证,请稍候..."。
.line 35
const v0, 0x7f070012 #tv_imei
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->findViewById(I)Landroid/view/View;
#寻找在xml中定义为0x7f070012 的对象
move-result-object v0 #tv_imei
check-cast v0, Landroid/widget/TextView; #将 tv_imei 转成 TextView 类型的实例
iput-object v0, p0, Lcom/call3/VerifyActivity;->c:Landroid/widget/TextView; #保存 tv_imei 实例的引用
.line 36
const v0, 0x7f070014 #btn_verify
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->findViewById(I)Landroid/view/View;
move-result-object v0 #btn_verify
check-cast v0, Landroid/widget/Button; 将 btn_verify 转成 Button 类型的实例
iput-object v0, p0, Lcom/call3/VerifyActivity;->a:Landroid/widget/Button; #保存 btn_verify 实例的引用
.line 37
const v0, 0x7f070015 #btn_close
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->findViewById(I)Landroid/view/View;
move-result-object v0 #btn_close
check-cast v0, Landroid/widget/Button;
iput-object v0, p0, Lcom/call3/VerifyActivity;->b:Landroid/widget/Button; #保存 btn_close 实例的引用
.line 38
const v0, 0x7f070013 #et_pwd
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->findViewById(I)Landroid/view/View;
move-result-object v0
check-cast v0, Landroid/widget/EditText; #将 et_pwd 转成 EditText 类型的实例
iput-object v0, p0, Lcom/call3/VerifyActivity;->d:Landroid/widget/EditText; #保存 et_pwd 实例的引用
.line 39
iget-object v0, p0, Lcom/call3/VerifyActivity;->a:Landroid/widget/Button; #取得 btn_verify 实例的引用,即按钮“验证”
invoke-virtual {v0, p0}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V #设置“验证”按钮点击事件监听器,由当前类的onClick方法处理点击事件。
.line 40
iget-object v0, p0, Lcom/call3/VerifyActivity;->b:Landroid/widget/Button; #取得 btn_close 实例的引用,即按钮“关闭”
invoke-virtual {v0, p0}, Landroid/widget/Button;->setOnClickListener(Landroid/view/View$OnClickListener;)V #设置“关闭”按钮点击事件监听器,由当前类的onClick方法处理点击事件。
.line 41
invoke-static {p0}, Landroid/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences; #获取一个SharedPreferences实例
move-result-object v0
iput-object v0, p0, Lcom/call3/VerifyActivity;->e:Landroid/content/SharedPreferences; #保存SharedPreferences实例的引用
.line 42
const-string v0, "phone"
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/telephony/TelephonyManager;
iput-object v0, p0, Lcom/call3/VerifyActivity;->f:Landroid/telephony/TelephonyManager;
.line 43
iget-object v0, p0, Lcom/call3/VerifyActivity;->f:Landroid/telephony/TelephonyManager;
invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String; #获取IMEI
move-result-object v0
.line 44
iget-object v1, p0, Lcom/call3/VerifyActivity;->c:Landroid/widget/TextView; #取得 tv_imei 实例的引用
invoke-virtual {v0}, Ljava/lang/String;->length()I #计算IMEI的长度
move-result v2
add-int/lit8 v2, v2, -0x6 #v2=v2-6,由IMEI默认长度为15知v2=9
invoke-virtual {v0, v2}, Ljava/lang/String;->substring(I)Ljava/lang/String; #截取掉IMEI的前9位
move-result-object v0
invoke-virtual {v1, v0}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V #显示截取后的IMEI剩余的后6位
.line 45
iget-object v0, p0, Lcom/call3/VerifyActivity;->e:Landroid/content/SharedPreferences; #取得SharedPreferences实例的引用
const-string v1, "isRegistered"
invoke-interface {v0, v1, v3}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z #获取isRegistered的值(布尔值)
move-result v0
if-eqz v0, :cond_0
#如果v0为假(0x0)就跳转到:cond_0标号处,否则往下执行。即判断软件是否已注册,如果已注册则显示主功能界面,否则停留在登录验证界面
.line 47
new-instance v0, Landroid/content/Intent; #新建一个Intent实例
const-class v1, Lcom/call3/MainActivity; #存入MainActivity类的引用
invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V #初始化Intent实例
.line 48
invoke-virtual {p0, v0}, Lcom/call3/VerifyActivity;->startActivity(Landroid/content/Intent;)V
#调用MainActivity
.line 50
:cond_0
return-void #方法返回
.end method
根据上面的分析,可以做的爆破方法有:
1.删除掉“if-eqz v0, :cond_0”。
2.修改“if-eqz v0, :cond_0”上面的“move-result v0”,改为“const/4 v0, 0x1”。或不修改,只在“move-result v0”下面添加“const/4 v0, 0x1”
3.删除掉“return-void”上面的“:cond_0”,同时在“if-eqz v0, :cond_0”下面添加“:cond_0”。
以上只提供几种爆破方法,具体修改方法大家自个决定。
根据上面的分析,还可以想到两种破解方法。
破解方法2
修改AndroidManifest.xml,把".VerifyActivity" 和".MainActivity"的位置互换,保存并重新编译软件。
破解方法3
用re管理器打开/data/data/com.call3/,然后新建shared_prefs文件夹,进入shared_prefs文件夹,新建com.call3_preferences.xml,内容为:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="isRegistered" value="true" />
</map>
保存,然后重新打开软件即可。
|
免费评分
-
查看全部评分
|