人工智能计算器AI Calculator 3.3.0 具体破解思路&教程
人工智能计算器AI Calculator 3.3.0 具体破解思路&教程
【文章标题】:人工智能计算器AI Calculator 3.3.0 具体破解思路&教程
【文章作者】: Ericky
【作者邮箱】: hy_xiaoyu@126.com
【下载地址】: 附件附上
【保护方式】: 360加固
【作者声明】: 主要记录自己的学习过程!欢迎交流学习
0x1脱壳
具体的脱壳去看看曾经的一些文章,此篇文章主要讲破解部分,壳就略过了
0x2破解
先安装程序,看看错误提示,所谓知己知彼百战不殆正是如此 如图所看到的:
点击后会弹出授权失败的错误提示。
此时我想应该有非常多同学会第一时间想到搜索字符串,既然这样,我们来搜索一下字符串例如以下,支付失败的字符串我们是搜索不到的,可是能搜到这个:
这样就能够定位到package longbin.helloworld;中的hn类
hn类中一共同拥有几个分支 一一来看一下:
分支1 –arg11.what == 111111的分支
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;
}
当启动程序后,进入授权页面点击button后Handler会处理这个分支
分支2 –arg11.what == 1001的分支
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个分支的对照,能够非常清楚的看到以及知道这几句是功能恢复的关键代码:
当中有个bool值this.a.f就是整个程序的关键。
能够在这里直接爆破给this.a.f 一个不等于0的值也能成功。
可是为了防止此值在其它地方也有调用,我们还是继续找源头。
找到PayActivity的authoritybutton例如以下为this.c:
这里对this.a.f 进行了赋值false。更加肯定了我们的推断
跟入ic类:
如图。起了一个线程id类。继续跟进,在.class final Llongbin/helloworld/id 类添加一句 const v1, 0x1 达到对f的赋值:f事实上就是IsPayUser.
这里的SendEmptyMessage(111111);也是与前面的分析相呼应。
这种话,程序就被破解了。最重要的是流程大家都清楚了。不是糊里糊涂的碰对的。这才是提升水平的关键。
0x3 过重新启动验证
既然重新启动验证。那就定位到HelloWorldActivity Class吧
一路往下找,到这里就比較可疑了:
为什么说他能够,假设用心的人就能够知道,在前面破解分析的分支2里面的支付成功,也是取了时间的。这里就应该是取时间来推断是不是真正的注冊了。或者说是用来验证用户的付费是不是过期了。恰好把一些破解变得不够完美了。
假设你没注意到这个时间。那也不要紧。这2句代码也足够了:
this.cf.putBoolean(“isDefaultTheme”, false);
this.cf.commit();
之前授权成功的时候运行的应该是这种:
this.cf.putBoolean(“isDefaultTheme”, true);
this.cf.commit();
所以仅仅要绕过这个地方就能够达到过重新启动验证的目的了。
方式就是启动这个类中的标签。
当然 你也能够改动跳转。总之,达到目的即可了。
0x4 去广告
删除androidmanifest.xml中的这几句:
<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
人工智能计算器AI Calculator 3.3.0 具体破解思路&教程的更多相关文章
- phpstorm10.0.3破解版安装教程及汉化方法
phpstorm是一个轻量级且便捷的PHP IDE,其旨在提供用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.不但是php开发的利器,前端开发也是毫不逊色的.下面记录php ...
- 第四次工业革命:人工智能(AI)入门
转载自 http://www.infoq.com/cn/articles/the-fourth-industrial-revolution-an-introduction-to-ai "过去 ...
- 国家人工智能(AI)的美好前景
在今年两会期间.李彦宏(Robin Lee,1968-)关于人工智能(AI)"国家优先"的提案,即所谓的"中国大脑"计划.依据何在?为什么? 近几年,世界互联网 ...
- 【第1篇】人工智能(AI)语音测试原理和实践---宣传
前言 本文主要介绍作者关于人工智能(AI)语音测试的各方面知识点和实战技术. 本书共分为9章,第1.2章详细介绍人工智能(AI)语音测试各种知识点和人工智能(AI)语音交互原理:第3.4章介绍人工智 ...
- ansys19.0安装破解教程(图文详解)
ansys19.0是一款非常著名的大型通用有限元分析(FEA)软件.该软件能够与多数计算机辅助设计软件接口,比如Creo, NASTRAN.Algor.I-DEAS.AutoCAD等,并能实现数据的共 ...
- zend studio 9.0.4 破解、汉化和字体颜色及快捷键相关设置
转载:http://www.penglig.com/post-45.html 下载:http://www.geekso.com/component/zendstudio-downloads/ 破解:h ...
- Myeclipse 2015 stable 2.0 完美破解方法
2015-08-21 以前写了一篇<Myeclipse 2015 stable 1.0 完美破解方法>,现 在跟新一下Myeclipse 2015 stable 2.0 破解方法,此方法 ...
- loadrunner11.0 安装破解详解使用教程
loadrunner11.0 安装破解详解使用教程 来源:互联网 作者:佚名 时间:01-21 10:25:34 [大 中 小] 很多朋友下载了loadrunner11但不是很会使用,这里简单介绍下安 ...
- Myeclipse 2015 stable 1.0 完美破解方法(转自 http://yangl.net/2015/07/14/myeclipse_2015stable_1/)
Myeclipse 2015 stable 1.0 完美破解方法 http://yangl.net/2015/07/14/myeclipse_2015stable_1/ 破解包(注册机)下载地址:链接 ...
随机推荐
- 学习推荐《Python神经网络编程》中文版PDF+英文版PDF+源代码
推荐非常适合入门神经网络编程的一本书<Python神经网络编程>,主要是三部分: 介绍神经网络的基本原理和知识:用Python写一个神经网络训练识别手写数字:对识别手写数字的程序的一些优化 ...
- 洛谷—— P2387 魔法森林
题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,…,n,边标号为 1,2,3,…, ...
- android反编译odex文件
关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android- ...
- 11.Axis客户端接收不同参数类型
转自:http://www.guance.com/708.html axis只支持简单类型的返回值.在这里逐一介绍axis的各种返回值接受. 1. axis接受基本类型,如int, string等 引 ...
- 图片的title属性和alt属性的区别
在前端开发中,经常遇到有人在问图片的alt属性和title属性的区别,这是因为很多人对于alt属性和title属性没有彻底搞明白,今天零度给大家分析分析. title属性 首先,来看一下什么是titl ...
- Sql Server 基础语法
来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select ...
- Newtonsoft.json多版本共存
Newtonsoft.json多版本共存 https://blog.csdn.net/dang13579/article/details/72956684 https://blog.csdn.net/ ...
- Django模型三
关联对象操作及多表查询 关联表的数据操作: 一对多: 正向:如果一个模型有外键字段,通过这个模型对外键进行操作叫做正向. 更新: 通过属性赋值 In [1]: from teacher.models ...
- ManagementObjectSearcher 对象获取串口列表
首先,需引用using System.Management; 可先建个枚举类,如下 #region WIN32 API /// <summary> /// 枚举win32 api /// ...
- 03005_SQL查询语句
查询语句,在开发中使用的次数最多,此处使用“zhangwu” 账务表. 1.准备工作 (1)创建财务表: CREATE TABLE zhangwu ( id INT PRIMARY KEY AUTO_ ...