hook的类型
java层:1.Dalvik hook 2.ART hook
Native层: 1.LD_PRELOAD_Hook 2.Inline hook
hook框架xposed
吐了 老是报错l…为什么。。。
https://blog.csdn.net/tanmx219/article/details/81369229【已解决】
感觉套模板就行。。尴尬了。。。我直接用作者给的源代码编写的插件怎么用不起来。。。
so注入
艹 好难。。。不会写
dex注入
没讲。。
frida注入框架
看雪上 安卓逆向基本都用它 一定要学会!
我吐了,安装了一万次安装失败
直接官方就好了
妈的 以后安装就直接看官方
pip install frida-tools
注意:模拟器 是建立在x86上,所以要下载x86的android-server
真机- arm 吐了 一直失败 才找到原因
声明3.6是sb…用的时候有bug, python升级成3.8毛问题都没有
呵呵。。。写js脚本。。clz都找不到 弄掉后都好了。。。
艹 frida nb pin sb!
软件保护技术
反调试技术
调试器状态检测
1.isDebuggerConnected() 和xml的android:debuggable属性
private bool isDebuggerConnected(){
if( ( getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0 ){//判断android:debuggable是否修改
return true;
}
return android.os.Debug.isDebuggerConnected();
}
调试器端口检测
比如检验23496端口有没有被占用
private void checkPort( int Port) {
final int port_ = port;
new Thread() {
@Override
public void run() {
try{
InetAddress addr = InetAddress,getByName("127.0.0.1");
Socket sock = new Socket(addr , port_);
prtused = true;
} catch(Exception e){
e.printStackTrace();
portused = false;
}
try {
run0nUiThread(new Runnable() {
@Override
public void run() {
tv.setText(portused ? "Yes" : "No");
}
});
Thread.sleep(300);
} catch (InterruptedException e){
e.printStackTrace();
}
}
}.start();
}
进程状态检测
主要检验tracerpid 有没有被其他的进程附上
extern "C"
JNIEXPORT jboolean JNICALL
java_com_droider_checkdebugger_Main_Activity_checkStatus(
JNIEnv * env,
jobject
) {
FILE *f = fopen("/proc/self/status", "r");
char buf[1024];
while(fgets(buf,1024,f)) {
if(strstr(buf,"TracerPid:")) {
int tpid;
sscanf(buf,"TracerPid: %d",&tpid);
if(tpid != 0){
fclose(f);
return true;
}
}
}
fclose(f);
return false;
}
运行环境检验
1.模拟器检测
private boolean checkEMU(Context context) {
if("goldfish".equals(getProp(context,"ro.hardware")))
return true;
if("1".equals(getProp(this,"ro.kernel.qemu")))
return true;
if("generic".equals(getProp(context,"ro.product.device")))
return true;
if(Build.MANUFACTURER.contains("Genymotion"))
return true;
if(Build.DEVICE.startsWith("generic"))
return true;
if(Build.MODEL.contains("sdk"))
return true;
if(new File("/init.goldfish.rc").exists())
return true;
if( new File("/system/bin.qemud").exists())
return true;
try{
BufferedReader cpuInfoReader = new BufferedReader(new FileReader("/proc/cpuinfo"));
String line;
while((line = cpuInfoReader.readLine()) != null) {
if( line.contains("Goldfish"))
return true;
}
}catch (Exception e) {
}
return false;
}
2.root检验
旧版本的管理软件superuser
if(new File("/system/app/Superuser.apk").exists())
return true;
新版本的root管理工具SuperSu.apk /data/app apk的名称"eu.chainfiresupersu"
List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
for(PackageInfo pack : packages) {
if(pack.packageName.equals("eu.chainfire.supersu"))
return true;
}
还有su
String[] paths = {"/sbin/su","/system/bin/su","system/xbin/su","/system/bin/failsafe/su"};
for( String path : paths) {
if(new File(path).exists()) return true;
}
hook检验
主要针对是否安装hook工具
软件壳
看看雪的贴实践吧。。看书感觉没用
明日计划:
1.安卓的ctf题写两个
2.看安卓开发了。。学习安卓开发