《教我兄弟学Android逆向01 编写第一个Android程序》
本帖最后由 会飞的丑小鸭 于 2018-7-19 10:19 编辑前言
之所以准备写这系列逆向的教程是因为有一些同学私信我说自己想学习Android逆向但是不知道怎么去学习 包括自己身边的一些计算机专业的同学 在大学里面老师讲的那些东西要么是自己不感兴趣 要么是自己上课不学习 大学美好的时光都浪费在了陪同学一起去网吧打游戏上面了 反正大学几年过去了 自己也没有学到一些有用的知识 现在他们即将面临着毕业要出去找工作 但是自己什么都不会 而且计算机相关的工作又分为好多种 自己也不知道怎么去选择以后从事的工作 所以就会感到很迷茫 网上教程是找到一大堆 大多讲的都很杂 看了都看不懂 云里雾里的感觉 也有不少同学刚接触Android逆向或者说也学习了一段时间的逆向了 但是还是不知道自己学的啥 感到很迷茫 然后一些同学就找到了我 想跟我学习Android逆向让我教他们一些逆向相关的知识 当然其中也有我的一个好兄弟-威 威就是这样一个即将面临毕业 对于未来很迷茫 想通过学习Android逆向知识找到未来方向的一个人 但是他之前从来没有接触过逆向 完完全全小白一个 现在他的目的只有一个 从现在开始跟我学习Android逆向 学习三到四个月 也就是到明年二月份之前找到一份Android逆向相关的工作 由于他和我不是在同一所大学 我没法通过面对面方式的去教他逆向 所以就有了《教我兄弟学Android逆向》系列教程的出现 从今天开始我会通过写教程的方式手把手的教他学习逆向 教程也会放到吾爱上面让更多想学习逆向的同学们得以练习 教程会通过由浅入深的方式给大家呈现 那么想学习逆向当然是离不开正向编程的相关知识的 于是第一篇教程《教我兄弟学Android逆向01 编写第一个Android程序》就这样出现了
下面开始今天的课程:
一.编写第一个Android程序
1 在自己电脑上下载Android Studio程序 下载地址:http://www.android-studio.org/index.php/download/hisversion 这里我用的是2.2.3版本 安装过程自己百度
2 安装完成后打开程序按照以下截图顺序 填写和选择对应的内容 一路Next最后点Finsh 建立完成第一个Android项目(详细的不介绍 不懂的百度"AS编写第一个Android项目")
3 进入到主程序 这里选择Project 然后点击MyApplication\app\src\main\res\layout 目录下的activity_main.xml
4.把拖拉框上面的Textview,Plain Test ,Button控件拖拉到屏幕上来 通过更改右侧对应的ID和text内容控制控件的属性 完成如图所示
这里拖拉了两个Textview,两个Plain Test和一个Button控件
5.点开MainActivity页面 编写相应的Android代码
package hfdcxy.com.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText Name; //定义Plain Test控件第一个输入框的名字
EditText Pass; //定义Plain Test控件第二个输入框的名字
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Name = (EditText) findViewById(R.id.TEXT_NAME); //通过findViewById找到输入框控件对应的id并给它起一个名字
Pass = (EditText) findViewById(R.id.TEST_PASS);//通过findViewById找到输入框控件对应的id并给它起一个名字
Button Login = (Button) findViewById(R.id.BTN_Login);//通过findViewById找到按钮控件对应的id并给它起一个名字
Login.setOnClickListener(new View.OnClickListener() { //监听有没有点击按钮控件 如果点击了就会执行onClick函数
@Override
public void onClick(View view) {
check(Name.getText().toString().trim(),Pass.getText().toString().trim()); //调用check函数
}
});
}
public void check(String name,String pass) //自定义函数check 这里用来检查用户名和密码是否是hfdcxy和1234
{
if(name.equals("hfdcxy")&&pass.equals("1234"))
{
Toast.makeText(MainActivity.this,"登录成功", Toast.LENGTH_SHORT).show();//弹框
}
else
Toast.makeText(MainActivity.this,"登录失败", Toast.LENGTH_SHORT).show();//弹框
}
}
6.点击Build 点击Build Apk 生成第一个Android程序
7 点击Build Apk 完成后右上角会出现 Show in Explorer 点击它 然后打开命令行 输入命令adb install 把app-debug.apk拉到命令行中完成后点回车 我们编译出的apk程序就成功安装到手机上了
二 . 总结:本篇文章通过手把手的方式带大家走近Android的世界目的是为了以后的反编译做准备 想学Android逆向必须要懂的正向编程 那么这篇文章也是一个抛砖引玉的过程 过程讲的可能不这么的详细 有不懂的地方大家自行百度 尝试着自己去编写一些android的小程序 那么本节课也给大家留了一个作业:用AS编写一个包含姓名 年龄 生日 邮箱 兴趣爱好的用户注册页面 要求:点击注册按钮会把注册的信息显示在另一个页面上 那么下节课我将教大家怎么去破解我们所编写的这个小程序
下一篇 《教我兄弟学Android逆向02破解第一个Android程序》
下面的附件是本节课的Demo
链接:https://pan.baidu.com/s/1o9FaUYQ 密码:xv14
此教程不适合零基础,如果录制视频会好点 本帖最后由 与谁共 于 2017-11-16 23:04 编辑
建立完工程,打开activity_main.xml后,弹出了异常如下,同时找不到text view,也无法把左面的东西拖到右面:
java.lang.NoClassDefFoundError: Could not initialize class android.support.v7.internal.widget.ActionBarOverlayLayout
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:413)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:105)
at com.android.tools.idea.rendering.LayoutlibCallback.loadView(LayoutlibCallback.java:177)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:214)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:142)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at com.android.layoutlib.bridge.bars.BridgeActionBar.<init>(BridgeActionBar.java:84)
at com.android.layoutlib.bridge.bars.AppCompatActionBar.<init>(AppCompatActionBar.java:56)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.createActionBar(RenderSessionImpl.java:1691)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:362)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:321)
at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:350)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:497)
at com.android.tools.idea.rendering.RenderTask$2.compute(RenderTask.java:485)
at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:894)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:485)
at com.android.tools.idea.rendering.RenderTask.render(RenderTask.java:590)
at com.intellij.android.designer.designSurface.AndroidDesignerEditorPanel$6.run(AndroidDesignerEditorPanel.java:480)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
at com.intellij.util.Alarm$Request$1.run(Alarm.java:351)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
这个问题解决了,是Android Studio版本的问题,默认装的是1.x的,装2.3的好了
coolicer 发表于 2017-9-30 14:38
会出下去吗?
会的 以后还会有很多教程要发 阅读置顶的总版规 温柔的一哥 发表于 2017-10-28 01:36
兄弟你好,之前我在网上找到一个叫“游人客栈安卓逆向基础教程”的安卓逆向破解教程,想必你应该知道吧。我 ...
游人客栈安卓逆向教程我没有看过 对他的教程不了解 想学习的话建议这些教程你都去了解一下 每一篇教程都有各自的讲解方式 根据你的理解能力去选择你需要的教程 建议教程都看一下 zlaojun 发表于 2017-10-25 08:45
留言马克一下 世上无难事,只要肯放弃有时候你不努力一把,你都不知道什么叫绝望
是啊 学习是一个痛并且虐心的过程 楼主将会成为吾爱以后很多大神的导师啊😄 会出下去吗? 继续出下去吧~~~~ 为楼主打call,顺便学习一个 会飞的丑小鸭 发表于 2017-9-30 14:45
会的 以后还会有很多教程要发
已经做好第一个了{:1_918:} 继续哦不要停哈哈 感谢发布原创作品,吾爱破解论坛因你更精彩! 呵呵,也做了一个{:301_1004:} 前排留名学习