文章目录
- 一、前言
- 二、实现逻辑
- 1、安装ratel手机端app
- 2、使⽤电脑端进⾏感染目标app
- 3、开发⼀个平头哥插件
一、前言
平头哥(ratel)是⼀个Android逆向分析⼯具套件,他提供⼀系列渐进式app逆向分析⼯具。同时平头哥也是⼀个app⼆次开发的沙箱环境,⽀持在免root环境下hook和重定义app功能。
项⽬地址: https://github.com/virjarRatel
二、实现逻辑
1、安装ratel手机端app
主要作用:可以方便查看app是否被感染成功
链接:https://pan.baidu.com/s/1eU2cEgW4pHOB08gcqDZDNQ 提取码:h7oo
安装效果图:
2、使⽤电脑端进⾏感染目标app
下载感染引擎:
链接:https://pan.baidu.com/s/13HqPPdqVL9LPrYFOHD-UBA 提取码:n3nj
⽬录结构
.
├── ratel.bat # windows上⽤来感染的脚本
├── ratel.sh # linux/mac 上⽤来感染的脚本
├── ratelConfig.properties
└── res
├── build_timestamp.txt
├── container-builder-repkg-2.0.0-SNAPSHOT-dex.jar
├── container-builder-repkg-2.0.0-SNAPSHOT.jar
├── hermes_bksv1_key
├── hermes_key
├── monthly_temp.txt
└── ratel_version.txt
运⾏脚本进⾏感染
# liunx
./retal.sh 目标app的路径
# windows
./ratel.bat 目标app的路径
需要被感染的目标app下载
链接:https://pan.baidu.com/s/1412ZQWa4frCAeyM1tCiuKQ 提取码:c10k
运⾏完成之后, 会得到⼀个 com.example.myapplication_1.0_1_ratel.apk
这个就是感染好了的⽂件, 可以直接安装到⼿机, 确保之前的app已经被卸载了, 否则可能会安装失败, 如果是debug下并且开启了testOnly, 需要用 adb install -t xxx.apk
进⾏安装。
打开ratel查看是否感染成功
3、开发⼀个平头哥插件
新建⼀个普通的Android项⽬,用于插件的基本模板
添加相关依赖
android {
.............
packagingOptions {
exclude 'META-INF/INDEX.LIST'
exclude 'META-INF/io.netty.versions.properties'
}
}
第三方包
dependencies {
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
// ratel核⼼api
compileOnly 'com.virjar:ratel-api:1.3.6'
// ratel的扩展api,他⼀般是给逆向破解和爬⾍业务使⽤,如果您只是基于ratel做⼀个插件,那么⼤多数情况
api 'com.virjar:ratel-extersion:1.0.6'
// sekiro项⽬,他可以提供⻓链接RPC功能
api 'com.virjar:sekiro-api:1.0.3'
}
在Android清单⽂件 AndroidManifest.xml 添加如下内容
<application
.........
<meta-data android:name="xposedminversion" android:value="54"/>
<meta-data android:name="xposedmodule" android:value="true"/>
<meta-data android:name="xposeddescription" android:value="这个描述可以随便写, 会展示在插件列"/>
</application>
创建assets文件夹,在assets文件夹下添加文本xposed_init , 内容为hook的⼊⼝类的完整路径, 如果有多个,分到多⾏去写。
com.example.plugintest.HookEntry
# 如果有多个插件,分到多⾏去写
com.example.plugintest.HookEntry01
com.example.plugintest.HookEntry02
编写hook类
package com.example.plugintest;
import com.virjar.ratel.api.rposed.IRposedHookLoadPackage;
import com.virjar.ratel.api.rposed.callbacks.RC_LoadPackage;
public class HookEntry implements IRposedHookLoadPackage {
@Override
public void handleLoadPackage(RC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
System.out.println("包名是什么:" + lpparam.packageName);
}
}
将编写好的插件运⾏到app, 然后开启插件