360packbao and analyse

一、pack分析

现在部分app使用360pack都使用了解析执行,所以写一个简单的demo进行学习。
pack前demo中的onCreate函数smali显示如下图:

# virtual methods
.method protected onCreate(Landroid/os/Bundle;)V
    .registers 3
    .param p1,"saveInstanceState" #Landroid/os/Bundle;

    .prologue
    .line 14
    invoke-super {po,p1}, Landroid/support/v7/app/AppCompatActivity;->onCreate(Landroid/os/Bundle;)V

    .line 15
    const v0,0x7f040019

    invoke-virtual {p0,v0}, Lcom/example/a71037/testos/MainActivity;->setContentView(I)v

    .line 17
    return-void
.end method

使用加固宝加固后的onCreate函数smali显示如下图:

# virtual methods
.method protected native onCreate(Landroid/os/Bundle;)v
.end method

360加固解析执行的文件是libjiagu.so运行时在内存释放的,故需要单步调试dump这个文件。使用IDA pro+android_server进行动态调试,具体步骤如下:

第一、安装IDA Pro服务器

adb push android_server /data/local/tmp
设置服务器运行权限
cd data/local/tmp/
chmod 777 android_server
运行服务:
adb shell & cd /data/local/tmp & ./android_server
设置端口转发:
adb forward tcp:23946 tcp:23946

第二、调试运行

adb shell am start ­D ­n Android.support.v8/android.support.v7.q448870015

第三、附加进程调试

Debugger ­> Attach
Ctrl+F 搜索 android.support.v8

第四、函数下断点

Modules中搜索 libc.so 给fopen,fgets下断点 Modules 中搜索 libdvm.so
给dvmDexFileOpenPartia 下断点

第五、jdb调试

打开monitor,鼠标选中要调试的进程(android.support.v8)
jdb–connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

从内存中dump出so文件后,将其重命名为 libVM 。因为ELF文件映射到内存中会有内存对齐,所以需要使用十六进制工具进行修改。使用010 Editer 打开并执行ELF文件格式解析脚本。修改 program_table_element[3]数组,将Elf32_Off 的偏移修改成与Elf32_Addr相同的偏移。将Elf32_Word p_Filesz 的大小修改成与Elf32_Word p_memsz 相同的大小。修改program_table_element[7]数组,将Elf32_Off 的偏移修改与Elf32_Addr相同的偏移。将Elf32_Word p_Filesz 的大小修改成与Elf32_Word p_memsz 相同的大小。至此可以使用 IDA pro 静态分析libVM文件了。

二、libVM分析

从单步调试中可以知道,JNI_OnLoader函数主要的作用是进行dex文件解密,DexClassloder替换,使用registerNativeMethods函数进行注册(在dex壳文件中会有大量的Native函数),虚拟执行的初始化
处理方法:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值