/作者:Kali_MG1937

QQ:3496925334

CNBLOG博客号:ALDYS4
/

某天午睡,朦朦胧胧梦到给学校提供建站模板的公司有个注射点

梦醒后,我凭借着零散的记忆日进了对面的数据库,,,

0x00寻找突破点

打开学校的官网,找到技术支持,百度域名

打开首页,emm

就一个登录页面,没了

随便写点东西提交看看



天生手欠的我一不小心就多输了一个单引号

回车



WDNMD,除了数字和字母其他都不行?

这叫我怎么日你?

就在这时,首页的一个二维码吸引了我

正是该公司开发的安卓端的软件,我眼前一亮,仿佛找到了打开新世界的大门

开开心心地把软件下载过来,正想反编译找找看有什么可利用的接口



360加固?

fa?!



本以为上帝关上了我的门,还会留个窗给我,结果还是无情地把窗砰地一声给我锁上了

0x01 ZjDroid脱壳

经过一番搜索,找到了一款脱壳工具

我们已经知道不论是利用什么方法加固apk

若要让软件要正常运行,就必须让程序最终加载原dex文件,这样的话,如果我能dump出内存中已经加载的dex

就可以无视在加载dex前的一大堆解壳操作

ZjDroid就可以做到这一点,ZjDroid是一款基于Xposed开发的插件,它可以轻松地hook住所有的activity,并且将软件当前加载的dex写出

在github上fork其源码,进行分析

有进行过Xposed插件开发的大佬们都知道,想让Xposed加载你编写的插件的核心代码

就必须在assest/xposed_init文件内写入你想要加载的核心代码的所在包



进入ReverseXposedModule类



图中两处红线标记处为Dump出dex文件的关键代码

其中第二处红线标记处的对象为DexFileInfoCollecter类,直接翻译过来就是Dex文件信息收集,先对此处进行分析

程序在这里调用了这个对象的start方法

跟进DexFileInfoCollecterstart方法



通过观察代码可知,第一处红线标记处程序利用反射找到了系统DexFile类openDexFileNative方法

这个方法和本地系统加载dex文件有关

接着看第二处标记处,程序调用Xposed模块的hookMethod方法hook住了openDexFileNative方法

在hook完成之后,只要系统调用到了openDexFileNative方法,第三处红线处的代码就会执行

第三处红线处的代码用于获取加载的dex的信息,这里不深入分析

也就是说,只要用户打开某个app,系统调用dex文件的方法就会被执行,那么ZjDroid只需要hook住系统调用dex文件的方法,就可以在软件加载原dex后做任何事情了!

hook加载dex方法的代码已经执行完毕

我们回到最开始插件入口的第一处红线处

程序调用了ReverseXposedModule类中的initModuleContext方法

跟进其调用的initModuleContext方法



查看第一处标记,程序同样的找到了Application类的onCreate方法,这是每个继承Activity的活动在启动时默认最先执行的方法

这里ZjDroid同样对系统的Application类的onCreate方法进行了hook,换句话说,只要用户点开任何一个软件,都能被程序hook住

同样的,程序也是利用hookMethod进行的hook操作,hook后的操作在ApplicationOnCreateHook类中,跟进代码



可以看到程序给每个被hook的app注册了一个广播,跟进代码



分析代码可知,当被hook的app接收到含有com.zjdroid.invoke字符的广播时就会进入判断

程序将提取出广播中键为"target"和"cmd"的值

通过图中第二处红线下方的代码可知target就是app的pid号

在获取cmd的值后,cmd的值将被传入CommandHandlerParser类中

跟进代码



观察代码可知cmd的值就是一个json格式的字符串

程序将根据json中的值对应地执行操作

我们需要dump出dex文件,假设我发送的广播进入了ACTION_DUMP_DEXFILE分支

程序将向DumpDexFileCommandHandler类传入指定值,跟进代码



其中红线标记处就是dump dex文件的核心代码了

跟进



查看其中红线处,data成员调用的方法就是dump出内存中dex文件的代码,接着程序将data写出到指定目录

遗憾的是,红线出的代码为native层的代码,而native层的代码作者并没有开源

编译,运行

踩坑注意:这个工具的so文件似乎在5.0以上的安卓系统不起作用,所以我特意刷了一个4.4的安卓再去安装ZjDroid

在手机的Xposed中启用此插件,然后打开需要脱壳的app

adb shell dumpsys activity top查看最顶层活动的PID号

接着发送广播dump出dex



dex被成功dump

0x02寻找接口



查看软件的入口

打开指定类

未加壳的dex成功被加载了!

我现在看到的是原dex的代码,而不是壳dex的代码!



可以看到onCreate方法为native层方法,但是接着往下看

getInfo方法中有一个利用post请求调用的登录接口

请求一下看看什么情况



WTF?返回的实体中告诉我无权调用此接口?!

难怪把onCreate方法放在native层里!一定是在onCreate方法中需要进行什么操作才能正常调用此接口

可native层的代码实在是无能为力

继续在代码中搜索可能存在的接口



其中一处接口让我眼前一亮



