安卓逆向入门
好久不写blog, 感觉最近好懒, 喵喵喵, 我也不知道最近干什么去了
基础知识
AndroidManifest.xml
Application类
生命周期是整个app的生命周期<manifest ...> <uses-sdk ... /> <uses-permission ... /> <application ...> <activity ...> ... </activity> </application> </manifest>
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>
特殊的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就有反应…模拟器真是…
出现问题
[Errno 104] Connection reset by peer
这个在网上查找是某个app是debuggable=false
的原因…好像记得是不是有一种不需要一个一个应用更改的方法, 好像是…
找到一篇blog 有介绍具体方法找到一份资料是叫
安卓动态调试七种武器
HOOK
HOOK有
- JAVA API HOOK
- 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, 哈哈哈哈