360加固之libjiagu.so dump修复

原创 2015年11月20日 13:49:41

一、elfheader修复

dump出来的内存如下图所示,elf header结构有缺失

下面是正常elf头的对比图

下面是010editor对正常elf header的解析

    由上图可知,dump出来的elf header除了e_phoff、e_phentsize、e_phum三个值,其它都为0。

   不过这里缺失的,除了e_shoff, e_shnum, e_shtrndx三个是变量,其它都是固定值。而实际上e_shoff, e_shnum, e_shtrndx这三个值在dlopen时并没有用到,全部填0,也可以正常使用。

   那么这里elf header把固定值填上,e_shoff, e_shnum, e_shtrndx三个值留空,elf header就修复好了。

   elf header修复完成后的dump就跟一个so经过dlopen后,dump出来的内存是一样的了。但是这样的dump是不能直接加载的,很多情况下用IDA分析也会缺失导入函数的解析。

 

二、so及其dump差异分析

    为了修复这个dump出来的so,我们写一个so来做个测试。

将测试so加载后,dump出来进行加载前后的对比


    后面一大块数据不一样。首先有个问题就是内存里的对齐跟文件是有差异的。

    看下elf Loadable Segment


    可以发现第二个Loadable Segmentp_offsetp_vadder是一样的,相差了0x1000,dump出来的内存在这个位置会比file0x1000

 

   Dynamic Segment同样存在这样的差异。

三、so dump修复

   由于dump的数据是跟内存加载后是一致的,把上面两个Segment里的p_offset都改成跟p_vaddr一样的值。

   完成这样的修改后,IDA就可以正常解析导入函数了,因为IDA对导入函数的解析依赖于Dynamic Segment里的数据。

   如果要能让dump能正常被dlopen起来,还需要继续对重定位数据进行修复

下面是DynamicSegmentrel对应的数据


可知rel对应的数据开始于0x6aa8,大小为0xf30


0x6aa8指向的elf32_rel结构体数组

typedef structelf32_rel {
       Elf32_Addr   r_offset;
       Elf32_Word  r_info;
} Elf32_Rel;

r_offset指向的地址会被重定位

下图是原始so的数据:


下图是dump内经过重定位的数据:


    可以发现dump里的数据被加上了so的加载基址,修复的时候,减去基址就可以恢复原始数据

    除了rel还有plt_rel需要修复,修复方法跟rel一样

    由于relplt_rel需要修复的数据量比较大,手动修复不太现实,需要编写个工具来完成这样的修复。可以把dlopen里的源码扣出来做一些修改完成这样的操作。

    下面是两张IDA分析的截图:




    修复后的so,跟普通so已经没什么区别了,导入函数和字符串暴露无遗。居然没有对字符串做加密,这样给分析者带来很大方便,对于加固核心so来说有点太依赖so加固了。

  (创建了一个Android逆向分析群,欢迎有兴趣的同学加入,群号码:376745720)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

12306之梆梆加固libsecexe.so的脱壳及修复

12306使用提梆梆企业VIP版本的加固,跟其它梆梆加固一样,都会用到libsecexe.so来做dex的加载,本文对此so做一个脱壳的分析 (一)、so脱壳 此so的最先执行点在init_proc ...

360加固之libjiagu.so脱壳及dex dump

360加固后的apk,在arm设备上首先会将assets目录下的libjiagu.so拷贝到files目录下,然后通过libjiagu.so动态加载原始dex        libjiagu.so...

Android安卓破解之逆向分析SO常用的IDA分析技巧

1、结构体的创建及导入,结构体指针等。 以JniNativeInterface, DexHeader为例。 解析Dex的函数如下: F5后如下: File->load...
  • asmcvc
  • asmcvc
  • 2016-03-31 14:21
  • 5278

12306 2.2版本SO的分析和修复

老早写的,现在已经2.3版本了,把这个放出来,这个方法要比之前的简单很多。       12306的so加载顺序是先libDexHelper.so后libcheckcode.so       一、修复...

Android分析破解-秒脱360加固大法

转:http://blog.csdn.net/qq_21051503/article/details/51322505 Android相比iOS,安全问题往往比较突出,各种漏洞和破解层出不穷...

Android 反编译:加固前后对比

一、比较360加固前 的 apk :hello.apk 360加固后 的 apk :hello_after.apk 操作步骤 加固前反编译 加固前后编译 1、zip包解压缩 1、能...

Android分析破解-秒脱360加固大法

Android相比iOS,安全问题往往比较突出,各种漏洞和破解层出不穷。对破解方法的了解,能在开发中进行预防,加强应用的安全性。本系列文章会对Android应用的破解和保护两方面做个探讨,给开发的同学...

360二代加固脱壳方法总结

二代加固的难度有所增加,最明显的地方就是qihoo下面增加了一个Configuration.smali文件。由以前的一个增加为两个。 脱壳时有几个关键的so: 1.libc.so(主要是提供一些系统函...

安卓apk反编译、修改、重新打包、签名全过程

首先明确,反编译别人apk是一件不厚道的事情。代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的。这也说明,代码混淆是非常重要的。本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么...

Android分析破解-秒脱360加固大法

http://blog.csdn.net/qq_21051503/article/details/51322505 Android相比iOS,安全问题往往比较突出,各种漏洞和破解层出不穷。对破解...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)