从零打造简单的SODUMP工具

本文介绍了如何从零开始构建一个名为SODUMP的工具,该工具能自动化处理基于linker init_array加密的Android Shared Object(SO)文件,简化静态分析流程。文章详细阐述了应对各种加密算法的策略,如利用linker机制解密SO,以及改进PLT和GOT的重建方法。SODUMP工具最终实现为一个Android应用,能够方便地对SO文件进行脱壳处理。
摘要由CSDN通过智能技术生成

从零打造简单的SODUMP工具

Author: ThomasKing

最近翻看之前的帖子,发现基于linker init_array加密的SO文件的静态分析稍微麻烦。虽然原理很清楚,但是需要dump之后再进行section修复才能放入ida。可以看到,上述两步骤其实很机械。那么应该可以实现一个自动化工具,帮助我们解决上述问题,让我们可以精力专注于其他地方,提高效率。实现上述工具需要解决两个问题:1> 应对各种加密算法 2> section重建。Section 重建在http://bbs.pediy.com/showthread.php?t=192874 已经讨论,就不再赘述,仅仅改进一些不足之处。

一、应对各种加密算法策略

http://bbs.pediy.com/showthread.php?t=192020&viewgoodnees=1&prefixid= 等帖子中提到的SO文件都基于init_array实现。为了静态分析,不得不分析出算法,并实现对SO解密,以便静态分析。而且,不同的SO采用不同的加密算法。这个步骤时间的花费,取决于分析人员对各种常用的加密算法RC4、TED等了解程度,这是比较纠结的事情。

那如何应对各种加密算法,成为工具实现的关键。直接实现各种算法,这个显然是不行的。那只能通过某种方法来绕过。想了很久,也没有很好的解决策略。不过有一点,熟悉SO机制的读者都知道,linker可是应对自如!那看来只能借linker之手,来帮助我们实现。

Linker除了在程序运行初加载外,还有就是通过dl函数会调用,即dlopen、dlsym、dlerr和dlclose。啰嗦下dlopen和dlsym函数原型:

void *dlopen( const char * pathname, int mode);

void*dlsym(void*handle,constchar*symbol);

通常,使用dlopen打开加载某SO后,会返回一个handle对象,然后根据handle对象调用dlsym查找某函数符号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值