吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 24335|回复: 106
收起左侧

[Android 原创] 人工智能计算器AI Calculator 3.3.0 详细破解思路&教程

  [复制链接]
Ericky 发表于 2015-7-13 15:21
【文章标题】:人工智能计算器AI Calculator 3.3.0 详细破解思路&教程
【文章作者】: Ericky
【作者邮箱】: hy_xiaoyu@126.com
【下载地址】: 附件附上
【保护方式】: 360加固
【作者声明】: 主要记录自己的学习过程!欢迎交流学习
具体的脱壳去看看以前的一些文章,此篇文章主要讲破解部分,壳就略过了
0x2破解
先安装程序,看看错误提示,所谓知己知彼百战不殆正是如此 如图所示:

图片1.png
点击后会弹出授权失败的错误提示。
此时我想应该有很多同学会第一时间想到搜索字符串,既然这样,我们来搜索一下字符串如下,支付失败的字符串我们是搜索不到的,但是能搜到这个:
图片2.png
这样就可以定位到package longbin.helloworld;中的hn
hn类中一共有几个分支 一一来看一下:
分支1  --arg11.what == 111111的分支
[Java] 纯文本查看 复制代码
if(arg11.what == 111111) {
            this.a.d.dismiss();
            if(this.a.f) {
                v0 = this.a.getSharedPreferences("mySharedPreferences", 0).edit();
                v0.putString("alipay_appid", m.e(this.a.p));
                v0.commit();
                v0 = PreferenceManager.getDefaultSharedPreferences(this.a).edit();
                v0.putString("WWxoT2JnPT0=", hj.c(this.a.p));
                v0.putBoolean("isDefaultTheme", true);
                v0.putString("font_size", "24");
                v0.commit();
                this.a.c.setEnabled(false);
                new AlertDialog$Builder(this.a).setTitle(v2).setMessage(v4.getString(2131230970)).setPositiveButton(
                        v4.getString(v9), new ho(this)).create().show();
                return;
            }

            v0 = PreferenceManager.getDefaultSharedPreferences(this.a).edit();
            v0.putBoolean("isDefaultTheme", false);
            v0.putString("font_size", "28");
            v0.commit();
            new AlertDialog$Builder(this.a).setTitle(v2).setMessage(v4.getString(2131230972)).setPositiveButton(
                    v9, new hp(this)).create().show();
            return;
        }
当启动程序后,进入授权页面点击按钮后Handler会处理这个分支
分支2  --arg11.what == 1001的分支
[Java] 纯文本查看 复制代码
 if(arg11.what == 1001) {
            ik v5 = new ik(arg11.obj);
            v5.a();
            if(!v5.d) {
                return;
            }

            if(this.a.p.equals(this.a.q)) {
                v0 = this.a.getSharedPreferences("mySharedPreferences", 0).edit();
                v0.putString("alipay_appid", m.e(this.a.p));
                v0.commit();
                SharedPreferences$Editor v5_1 = PreferenceManager.getDefaultSharedPreferences(this.a)
                        .edit();
                v5_1.putString("WWxoT2JnPT0=", hj.c(this.a.p));
                v5_1.putBoolean("isDefaultTheme", true);
                v5_1.putString("font_size", "24");
                v5_1.commit();
                this.a.c.setEnabled(false);
                int v6 = Integer.valueOf(this.a.h[this.a.o]).intValue();
                int v0_1 = v6 == 4 ? 1 : 0;
                if(v6 == 8) {
                    v0_1 = 2;
                }

                SimpleDateFormat v3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                Date v1 = new Date();
                String v6_1 = v3.format(v1);
                if(this.a.r != null && !"".equals(this.a.r)) {
                    try {
                        v1 = v3.parse(this.a.r);
                    }
                    catch(ParseException v1_1) {
                        v1_1.printStackTrace();
                        v1 = ((Date)v2);
                    }

                    if(v1 != null) {
                        v1.setYear(v0_1 + v1.getYear());
                    }

                    this.a.r = v3.format(v1);
                }
                else {
                    v1.setYear(v0_1 + v1.getYear());
                    this.a.r = v3.format(v1);
                }

                v5_1.putString("V2xob2QyRllTbXhhUmprd1lWY3hiQT09", hj.c(this.a.r));
                v5_1.commit();
                new AlertDialog$Builder(this.a).setTitle(v2).setMessage("支付成功!授权已生效,您现在可使用付费功能了。\n您的付费时间为: "
                         + v6_1 + "\n您的授权期限为: " + this.a.r).setPositiveButton(v4.getString(v9), new 
                        hq(this)).create().show();
                return;
            }

            new AlertDialog$Builder(this.a).setTitle(v2).setMessage(v4.getString(2131230971)).setPositiveButton(
                    v4.getString(v9), new hr(this)).create();
            return;
        }
这个就是付费成功的分支,经过对2个分支的对比,可以很清楚的看到以及知道这几句是功能恢复的关键代码:
图片3.png
其中有个boolthis.a.f就是整个程序的关键。

可以在这里直接爆破给this.a.f一个不等于0的值也能成功。
但是为了防止此值在其他地方也有调用,我们还是继续找源头。
找到PayActivity的authority按钮如下为this.c
图片7.png
这里对this.a.f进行了赋值false,更加肯定了我们的判断
跟入ic类:

