安卓逆向入门(1)

1.Android APK文件

这里写图片描述

这里写图片描述
META-INF目录,签名文件,包括公司信息,文件的HASH值,可以用来辨别app的真伪;
res目录,资源信息,包括图片,xml文件(包括布局文件,字符串,风格样式等)
AndroidMainfest.xml清单文件,包括APK包名,四大组件的一些声明定义,权限,程序入口等
Classes.dex安卓可执行文件,包括java的类信息,方法信息,字段信息,虚拟机指令等
dex文件的生成大概流程:java源文件->class文件->dex文件
resources.arsc资源序号文件,包括资源里的所有ID,名称,资源id对应文件是R.class

见下图:
(一定要编译完之后才能看见如下的图:)
这里写图片描述

查看apk的两种途径:
1.在output里面的apk下面的Debug文件里面
2.build->build apk
这里写图片描述
这里写图片描述

从上图可以看出,Lib目录,扩展名是.so,包括C++代码,有各种平台,比如x86,arm
在arm体系中,每一条指令不是2字节就是4字节

如何创建Assets文件(自定义资源)

这里写图片描述
注意:这里自定义资源的名称只能起为assets,(因为对于安卓的系统API它只识别以assets为名字的自定义资源)
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
android 项目里面.gradle,idea,build,gradle这几个文件夹可以删掉.

Android APK的入口函数是什么

默认情况下是MainActivity中的oncreate()函数;
但是清单文件中application节点可以添加android:name属性,指定继承自application的类,用于初始化整个app的全局信息,继承自application的类有两个重写函数会执行,这两个函数就是程序最早执行的函数.
1.attachBaseContext
2.OnCreate
所以一般一个app最早执行的函数是application的类中的attachBaseContext函数,一般apk加固之后,都会自定义application类,并且重写其中的attachBaseContext函数或onCreate函数,并且声明为native类型的函数,

进行栈回溯时候遇到的几个问题:

1.模拟器启动问题:
这里写图片描述
如果在这个窗口没有看见模拟器的图标,说明模拟器没有启动,需要启动模拟器
这里写图片描述
这里写图片描述
如果启动之后还没有效果,那么则需要把模拟器删掉重新创建,此时不需要重新下载了,
这里写图片描述
这里写图片描述
2.怎么进行栈回溯
这里写图片描述
这里写图片描述

清单文件

    <application
        android:name=".Myapp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Myapp类:
package com.example.bluelesson.myhelloworld;


import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;

public class Myapp extends Application {
    public Myapp() {
    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}
MainActivity类:(默认的)
package com.example.bluelesson.myhelloworld;


import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;

public class Myapp extends Application {
    public Myapp() {
    }

    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(newBase);
    }

    @Override
    public void onCreate() {
        super.onCreate();
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值