吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23271|回复: 45
收起左侧

[Android 原创] 超强call3另类破解方法

  [复制链接]
落华无痕 发表于 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>


保存,然后重新打开软件即可。

点评

非常鼓励不同的解决方法!  发表于 2014-4-27 21:22

免费评分

参与人数 2热心值 +2 收起 理由
inn520 + 1 谢谢@Thanks!让完全不懂JAVA语言的小白能.
fook123 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

aq8725 发表于 2014-5-7 23:18 来自手机
.line 32
    new-instance v0, Landroid/app/ProgressDialog;    #这个为什么是新建一个ProgressDialog实例
aq8725 发表于 2014-5-7 23:17 来自手机
.line 32
    new-instance v0, Landroid/app/ProgressDialog;    #这个为什么是新建一个ProgressDialog实例
头像被屏蔽
刘宏伟大人丶 发表于 2014-4-27 13:38
 楼主| 落华无痕 发表于 2014-4-27 13:42
本帖最后由 落华无痕 于 2014-4-27 14:09 编辑

本想继续写注册码算法分析的。结果发现帖子超强call3正式版 的简单分析帖子里,已经有不少大牛回复。这里就不继续献丑了。
23186579 发表于 2014-4-27 13:43
大牛威武. 学习了
血染de枫彩 发表于 2014-4-27 13:48
学习啦,感谢分享经验
时光。 发表于 2014-4-27 14:38
感谢分享..  看不懂
头像被屏蔽
sos521qqq 发表于 2014-4-27 15:40 来自手机
提示: 作者被禁止或删除 内容自动屏蔽
头像被屏蔽
sos521qqq 发表于 2014-4-27 15:56 来自手机
提示: 作者被禁止或删除 内容自动屏蔽
MMAKI 发表于 2014-4-27 23:08 来自手机
先回复再慢慢看
1002217709 发表于 2014-4-28 00:32
lz是不是天天逛安卓巴士啊这么精通
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表