• 360加固保动态脱壳


    测试环境:

    调试器: IDA6.5

    手机及系统版本:

    .SO层脱壳

    一:.如何到达壳入口点?

    1.我是通过对dvmLoadNativeCode函数下断,分析它执行流程最后到达壳入口(如果您有更好的办法还请告知,感谢中...),函数dvmLoadNativeCode是执行加载so文件的操作。(2.3系统是这个名字),2.3以上系统被名称粉碎了,不过在2.3以上系统中可以在libdvm.so中搜索函数名也是可以找到的,(我当前系统函数名为:_Z17dvmLoadNativeCodePKcP6ObjectPPc)如下图所示:

    2.对dvmLoadNativeCode函数进行下断有些小技巧,前后下断点,等壳执行完成后反回就断在这里,如下图所示:

    3.跟进这libdvm.so:4087B900 BLX unk_4083F694 函数后,分析其流程就可以发现有so的加载基址为0x5B97C000,如下图:

    4.得到so在内存中基址后就可以用ReadELF -a xx.so来查看so文件的INIT_ARRAY文件偏移,如下图执行 ReadELF -a libprotectClass.so 命令后

    5.我们用IDA静态反编译libprotectClass.so文件,然后去0xfd98地址去看看,是一个函数地址,如下图

    该函数为:

    6.得到了libprotectClass.so在内存中基址与INIT_ARRAY文件偏移,将它们相加即可得到so壳入口了0x5B97EF5C,去内存中看看,如下图:

    是不是与__gnu_armfini_26函数很像呢?然后我们在该函下个断点,F9执行以这儿就可以接着分析so壳代码了。

    二:so如何脱壳?

    1.到达壳入口后我们单步跟踪看看,到修改代码属性这里

    R0为要修改的开始地址

    2.准备解密代码,跟进该函数。

    在该函数里做解密代码操作,首先是拷贝0xA长度的密钥,如下图,然后初始化密钥

    3.从初始化密钥函数来看,应该使用的是RC4算法,接着就是解密了。

    R0为要解密的Buffer, R1为Buffer的大小, R3为初始化后的密钥。

    4.算法 密钥 都知道了,我们可以写个程序来解密so了,如下图解密前后JNI_OnLoad对比。

    解密前为:

    解密后为:(代码己正常)

    到此可以静态分析了,其它的小伙伴们自己去玩吧(^_^), 解密算法RC4_so己放在附件中。

    DEX 内存dump

    1.接着上面so代码解密完成后,反回到这里, libdvm.so:4087B904 MOV   R1, R6

    这时可以在JNI_OnLoad函数下断点了,如下图:

    F9来到JNI_OnLoad函数,接着就是慢长的分析了。

    详细的分析流程我就不细说了,想了解的现在可以自己动态与静态结合分析了,我们这次的目的是内存中dump完整的DEX。

    到JNI_OnLoad函数后,到下面libprotectClass.so:5B88A22C BLX   R4下好断点。如下图

    3.F9到这里后,F7跟进,然后在 mmap函数下断点, F9执行,当LR的地址为程序领空时反回下好断点(一定要是程序领空才有效,因为mmap会被多次调用),F9执行。

    接下来R0将会存放解密后的Dex,然后F8走,直到该函数执行完成后,开始解密DEX开头0x70个字,解密完成后就可dump出来了,如下图:

    到此完整的DEX己经出来了,下面我们Dump出来,打包反编译。

    开始地址为0x5BC35000, 大小为0x005EDBA4, 结束地址为0x5C222BA4

    4.将dump出来的dex重新打包并能成功反编,如下图:

    5.到此整个过程就完成了,下面该做些什么小伙伴们自己发辉吧,我就不知道了。(^_^)。(样本就是上传了,想玩玩的去XX加固保官网下载去吧)

    资料下载

    http://yunpan.cn/cAFzDYcB6weWY (提取码:6e74)

    当把学习当成一种习惯!
  • 相关阅读:
    理解构造器
    if与switch的性能比较
    Java对象的内存(一)
    shell编程_条件判断if
    shell编程_基础&变量
    集群架构篇:Nginx架构演进<拆分数据库 多台web节点共享静态资源>
    集群架构篇:Nginx流行架构LNMP
    集群架构篇:Nginx常用模块
    LInux系统@安装CentOS7虚拟机
    docker pull越来越慢的解决方法
  • 原文地址:https://www.cnblogs.com/2014asm/p/4104456.html
Copyright © 2020-2023  润新知