安卓逆向入门

Author Avatar
Aryb1n 11月 05, 2017

好久不写blog, 感觉最近好懒, 喵喵喵, 我也不知道最近干什么去了

基础知识

AndroidManifest.xml

  1. Application类
    生命周期是整个app的生命周期

    <manifest ...>
     <uses-sdk ... />
     <uses-permission ... />
     <application ...>
         <activity ...>
             ...
         </activity>
     </application>
    </manifest>
    
  2. MainActivity类
    第一个启动的Activity
    类名不一定叫这个, 但他的intent-filter很重要, 比如我们可以叫FirstActivity

    <activity 
     android:name=".FirstActivity"
     android:label="This is my First Activity">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <category android:name="android.intent.category.LAUNCHER" />
     </intent-filter>
    </activity>
    
  3. 特殊的permission

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

四大组件

Activity
Service
Broadcast Receiver
Content Provider

其他小知识

arm平台的话的话, so里默认使用的是thumb, 不是ARM

反编译 & 反汇编

在一本书上看到的, 在android设备上的
反汇编指的是针对NDK产生的so文件进行逆向, 得到汇编
反编译指的是逆向dex文件, 得到所用语言的源代码(smali???)
我怎么感觉怪怪的….

安卓一个项目下, lib文件夹下可能有多个不同名的文件夹里有同名的so

lib
├── arm64-v8a
│   └── libtest.so
├── armeabi
│   └── libtest.so
├── armeabi-v7a
│   └── libtest.so
├── mips
│   └── libtest.so
└── mips64
    └── libtest.so

这个时候, 应该看哪个…有的时候还有x86..而且内容还不太一样
自己写个NDK的项目, 先…

http://blog.csdn.net/weijinqian0/article/details/78182307
https://zhuanlan.zhihu.com/p/21302804
http://www.jianshu.com/p/cb05698a1968
其中这个最后一篇里讲到

当一个应用安装在设备上,只有该设备支持的CPU架构对应的.so文件会被安装。在x86设备上,libs/x86目录中如果存在.so文件的话,会被安装,如果不存在,则会选择armeabi-v7a中的.so文件,如果也不存在,则选择armeabi目录中的.so文件(因为x86设备也支持armeabi-v7a和armeabi)

反编译后得到形如MainActivity$1.smali, 是什么意思

感觉有的逆向根据会产生, 有的会是另一种表现形式
一般是内部类… 比如

Button botton = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        ...
    }
});

这里在OnClickListener接口这里其实有一个基于接口实现的匿名内部类, java学的奇菜…然后补一补

所以这个MainActivity$1.smali里的类会有OnClick方法什么的

有的时候会有dex反编译失败的时候…

这个时候该怎么办QAQ, md我也不知道啊

动态调试

准备把以前的小米MAX拿来做题了….
真机的话, 直接usb连上去, 开启usb调试, 然后adb就有反应…模拟器真是…

  1. 出现问题 [Errno 104] Connection reset by peer
    这个在网上查找是某个app是debuggable=false的原因…好像记得是不是有一种不需要一个一个应用更改的方法, 好像是…
    找到一篇blog 有介绍具体方法

  2. 找到一份资料是叫安卓动态调试七种武器

HOOK

HOOK有

  1. JAVA API HOOK
  2. Native API HOOK

如果对Zygote进行HOOK, 那就相当于对所以app都进行了HOOK, 喵喵喵
其实所有app都只直接与Zygote有关, 所以相当于安卓程序都是比底下的Linux程序高一层, 对吧, 来自菜鸡的无奈…

xposed 原理

通过替换/system/bin/app_process来控制Zygote, 使得app_process启动的过程中加载XposedBridge.jar, 从而完成劫持

先睡觉, 命要紧
刚home以已经100%, 然后把swap格掉了, 给了/home, 突然多了8G, 哈哈哈哈