360加固一键脱壳工具2020_如何脱壳加固过的Apk并利用其API“走近数据库”

8d6197ec283f568ab6c225baf19c7738.gif

bf49dd95314422e038dd66dfa67d6bc8.gif

0x00 寻找突破口

打开首页,emm
就一个登录页面,没了
随便写点东西提交看看

ec1b13989839f14253ae32d24b6b1d6c.png

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

02ed03c79cffb211e5330c64348f9015.png

WDNMD,除了数字和字母其他都不行?
这叫我怎么测?
刚刚要放弃,就在这时,首页的一个二维码吸引了我
正是安卓端的软件,眼前一亮,仿佛找到了打开新世界的大门

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

8e09627b9acd29c7cc0ffb271aeab02a.png

360加固?
fa?!

3c6f9d821cdf0bdf88f1371e90d56d67.png

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

70c87c9187228d5cd7c067ae80b6f132.png

0x01 zjDroid脱壳

刀不锋利马太瘦,你拿什么工具和我斗。
我们已经知道不论是利用什么方法加固apk
若要让软件要正常运行,就必须让程序最终加载原dex文件,这样的话,如果我能dump出内存中已经加载的dex
就可以无视在加载dex前的一大堆解壳操作
而ZjDroid就可以做到这一点,ZjDroid是一款基于Xposed开发的插件,它可以轻松地hook住所有的activity,并且将软件当前加载的dex写出

在github上fork其源码,进行分析
有进行过Xposed插件开发的大佬们都知道,想让Xposed加载你编写的插件的核心代码
就必须在assest/xposed_init文件内写入你想要加载的核心代码的所在包

35a49c910b85e610b7389db36b834b3e.png

进入ReverseXposedModule类

a914cf18d01bb2fef910743fc31905ac.png

可以看到图中两处红线标记处因为我们的目的是Dump处dex文件,所以先对第二处红线标记处进行分析跟进DexFileInfoCollecter的start方法

fa6aa01dc040c81ceff7ca280fe59ad7.png

通过观察代码可知,第一处红线标记处程序利用反射找到了系统DexFile类的openDexFileNative方法
这个方法和系统加载dex文件有关,这里不深入分析
接着看第二处标记处,程序调用Xposed模块的hookMethod方法hook住了openDexFileNative方法
继续看第三处,在hook完成之后,只要系统调用到了openDexFileNative方法,红线处的代码就会执行
第三处红线处的代码用于获取加载的dex的信息,这里不深入分析
也就是说,只要用户打开某个app,系统调用dex文件的方法就会被执行,那么ZjDroid只需要hook住系统调用dex文件的方法,就可以在软件加载原dex后做任何事情了!
hook加载dex方法的代码已经执行完毕

我们回到ReverseXposedModule类中的第一处红线标记处,进行分析
跟进其调用的initModuleContext方法

0c62ea3cdf3cea7777e810fcf9fcbd18.png

查看第一处标记,程序同样的找到了Application类的onCreate方法
开发过app的大佬们都很熟悉这个onCreate方法吧,这是每个软件在启动时默认最先执行的方法
这里ZjDroid同样对系统的Application类的onCreate方法进行了hook,换句话说,只要用户点开任何一个软件,都能被程序hook住
同样的,程序也是利用hookMethod进行的hook操作,hook后的操作在ApplicationOnCreateHook类中,跟进代码

9e98fb37491c56b0f9a9d1696d92d17f.png

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

d615c7b93d22062ed3a534aaa1d9ef92.png

分析代码可知,当被hook的app接收到含有com.zjdroid.invoke字符的广播时就会进入判断
程序将提取出广播中键为"target"和"cmd"的值
通过图中第二处红线下方的代码可知target就是app的pid号
在获取cmd的值后,cmd的值将被传入CommandHandlerParser类中
跟进代码

c5a8b221c5785d51442b59b1dae1a6a5.png

观察代码可知cmd的值就是一个json格式的字符串
程序将根据json中的值对应地执行操作
我们需要dump出dex文件,假设我发送的广播进入了ACTION_DUMP_DEXFILE分支
程序将向DumpDexFileCommandHandler类传入指定值,跟进代码

a7e39cd70cb749f8d4d716c5f1f6db5b.png

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

0b94d93b40e842625c34ef71f2435cd4.png

查看其中红线处,data成员调用的方法就是dump出内存中dex文件的代码,接着程序将data写出到指定目录
遗憾的是,红线出的代码为native层的代码,而native层的代码作者并没有开源
编译,运行
踩坑注意:这个工具的so文件似乎在5.0以上的安卓系统不起作用,所以我特意刷了一个4.4的安卓再去安装ZjDroid
在手机的Xposed中启用此插件,然后打开需要脱壳的app
adb shell dumpsys activity top查看最顶层活动的PID号
接着发送广播dump出dex

