android百度脱壳,[原创]百度加固逆向分析

最近一直在研究百度壳,发现网上这方面的资料非常少。所以我把自己做的发出来跟大家分享,共同学习进步。

下面开始:

一、init_array

我们发现init_array中存在多个函数地址,JNI_Onload为加密状态

52fa38ef6119b2720f56f2448f0d34b5.png

b78692d3c99b7c5e5d1ebfd4b08a70b2.png

动态调试在init_array上下断跟着进入一个大循环。发现他在此处对so进行了抹头操作。

2861631dfcc018eb87d1cf74e17b95d6.png

19cfc21dbd47a4ef86ffcae31bc51421.png

之后遇到反调试崩溃退出。后来发现反调试检测了以下字段:

android_server

gdbserver

gdb

TracePid:

/proc/self/task/%s/status

isDebuggerConnected等。。

二、bypass

编写了一个loader程序调用该so中的JNI_Onload函数bypass壳代码和反调试。#include 

#include 

#include 

#include 

int main()

{

JavaVM* vm;

JNIEnv* env;

jint res;

JavaVMInitArgs vm_args;

JavaVMOption options[1];

options[0].optionString = "-Djava.class.path=.";

vm_args.version=0x00010002;

vm_args.options=options;

vm_args.nOptions =1;

vm_args.ignoreUnrecognized=JNI_TRUE;

printf("[+] dlopen libdvm.so\n");

void *handle = dlopen("/system/lib/libdvm.so", RTLD_LAZY);//RTLD_LAZY RTLD_NOW

if(!handle){

printf("[-] dlopen libdvm.so failed!!\n");

return 0;

}

//这里我先创建一个java虚拟机。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值