2020-06-03更新了:南X周易系列逆向思路-就改一行代码
改完我自己都惊呆了,,竟然这么简单
发帖之后,很多人说看不懂,然后就录制了一个视频发出来,先看帖子,不会操作再看视频,因为看视频就是抄作业了,比较机械,没有自己想的过程。
能有此视频多亏潇洒浪子 ,家里添丁起名可以找他啊。
视频地址:https://send.firefox.com/download/578bb6558c744b3d/#mGTV5EqSfMLirVL081jb5g
用的是firefox send服务,链接有效期7天,过期不补。
Firefox send翻车了,半天链接就挂了
链接:https://pan.baidu.com/s/1w0Kum15-incqBlKKhLj5cw
提取码:u8zo
复制这段内容后打开百度网盘手机App,操作更方便哦软件介绍
x奥软件工作室致力于开发易学应用软件 ,为广大命理研究者、爱好者提供辅助工具。现已开发出八字、紫微、六爻、奇门、天星等一系列软件,此系列软件不但具有专业排盘功能,还有一定的自动分析功能。
软件列表
[ol]
支持系统
[/ol]
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 '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
这篇文章是这么解释的:
整数赋值
[ol]
[/ol]
作者:一江碎月
链接:https://www.jianshu.com/p/bc8df1230c3f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最后就是将每个返回变量前面加上这句赋值语句,类似于这样:
const/4 v11,0x1
return v11
注意!返回那个变量,就位那个变量赋值,否则返回的仍有可能是假值,导致欺骗失败。
仅仅是交流学习经验,遵从版规就不放成品了,放一个样本吧,有老哥想做注册机https://obiu.lanzouj.com/id4odkj