安卓逆向smail破解小试-->注册码破解
安卓逆向smail破解小试-->注册码破解
长期搞web渗透的朋友,APP业务逻辑测试的朋友,不妨关注一下java安卓逆向破解类的东东
首先要明白这个概念,这在逆向破解中是非常常见的
"if-eq vA, vB, :cond_**" 如果vA等于vB则跳转到:cond_**
"if-ne vA, vB, :cond_**" 如果vA不等于vB则跳转
到:cond_**
"if-lt vA, vB, :cond_**" 如果vA小于vB则跳转到:cond_**
"if-ge vA, vB, :cond_**" 如果vA大于等于vB则跳转
到:cond_**
"if-gt vA, vB, :cond_**" 如果vA大于vB则跳转到:cond_**
"if-le vA, vB, :cond_**" 如果vA小于等于vB则跳转
到:cond_**
"if-eqz vA, :cond_**" 如果vA等于0则跳转到:cond_**
"if-nez vA, :cond_**" 如果vA不等于0则跳转到:cond_**
"if-ltz vA, :cond_**" 如果vA小于0则跳转到:cond_**
if-eqz:跳转 -->意思是如果vA等于vB跳转到cond_*执行相应的代码
if-nez: 意思是如果vA不等于vB跳转到cond_*执行相应的代码
首先下载一款软件进行测试:玄奥河洛理数
http://www.downyi.com/downinfo/262063.html
载入夜神模拟器
安装
这里提示需要注册
输入123456
我们就想办法,逆向一下,是否能破解他的这个功能
常见破解工具如apktool
命令:>apktool_2.6.0.jar d apk名称
jadx-gui反编译工具
AndroidKiller逆向分析工具
这些工具能帮忙我们破解一些工具的使用功能
具体如何破解呢
可以根据提示,来进行载入搜索关键字
载入asm字节信息也可以使用这种方法
我们首先发现一个关键字
请输入注册号
这里作为一个关键
首先打开jadx,载入app
来搜索一下关键字:请输入注册号
定位到这里,发现这里有一个请输入注册号,其实
Toast.makeText(this, "请输入注册号。", 1).show();
这一句,实际上有点像messagebox.show(""):
或者system.out.println("");
我们需要先研究一下这个逻辑
public void onClick(View v) {
if (v == this.BtoClose) {
setResult(0);
finish();
这个有一个onClick事件
main.m_chkSoft.Fregcode = stmp;
if (main.m_chkSoft.ChkNumA() && main.m_chkSoft.ChkNumB() && main.m_chkSoft.ChkNumC()) {
main.m_chkSoft.WriteRegCode(stmp);
this.m_bFlag = true;
}
Intent iet = getIntent();
iet.putExtra("reg", this.m_bFlag);
setResult(main.Ret_RegOk, iet);
finish();
return;
这里有一个判断
if (main.m_chkSoft.ChkNumA() && main.m_chkSoft.ChkNumB() && main.m_chkSoft.ChkNumC()) {
关键点是 this.m_bFlag = true;
ChkNumA()
ChkNumB()
ChkNumC()
如果条件满足那就执行跳转
再看看前面
if (stmp.length() == 15) {
for (int i = 0; i < 15; i++) {
if (stmp.charAt(i) < '0' || stmp.charAt(i) > '9') {
Toast.makeText(this, "请输入数字。", 1).show();
return;
}
}
这里就是一个for循环,判断用户输入的值,类型是数字
m_bFlag应该是一个关键
否则执行错误信息
这种分析就有点像我们在挖web渗透测试过程中,if a=0 ;则执行修改密码的操作,如果a!=0,那就弹出错误信息,不允许执行该类操作
注意这里
if (this.m_bFlag) {
this.EdtSer.setText("已注册");
this.EdtReg.setText("已注册");
} else {
this.EdtSer.setText(main.m_chkSoft.Fsoftsn);
this.EdtReg.setText("");
}
如果m_bFlag条件成立,已注册
否则不成立,错误信息
我们需要去找这个
m_bFlag
或者
已注册
首先打开AndroidKiller
搜索m_bFlag
找到一处
定位到m_bFlag,我们发现这里
iget-boolean v4, p0, LMy/XuanAo/HeLuoYi/SoftRegDlg;->m_bFlag:Z
if-eqz v4, :cond_4
.line 110
如果 if-eqz v4 等于v4,就跳转到cond_4
而cond_4就在这里
:cond_4
iget-object v4, p0, LMy/XuanAo/HeLuoYi/SoftRegDlg;->EdtReg:Landroid/widget/EditText;
invoke-virtual {v4}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
move-result-object v4
跳转到cond_4,这里会执行一个getText()的操作
我们看一下代码是否是对应的
我们再来搜索一下
已注册
转成unicode
定位一下
其实这两句话对应的就是
this.EdtSer.setText("已注册");
this.EdtReg.setText("已注册");
只不过转成了unicode
\
那么我们注意这里
if-eqz v0, :cond_0
如果如果vA等于vB则跳转到:cond_**
是这个意思
而cond_0在哪里呢
我们让他不等于vA不等于vB,也就是if-nez 也就是反方向,那么就直接已注册了啊!
需要把
if-eqz v0, :cond_0
改成
if-nez v0, :cond_0
然后保存一下
编译一下
我们再来测试一下,是否能够绕过注册码
载入之后发现是成功了,显示已注册
<< 上一篇
下一篇 >>