我抱着试试看的心态请求了此接口



WTF?!WTF?!居然可以请求!还没有过滤特殊符号?!

丢到sqlmap里



MSSQL数据库!

成功日进对方数据库!

完事,提交,收工!

【逆向&渗透实战】Dump内存中的Dex_我是如何脱壳某公司加固过的Apk并利用其API渗透对方数据库的更多相关文章

  1. 【逆向&编程实战】Metasploit中的安卓载荷凭什么吊打SpyNote成为安卓端最强远控

    文章作者:MG1937 QQ:3496925334 CNBLOG:ALDYS4 未经许可,禁止转载 前言 说起SpyNote大家自然不陌生,这款恶意远控软件被利用在各种攻击场景中 甚至是最近也捕获到了 ...

  2. 使用sa-jdi.jar dump 内存中的class

    前言 在分析一个 jar 包时发现他把关键类采用了运行时使用 classloader 的方式加载了.懒得分析算法了,可以使用 jdk 自带的工具 dump 出需要的class. 正文 从运行的java ...

  3. IDA在内存中dump出android的Dex文件

    转载自http://drops.wooyun.org/tips/6840 在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非 ...

  4. IDA远程调试 在内存中dump Dex文件

    1. 首先使用调试JNI_OnLoad函数的方法,先将apk以调试状态挂起,使用IDA附加上去. 2. 然后在libdvm.so中的dvmDexFileOpenPartial函数上下一个断点 3. 然 ...

  5. Linux中使用gdb dump内存

    在应急响应中,我们往往会有dump出某一块内存下来进行分析的必要.今天要讲的是利用gdb命令dump出sshd进程的内存. 按照 Linux 系统的设计哲学,内核只提供dump内存的机制,用户想要du ...

  6. EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载

    之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...

  7. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(三)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<In-Memory OLTP – Comm ...

  8. 内存中 OLTP - 常见的工作负荷模式和迁移注意事项(二)

    ----------------------------我是分割线------------------------------- 本文翻译自微软白皮书<In-Memory OLTP – Comm ...

  9. PC逆向之代码还原技术,第一讲基本数据类型在内存中的表现形式.浮点,指针寻址公式

    目录 代码还原技术 一丶简介代码还原 二丶代码还原中的数据类型表现形式 1.整数类型 2.无符号整数 3.有符号整数 4.浮点数数据类型 5.浮点编码 4.Double类型解析. 三丶浮点汇编 1.浮 ...

随机推荐

  1. 你注意到了吗?修改API文档也需要规范!

    关于API接口文档的内容和格式规范的文章,之前也有写过,网上也有不少写的比我还好的,就不赘述了,今天想说的是一个很容易被忽略的点,修改API文档的规范:版本控制. 示例 拿Eolinker来演示一下流 ...

  2. Asp.NetCore Web应用程序中的请求管道和中间件

    你是否会迷惑当我们请求一个ASP.NetWeb应用程序以后,它是怎么处理这些请求的,后台是怎么工作的,今天就讲一下Asp.NetCore Web应用程序中的请求处理过程. 上一节,我们讲到,Start ...

  3. 简单了解 MySQL 中相关的锁

    本文主要是带大家快速了解 InnoDB 中锁相关的知识 为什么需要加锁 首先,为什么要加锁?我想我不用多说了,想象接下来的场景你就能 GET 了. 你在商场的卫生间上厕所,此时你一定会做的操作是啥?锁 ...

  4. golang:协程安全

    多路复用 Go语言中提供了一个关键字select,通过select可以监听channel上的数据流动.select的用法与switch语法类似,由select开始一个新的选择块,每个选择条件由case ...

  5. python发送钉钉消息

    import requests import time import hashlib import hmac import base64 import re def SendMessage(messa ...

  6. 选择“保留window设置、个人文件及应用”或者“升级安装windows并保留文件设置和应用程序”的 处理干净以后用ghost备份

    个人经验 第一次装好以后 把所有常用软件什么的 还有系统的更新全部装好 删去乱七八糟的临时文件啊什么的 处理干净以后用ghost备份下次需要重装直接从ghost镜像恢复 然后更新软件 打补丁 再备份 ...

  7. 四大浏览器JavaScript性能/硬件加速测试

    四大浏览器JavaScript性能/硬件加速测试 出处:快科技 2010-09-19 10:52:59    人气: 27925 次   作者:萧萧 编辑:萧萧[爆料]  评论(42)  收藏文章 新 ...

  8. [转发]PotPlayer 无损截取视频片段

    PotPlayer 无损截取视频片段 2019-03-29 21:04:21 ForeverStrong 阅读数 2928  收藏 更多 分类专栏: 视频图像编辑   PotPlayer 无损截取视频 ...

  9. mysql基础之视图、事务、索引、外键

    一.视图 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用 ...

  10. IDEA 自定义文件头注释

    什么是 IDEA 自定义文件头注释 IDEA 自定义文件头注释指的是创建 Java 类文件时,IDEA 可以自动设置文件头的注释信息,如下: 如何设置 IDEA 自定义文件头注释 打开 File-&g ...