straceme 发表于 2019-10-12 10:44

某加固的尝试(一)

本帖最后由 straceme 于 2019-10-12 11:17 编辑

1. 一次加固分析
由于要做测试,通过分析发现该应用加固了。该加固并不常见。尝试进行脱壳。
1.1. 样本信息
包名:com.xxx.jincheng
应用名称:某某银行
版本信息:3.0.8
MD5值:d0c5c54ca31ebcfa4834ebe7ecb23539

1.2. 初步分析
通过壳java层代码发现此加固的核心代码在libvdog.so中,其中libvdog.so文件的elf文件魔数被修改了, 壳代码会在写文件时将文件还原回去,如下:




直接用010editer把魔数改称 7F 45 4C 46 即可,此时文件libvdog.so可以使用ida进行分析。在使用ida 打开文件过程中会发现,存在错误提示如下:



这说明libvdog.so的section信息已经被处理了,使用010Editer工具分析elf文件结构



但不影响分析。由于此动态库的导出函数可以判断,这so文件应该是一个自定义的linker文件。


接下来就需要分析,真正的so代码数据存储在哪里,通过初步查看发现so函数已经混淆了。



手动调试几乎不可能,几乎所以函数都进行了代码膨胀。
不过有一点还是可以庆幸的就是libvdog.so的字符串并未进行混淆,
详细分析该这so文件,代价太高了!!!,代先不进行分析,先进行整体dump。看看能拿到多少代码。
1.3. dex文件整体dump

dex文件整体dump有很多办法,也有很多点,可以通过获取到所有dex的cookie,然后找到dex文件地址,也可以直接对关键函数进行拦截,我选择了DexFileLoader::OpenCommon这个点(android 10),其他版本的机器不确定有没有这个函数,直接hook。函数如下:



Dump 得到的dex文件如下:



使用jeb查看,通过分析发现基本上可以获取的所有的代码,



到这里基本上就可以正常分析了,
通过查看发现。还有一部分代码不被抽取了。大概特征如下:


1.4. 抽取函数破解尝试
怎么还原这些被抽取的函数。尝试在工具dexhunter,然并卵。并没有什么用处。代码逻辑还是没还原。尝试分析其smali代码逻辑。

猜测,通过i1函数进行还原。上面nop代码,然后在执行真正代码逻辑。这样的好处,当运行到某个函数时候代码才会还原。关键点在i1函数中,
可以通过两个方面进行解决

1. 直接分析i1函数,然后进行还原
2. 使用开源方案开源的方案的方案。

通过虚拟机主动加载类函数。是个不错的思路。https://bbs.pediy.com/thread-252630.htm可以直接按照这个思路,
对虚拟机进行修改。具体的细节后面整理完在开源,坑有点多还原前后代码对比
还原前:

还原后:

直接分析i1的方式还没时间完成分析。工作量太大。
1.5. 自定义dex解释器代码还原
搜索发现,所有的onCreate方法代码逻辑都被替换掉了,开始以为是抽取的后来发现不是。
代码如下:

通过hook 简单验证了下;
发现当运行时会调用JNI(Java Native Interface)的接口执行代码逻辑。
由于分析详细过程可能会涉及的加固的核心利益,暂不进行分享。
大概思路,使用libdexfile这个库,对dex文件进行拆分,然后新建一个codeItem类

对代码进行还原。
中间涉及了太多。后面有机会进行分享。还原后的代码如下:

1.6. 修复后的dex下载
下载: https://www.lanzouj.com/i6pnm1c 密码:4jxk
由于时间问题,很多的细节,都没写,后面将会将具体细节分享出来。

2. 参考以及使用工具
2.1. 代码
l Android Open Source Project(libdexfile) https://android.googlesource.com/platform/art/+/master/libdexfile/
l PLT hook: https://github.com/iqiyi/xHook
l inlineHook https://github.com/jmpews/HookZz
2.2. 工具
l IDA Pro
l Clion
l 010editer

2.3. 脚本
l 010Editer elf文件脚本:https://raw.githubusercontent.com/strazzere/010Editor-stuff/master/Templates/ELFTemplate.bt

Hmily 发表于 2019-10-12 12:59

看那个运行到加密地方解码后再执行,完事再加密很像windows时期很多壳如TMD的sdk里那种SMC的加密方式,看起来都照搬到安卓里了。

Vincent-HJ 发表于 2019-10-12 11:30

虽然看不懂,但是觉得很流弊~

cxp521 发表于 2019-10-12 11:00

流弊,流弊,杠杠的

thinkpad_420 发表于 2019-10-12 11:38

好厉害,算是开眼界了

zg2600 发表于 2019-10-12 11:40

我成功了呢

Rolanju 发表于 2019-10-12 11:46

先收藏再说

风绕柳絮轻敲雪 发表于 2019-10-12 11:53

爱加密?

shelly1314 发表于 2019-10-12 12:28

感谢楼主分享

一人之下123456 发表于 2019-10-12 12:51

感觉很厉害的样子,向大佬学习。

duduhao 发表于 2019-10-12 12:52

学习了,谢谢楼主的好分享
页: [1] 2 3 4 5 6 7 8
查看完整版本: 某加固的尝试(一)