6904de08adef1c03d69c32f90937d0dd.png

dex被成功dump、

0x02 寻找接口

bf81be31d57b05b0b6a7fd646c168b46.png

查看软件的入口
打开指定类
未加壳的dex成功被加载了!
我现在看到的是原dex的代码,而不是壳dex的代码!

1f53955966f38ea44f35a34d53abc005.png

可以看到onCreate方法为native层方法,但是接着往下看
getInfo方法中有一个利用post请求调用的登录接口
请求一下看看什么情况

e0cee19f7fe2daf82458062c71016a11.png

WTF?返回的实体中告诉我无权调用此接口?!
难怪把onCreate方法放在native层里!一定是在onCreate方法中需要进行什么操作才能正常调用此接口
可native层的代码实在是无能为力
本打算就这么放弃了,最后一次在代码中搜索可能存在的接口

a29d007df677b73985707996e8b8bc16.png

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

cd39a57ba7b284628e97c836f1b9c795.png

9aaed229f20e7eddcea4231e50eb6c0a.png

WTF?!WTF?!居然可以请求!还没有过滤特殊符号?!
管理员还真是粗心

9463b3f2082e2245abf5557631c98adc.png

丢到sqlmap里

8a8d2f2755c4b27769348d74e599c110.png

收工!

ps:具体细节不做演示,本文仅限圈内技术交流禁止用于非法用途!

df8f3e60639721cb6ebfb712f3432984.png

bf49dd95314422e038dd66dfa67d6bc8.gif

5e1ec42c3748337eaa5e3c35f389f73a.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 函数递归_Python零基础之三元表达式、函数递归、匿名函数教程!超级详细!...

目录一、三元表达式二、函数递归 递归调用的定义递归分为两个阶段:递归,回溯三、匿名函数 什么是匿名函数?有名字的函数与匿名函数的对比lambda匿名函数的应用四、内置函数 #注意:内置函数id()可以返回一个对象的身份,…

linux 内核空间占用cpu百分比过高,linux下分析java程序占用CPU、内存过高

一、CPU过高分析1)使用TOP命令查看CPU、内存使用状态可以发现CPU占用主要分为两部分,一部分为系统内核空间占用CPU百分比,一部分为用户空间占用CPU百分比。其中CPU状态中标示id的为空闲CPU百分比。当空闲CPU百分比越低,说明CPU占用率越高。2)…

springboot 获取application参数_LOOK ! SpringBoot的外部化配置最全解析

本篇要点介绍各种配置方式的优先级。介绍各种外部化配置方式。介绍yaml的格式及原理。介绍如何绑定并测试类型安全的属性配置。介绍ConfigurationProperties与Value的区别。一、SpringBoot官方文档对于外部化配置的介绍及作用顺序SpringBoot支持多种外部化配置,以便…

spark入门_入门必读 | Spark 论文导读

Resilient Distributed Datasets: A fault-tolerant abstraction for in-Memory cluster computing, 是讲述 Spark RDD 的基础论文,通读论文能给我们带来全景的 Spark 知识面摘要:RDD,全称Resilient Distributed Dataset,可伸缩性数据集。使用…

Qt在linux下无法输入中文,Ubuntu使用集成开发环境QT无法输入中文的解决方法