图片4.png
如图,起了一个线程id类,继续跟进,在.class final Llongbin/helloworld/id 类增加一句    const v1, 0x1 达到对f的赋值f其实就是IsPayUser.
图片5.png
这里的SendEmptyMessage(111111);也是与前面的分析相呼应。
这样的话,程序就被破解了。最重要的是流程大家都清楚了,不是糊里糊涂的碰对的,这才是提升水平的关键。
0x3 过重启验证
既然重启验证,那就定位到HelloWorldActivity Class吧
一路往下找,到这里就比较可疑了:
图片6.png
为什么说他可以,如果用心的人就可以知道,在前面破解分析的分支2里面的支付成功,也是取了时间的。这里就应该是取时间来判断是不是真正的注册了。或者说是用来验证用户的付费是不是过期了,恰好把一些破解变得不够完美了。

如果你没注意到这个时间,那也不要紧。这2句代码也足够了:
            this.cf.putBoolean("isDefaultTheme", false);
            this.cf.commit();
之前授权成功的时候执行的应该是这样的:
           this.cf.putBoolean("isDefaultTheme", true);
            this.cf.commit();
所以只要绕过这个地方就可以达到过重启验证的目的了。
方式就是启动这个类中的标签。当然 你也可以修改跳转,总之,达到目的就行了。
0x4 去广告
删除androidmanifest.xml中的这几句:
[Java] 纯文本查看 复制代码
      <meta-data android:name="UMENG_APPKEY" android:value="541435b6fd98c50ae307da98"/>
        <meta-data android:name="UMENG_CHANNEL" android:value="baidu"/>
        <meta-data android:name="COOLCHUAN_KEY" android:value="e47a7d143004499ea30fd6a22146b59a"/>

        <service android:name="com.umeng.update.net.DownloadingService" android:process=":DownloadingService"/>
        <activity android:name="com.umeng.update.UpdateDialogActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
至此程序就完美破解了。
总结一下,破解程序应该修改越少越完美,既减少了你的工作量与出错率,又保证了程序功能的完整性。有的程序不难,但是需要你的耐心,认真破解一个比你随意破解多个更能提升你的实力。
2015.7.13
By Ericky


PS:码字插图很辛苦。。希望不要吝惜你手上的热心与CB (*^__^*)



免费评分

参与人数 30威望 +2 吾爱币 +3 热心值 +30 收起 理由
张二黑 + 1 + 1 用心讨论,共获提升!
a133889 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
黄金体验 + 1 + 1 谢谢@Thanks!
流云 + 1 我很赞同!
1090218901 + 1 谢谢@Thanks!
xiao飝 + 1 谢谢@Thanks!
sndncel + 1 如果能来个脱壳教程那就更完美哦。。。。
临轩听雨 + 1 我是来学技术的
梦游枪手 + 1 热心回复!
jyjjf + 1 求脱壳教程
zgqc + 1 鼓励转贴优秀软件安全工具和文档!
左岸麦田 + 1 已答复!
443990635 + 1 谢谢@Thanks!
1254981099 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
1373518468 + 1 楼主头像怎么读。
Pancoes + 1 有人举报你了。
古今第一 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
cxqdly + 1 谢谢@Thanks!
小小微风smile + 1 谢谢@Thanks!
caleb110 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
逍遥枷锁 + 1 谢谢@Thanks!
左还是右 + 1 我很赞同!
cz5420 + 1 我很赞同!
syy6542320 + 1 热心回复!
0909 + 1 我很赞同!
qtfreet00 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
bansjs + 1 已经处理,感谢您对吾爱破解论坛的支持!
tail88 + 1 看不懂也加分!
吐槽户 + 1 我很赞同!
523740194 + 1 我很赞同!

查看全部评分

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

 楼主| Ericky 发表于 2015-7-13 21:24
世事繁华皆成空 发表于 2015-7-13 21:13
可惜了你这篇没有讲到最重要的脱壳部分,缺少了一些精华成份赶快去捣鼓一个新的 ...

有朋友在360打过招呼啦。不好讲~你来讲吧  哈哈
吐槽户 发表于 2015-7-13 15:41
破解程序应该修改越少越完美,既减少了你的工作量与出错率,又保证了程序功能的完整性。有的程序不难,但是需要你的耐心,认真破解一个比你随意破解多个更能提升你的实力


大牛语录
FC丶小组 发表于 2015-7-13 15:27
陌小全 发表于 2015-7-13 15:32
小白路过 给大神支持下
 楼主| Ericky 发表于 2015-7-13 15:35

谢谢支持 (*^__^*) 嘻嘻
 楼主| Ericky 发表于 2015-7-13 15:36
陌小全 发表于 2015-7-13 15:32
小白路过 给大神支持下

谢谢支持 (*^__^*) 嘻嘻
 楼主| Ericky 发表于 2015-7-13 15:37

谢谢支持 (*^__^*) 嘻嘻
FC丶小组 发表于 2015-7-13 15:37
PoJie_小雨 发表于 2015-7-13 15:37
谢谢支持 (*^__^*) 嘻嘻

不用谢。
 楼主| Ericky 发表于 2015-7-13 15:40
 楼主| Ericky 发表于 2015-7-13 15:44
吐槽户 发表于 2015-7-13 15:41
破解程序应该修改越少越完美,既减少了你的工作量与出错率,又保证了程序功能的完整性。有的程序不难,但是 ...

评价太高啦~~承受不起。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-5 21:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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