软件介绍
x奥软件工作室致力于开发易学应用软件 ,为广大命理研究者、爱好者提供辅助工具。现已开发出八字、紫微、六爻、奇门、天星等一系列软件,此系列软件不但具有专业排盘功能,还有一定的自动分析功能。
软件列表
- x奥八字7.3安卓版
- x奥大六壬1.3安卓版
- x奥八字合婚2.0安卓版
- x奥河洛理数2.0安卓版
- x奥金口诀1.5安卓版
- x奥六爻3.7安卓版
- x奥面相手相1.0安卓版
- x奥民俗预测2.3安卓版
- x奥姓名专家3.2安卓版
- x奥奇门遁甲2.6安卓版
- x奥三世相法1.0安卓版
- x奥太乙神数1.0安卓版
- x奥七政星命3.3安卓版
- x奥天文占星3.6安卓版
- x奥周易选号3.2安卓版
- x奥择吉黄历3.8安卓版
- x奥阳宅风水3.1安卓版
- x奥玄空择日2.1安卓版
- x奥紫微推命3.7安卓版
支持系统
Android 6.0、7.0、7.1、8.0、8.1、9.0、10.0或更高的简体中文版,屏幕分辨率推荐(1080x1920)或更高的。
逆向工具
MT管理器
逆向过程
使用MT管理器查看原版apk文件
使用MT管理器内的Dex编辑器++打开classes.dex文件
搜索关键词“注册”
在搜索结果中看到一条const-string v0,"已注册”
,二话不说点进去
点击菜单转成Java代码(可读性要高一些)
然后看到
this.m_bFlag = getIntent().getBooleanExtra("reg", false);
.....
.....
if (this.m_bFlag) {
this.EdtSer.setText("已注册");
this.EdtReg.setText("已注册");
} else {
this.EdtSer.setText(main.m_chkSoft.Fsoftsn);
this.EdtReg.setText("");
}
再顺着往下看
String trim = this.EdtReg.getText().toString().trim();
if (trim.length() == 15) {
for (int i = 0; i < 15; i++) {
if (trim.charAt(i) < '0' || trim.charAt(i) > '9') {
Toast.makeText(this, "请输入数字。", 1).show();
return;
}
}
main.m_chkSoft.Fregcode = trim;
if (main.m_chkSoft.ChkNumA() && main.m_chkSoft.ChkNumB() && main.m_chkSoft.ChkNumC()) {
main.m_chkSoft.WriteRegCode(trim);
this.m_bFlag = true;
}
Intent intent = getIntent();
intent.putExtra("reg", this.m_bFlag);
setResult(104, intent);
finish();
return
其中
main.m_chkSoft.ChkNumA() && main.m_chkSoft.ChkNumB() && main.m_chkSoft.ChkNumC()
这句是重点,就是当ChkNumA()、ChkNumB()、ChkNumC()三个函数的值均为真的时候,才会返回“已注册”
然后我们就去找这三个ChkNum就行了。
受by、小夜大佬的MT管理器2修改破解玄奥八字7.2过程启发,我们知道这三个判断都在CSoftReg这个类中
我们浏览这个类,在里面搜索ChkNum,然后会看到如下代码:
# virtual methods
.method public ChkNumA()Z
.......
return v2
:cond_86
add-int/lit8 v3, v3, 0x1
goto :goto_76
:cond_89
return v1
:cond_8a
:goto_8a
return v2
.end method
.method public ChkNumB()Z
......
return v3
:cond_8a
add-int/lit8 v0, v0, 0x1
goto :goto_77
:cond_8d
return v2
:cond_8e
:goto_8e
return v3
.end method
.method public ChkNumC()Z
......
return v3
:cond_a0
add-int/lit8 v2, v2, 0x1
goto :goto_8f
:cond_a3
return v11
:cond_a4
:goto_a4
return v3
.end method
非关键代码我做了省略。可以看到,每个函数后面都跟了3个返回值,就是return v某数字这些。因此只要让返回的值都为真,就能欺骗软件达到注册的目的,因此,我们在每条返回语句的前面,为v开头的变量重新赋值,让其结果为真,这样,无论前面的代码如何判断、检验,最后要返回时始终返回我们重设的“真”值。
赋值语句也很简单
const/4 v某,0x1
这篇文章是这么解释的:
整数赋值
- const/4 vx,lit4 : 将 4 位的常量赋值给 vx。也就是说 vx 的最大值是 15。
- const/16 vx,lit16:将 16 位的常量赋值给 vx。
- const-wide/16 vx, lit16 表示将一个 16 位的常量存储到 vx 与 vx+1 两个寄存器中 —— 即一个 long 类型的数据。
- const vx, lit32:将 32 位的常量赋值给 vx。
- const-wide/32 vx, lit32 表示将一个 32 位的常量存储到 vx 与 vx+1 两个寄存器中 —— 即一个 long 类型的数据。
- const-wide vx, lit64 : 将一个 64 位的数据存储到 vx 与 vx+1 两个寄存器中
- / 后的数值表示数值本身是多少位,由 const 与 const-wide 区分变量占多少位。
作者:一江碎月
链接:https://www.jianshu.com/p/bc8df1230c3f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最后就是将每个返回变量前面加上这句赋值语句,类似于这样:
const/4 v11,0x1
return v11
注意!返回那个变量,就位那个变量赋值,否则返回的仍有可能是假值,导致欺骗失败。
仅仅是交流学习经验,遵从版规就不放成品了,放一个样本吧,有老哥想做注册机https://obiu.lanzouj.com/id4odkj