QT Creator是轻量级集成开发环境,在Ubuntu系统操作中,使用QT时无法输入中文,遇到这种情况要如何处理呢?下面小编就给大家介绍下Ubuntu如何解决QT无法输入中文问题。1 安装搜狗输入法,(如果你想用ubuntu自带的输入法也没…

altium pcb 信号高亮_在PCB设计中高效的放置元件技巧

在印刷电路板设计中,设置电路板轮廓后,将零件(占地面积)调用到工作区。然后将零件重新放置到正确的位置,并在完成后进行接线。组件放置是这项工作的第一步,对于之后的平滑布线工作是非常重要的工作。如果在接线工作期间模块不足&a…

linux升级ssh到6.6版本,CentOS6.5 openssh升级到openssh-7.6版本

CentOS6.5 openssh升级到openssh-7.6版本2018-8-3 foooy升级前保证故障后能现场处理,或者远程卡处理,否则不要这样直接升级yum install -y gcc openssl-devel pam-devel rpm-buildwget http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.6…

python中csv文件通过什么表示字符_python_写入csv文件时候无法进行原样写入(写入字符串中出现逗号,时候,csv文件自动分成两个单元格)...

问题描述: 写入csv文件时候无法进行原样写入(写入字符串中出现逗号","时候,csv文件自动分成两个单元格) with open("test.csv","w") as f: f.write("闲暇时,我会被一段,配乐诗朗诵,所感动,悲伤…

rabbitmq怎样确认是否已经消费了消息_阿里Java研发二面:了解RabbitMQ?说说RabbitMQ可靠性投递...

上期写到高并发下RabbitMq消息中间件你应该介么玩今天给小伙伴说说!有自己看法的也可以在评论区留言探讨,也可以转发关注下我以后会长期分享!目录:确保消息发送到RabbitMQ服务器确保消息被正确的路由确保消息在队列正确地存储确保…

linux 装完yum不能用,【linux】yum 不能安装应用,提示There are no enabled repos Run “yum repolist all”...

回答一般来说著名的linux系统基本上分两大类:1 RedHat系列:Redhat、Centos、Fedora等2 Debian系列:Debian、Ubuntu等RedHat 系列:1 常见的安装包格式 rpm 包,安装rpm包的命令是 “rpm -参数”2 包管理工具 yum3 支持ta…

更新fielddata为true_线程与更新UI,细谈原理

前言 相信不少读者都阅读过相类似的文章了,但是我还是想完整的把这之间的关系梳理清楚,细节聊好,希望你也能从中学到一些。进入正题,大家应该都听过这样一句话——“UI更新要在主线程,子线程更新UI会崩溃”。久而久之就…

linux sublime3 插件安装插件,手动安装sublimeText3插件

就在今天下午,我花了一个小时的时间安装sublime3插件stylus,就是为了让stylus文件能够高亮显示。网上找了很多方法,可以通过package control安装,然而,我的sublime package control能够正常显示,插件列表也…

vbs打开软件光标停在第一个输入框_三维设计软件,3DMAX最全快捷键大全,赶快收藏哦...

文章后有获取软件的方式。基本快捷键A-角度捕捉开关 B-切换到底视图C-切换到摄象机视图D-封闭视窗E-切换到轨迹视图F-切换到前视图G-切换到网格视图H-显示通过名称选择对话框I-交互式平移J-选择框显示切换K-切换到背视图L-切换到左视图M-材质编辑器N-动画模式开关O-自适应退化开…

mfc读取txt文件并显示_Python入门丨文件读写

文件读写文件读写,是Python代码调用调用电脑文件的主要功能,能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何保存在电脑上的东西。读取文件读取文件三个步骤:准备工作:首先在桌面新建了一个test文件夹&#x…

c语言 多个线程对同一变量执行memcpy_手把手带你实现线程池

执行与任务分离的组件— 线程池wangbojing/threadpool​github.com多线程技术主要解决了处理器单元内多个线程执行的问题,它可以显著的减少处理器单元的闲置时间,增加处理器单元的吞吐能力。线程池是多线程编程的一个必要组件,并且对于很多编…

python手势识别_Python|使用opencv进行简单的手势检测

简单的手势识别,基本思路是基于皮肤检测,皮肤的颜色在HSV颜色空间下与周围环境的区分度更高,从RGB转换到HSV颜色空间下针对皮肤颜色进行二值化,得到mask: defHSVBin(img):hsvcv2.cvtColor(img,cv2.COLOR_RGB2HSV) lowe…

人工智能选go还是python_深圳人工智能学Python还是go,真实经历分享

深圳人工智能学Python还是go,进行选择深圳Python培训 的时候,第一要思考的就是该机构的口碑如何。如果该家机构没有一定的口碑信誉,就等于搬起石头砸了自己的招牌。为什么突然就那么火了,Python的工资待遇,人工智能&am…

python做excel数据分析统计服_Python也能做到Excel那样,条件统计轻松解决工作需求...

此系列文章收录在公众号中:数据大宇宙 > 数据处理 >E-pd 转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的) 经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦…

java贪吃蛇_如何用Java还原童年回忆?在线教你完成贪吃蛇小游戏

今天我就从零开始来完成这个小游戏,完成的方式也是一步一步的添加功能这样的方式来实现。额,不好意思,放错了,重来第一步完成的功能:写一个界面大家见到的贪吃蛇小游戏,界面肯定是少不了的。因此&#xff0…

jtextpane设置不能选中_在Bridge cc中不能使用camera raw 的编辑功能,解决方法

有时我们在Bridge cc中想对raw文件进行处理,这时需要启动camera raw功能,可是当我们启用时却显示不能编辑,下面说下如何启动使用camera raw 的编辑功能1.打开一张raw格式文件,在文件菜单或者右键选择在camera raw中打开&#xff0…