参考资料:
1、15PB安卓学习资料
2、《教我兄弟学Android逆向01 编写第一个Android程序》
1、Android程序创建详解
1、打开Android Studio界面如下

2、选择对应的Activity

3、填写包名、类名、路径名(默认即可)

4、Android项目生成的文件介绍


5、清单文件介绍
清单:AndroidManifest.xml
功能:四大组件和权限外,还有一个重要的东西,就是程序的入口

在入口类执行之前,其实还会执行一个类的代码就是 Application 类中的代码 Application 类的 attachBaseContext 是一个 app 最早执行的函数代码。其次是这个类的和 onCreate 函数。之后才是 Activity。
6、布局文件介绍

2、创建一个CrackMe程序
我们打算创建一个CrackMe程序逻辑大致如下:输入正确的账号和密码点击确定则提示成功、否则失败

我们需要控件如下:
两个TextView分别是:账号、密码
两个Plain Test分别是:账号、密码的输入框
一个Button确认按钮

然后编写对应的逻辑代码
| packagecom.crackme.myapplication; importandroidx.appcompat.app.AppCompatActivity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; importandroid.widget.EditText; importandroid.widget.Toast; publicclassMainActivityextendsAppCompatActivity{ EditTextName;//定义PlainTest控件第一个输入框的名字 EditTextPass;//定义PlainTest控件第二个输入框的名字 @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Name=(EditText)findViewById(R.id.Name_editText);//通过findViewById找到输入框控件对应的id并给它起一个名字 Pass=(EditText)findViewById(R.id.Password_editText);//通过findViewById找到输入框控件对应的id并给它起一个名字 ButtonLogin=(Button)findViewById(R.id.onOk);//通过findViewById找到按钮控件对应的id并给它起一个名字 Login.setOnClickListener(newView.OnClickListener(){//监听有没有点击按钮控件如果点击了就会执行onClick函数 @Override publicvoidonClick(Viewview){ check(Name.getText().toString().trim(),Pass.getText().toString().trim());//调用check函数 } }); } publicvoidcheck(Stringname,Stringpass)//自定义函数check这里用来检查用户名和密码是否是hfdcxy和1234 { if(name.equals("pediy")&&pass.equals("1234")) { Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();//弹框 } else Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show();//弹框 } } |


3、解析一个CrackMe程序
APK文件其实是压缩包格式,可以用各种解压缩文件打开。核心就是分析classes.dex文件

直接使用集成工具AndroidKiller反汇编整个apk

浅谈我们的切入点:
1、我们可以从activity_main.xml资源文件和strings.xml字符串文件入手
源码对照

查询这些敏感ID的全局引用,例如:2131165304我们全局查找

发现这ID对应的是按钮,其他以此类推

2、入口地址从onCreate开始看
核心部分是check函数,只要让if成立即可,也就是说即使我们输入不对的账号和密码也提示成功

我们切换回smali汇编修改
方法1:直接注释if-eqz v0, :cond_0两条汇编代码,使其永远成立

现在if判断注释掉了,无论输入什么都提示成功

方法2:将if-eqz v0, :cond_0命令修改成if-nez 使其逻辑取反,不成立则提示成功。

只要输入非正确密码都提示成功

Android编程入门:创建与破解CrackMe程序
这篇博客介绍了Android程序的创建步骤,包括使用Android Studio新建项目、理解AndroidManifest.xml和布局文件。接着,作者展示了如何构建一个简单的CrackMe程序,该程序要求输入特定的账号和密码来验证。最后,博主探讨了如何解析APK文件,通过反汇编和修改代码来破解CrackMe,实现绕过登录验证的目的。主要涉及Android开发、逆向工程和应用安全。
2365

被折叠的 条评论
为什么被折叠?



