用户
搜索
  • TA的每日心情
    无聊
    4 天前
  • 签到天数: 21 天

    连续签到: 1 天

    [LV.4]经常看看II

    i春秋签约作家

    春秋认证√作家团颜值担当

    Rank: 7Rank: 7Rank: 7

    7

    主题

    275

    帖子

    1626

    魔法币
    收听
    1
    粉丝
    19
    注册时间
    2017-6-5

    i春秋签约作者

    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者 楼主
    发表于 2017-9-25 16:34:39 131321213
    优秀作者,愧不敢当。
    阔别已久,重出江湖。
    逼先装这,不服打我。

    onls辜釉.jpg



    前言:
    1.本文无码,请自备纸巾。


    2.本文提及的APP因为实现漏洞的关键点涉及到反编译,且APK经过加固及混淆,复现存在难度,并且APP为朋友所在公司的子公司开发,问题已提交一周,虽貌似并没做修复,但决定不对该APP打码。


    主角:
    1.png

    2.png

    硬广:该APP致力于打造一个看脸的世界,注册后分为会员和非会员,成为会员需要上传未P过的原始照片、现场录制的素颜视频,经注册用户投票,当认为该用户颜值较高的票数达到一定比例时,自动认证为gao颜值用户。会员享受被打赏和星探发掘特权。福利:注册时填写邀请码:53503410,若颜值通过审核可得100元会员红包(可提现)。


    渗透:
    首先下载、安装APK,直接抓包先看看:


    3.png

    可以看到参数有三个,分别为:data、sign、requestTime。并且前两个参数的值都被加密了,url解码后的内容有点像base64编码,但是尝试用base64解码后发现是乱码:

    4.png

    并且这三个参数中的任意值只要被修改,数据包发送之后返回的响应都是“验签失败,请重新登录”。也就是服务器对请求的数据是进行加密,并且校验的,如果被篡改了,则不予响应。但是通常加密都会有一个“密钥”,我现在打算反编译该APK,若密钥是被硬编码在APK中的,则应该能在代码中直接找到加密算法和密钥,然后解密出明文。


    关于安卓APK的反编译,百度一下就行了,做技术不可能什么都会,即使你眼里的那些“大牛”,但是你得善于学习和使用搜索引擎,这里我随便贴一篇:教你用最新工具反编译Android apk

    但是这个APK没这么简单,它是被加了壳的,并且代码做了一定的混淆。你按上述通用方法反编译出来的包,都是带着jiagu.qihoo这样的奇怪东西,看不到源码。

    对于这样的,我们还需要做一个脱壳的工作,同样百度大法,我现在说来轻松,但是整个过程我大概弄了半月时间还有多,同样是边学习边尝试,踩了很多坑,在这之前我也没接触过这方面。安全起见这一步不方便细说,同样随便贴一篇:Android 分析秒脱360加固大法

    脱壳、反编译之后:



    5.png

    这里我先去猜测了常见的加密算法,在搜索里尝试搜索“AES”(关于AES加密算法不了解的可以百度):

    6.png

    发现了Key.class这个类(安卓的逻辑代码是JAVA,所以你需要一点JAVA基础,但是表哥可以很负责任的告诉你,我的代码水平几乎就是个渣,所以你也不要怕),我们打开这个类看看源码:

    7.png

    重点看上图AES_KEY()这个函数,它其实就是返回了一个字符串,将上面“1”所指向的Base64编码的字符串进行解码,然后作为函数结果返回。

    我们追踪下AES_Key()这个函数在哪里被调用了,发现在PostHeader.class这个类中有:


    8.png


    重点看这行代码:paramContext = AESEncrypt.encryptCBC(new String(Base64.encode(AppUtil.getAll(paramContext.getApplicationContext()).put("data", localJSONObject1).put("explain", localJSONObject2).toString().getBytes("utf-8"), 0)), Key.AES_KEY());
    你能看到data也出现在了这里面,里面调用的那些方法很多我也不知道是干啥的,但是我们能大概猜测他就是将待会需要传输的data的值经行拼接,然后在AESEncrypt.encryptCBC()函数中进行加密。我们继续追踪encryptCBC()函数:


    9.png

    (通常en开头代表的是编码、de开头代表的是解码),追踪到上图的加密函数那时,其实我也有点懵圈,它并不是直接采用了java自带的依赖里的AES加密方法,而是用了一个看起来自己写的加密方式,之前AES_Key()函数里的也不是最后的密钥,而是一个类似于种子的东西,利用它,再通过一个算法得出密钥。通过百度关键字之后,发现原来是一个第三方的开源加密方式,主页在:http://www.bouncycastle.org/

    通过百度它的调用方法,大概就是将种子进行AES加密,得到加密后的密钥,相对应的还有一个解密函数,也就是:decryptCBC(),为了方便起见,我待会直接调用他的加解密方法。(其实在这中间还有很多坑,比如有JAVA基础的人一眼就能发现上图的源码中private static final String IV_PARAMETER_SPEC = ;这句明显是错误的语法,并没有给字符串参数赋值,其实这里是因为进行了混淆,它赋值的是一个函数,所以反编译不出来,我在这里也卡了相当长的时间,后来只能耐心分析、猜测源码终于给补齐了)


    我把反编译出来的,与加解密相关的包、类copy 到了Eclipse建立了一个新项目,并且抽象成了一个enAndde.class类:

    10.png

    然后在RUN函数里调用我抽象出来的解密类,将我们把之前抓到的被加密的网络数据包里的data密文填入进去:

    11.png

    下图红框中的就是解密之后得到的base64编码的明文:


    12.png


    把明文丢到网上的base64解码器里去解码一下:


    13.png


    成功得到传送的json数据明文(我现在只是截最终的图做演示,其实在我实际的过程中遇到了很多麻烦,代码也在不断修改),
    上图是我在APP中进行虚拟币购买操作时的数据包,这里其实有经验的人一样就能发现问题,左边我框起来的部分,“count”的值是本次购买的虚拟币的数量,“amount”的值是应付的金额。对于购买类的接口,如果让前端来告诉后端这笔订单应该怎么收款,那么是存在很大的风险的,我这里将count的值改为666,amount的值改为0.01,也就是说,原本这笔订单是6元购买30虚拟币的,而现在服务器收到的是0.01元购买666虚拟币。将修改后的数据再调用我自己抽象的加密方法进行加密,然后发送数据包出去,结果提示“交互成功”,并且我账户里也仅扣除1分钱,成功增加了666虚拟币(虚拟币在扣除手续费后是可以提现的)。之后我用虚拟币打赏给里面的“小姐姐”,一口气打赏了价值1000多的虚拟币,成功要来了微信号..我用小号玩的,当时没截图现在懒得弄了,如果大家想看我怎么0成本撩妹的,可以留言,我之后看看贴出来。


    这次的文章素材其实对我来说很复杂,也花了我相当长的时间,主要在于他的加解密方法必须依赖于那个第三方的JAVA包,所以我所有的代码都只能用JAVA来完成(本来是想找到加密方式后用python来写),代码只是被抽象出来了看起来很简单,但其实反编译出来的源码是不完整的,需要我自己去读、分析、补全,然后再针对我需要的功能做修改。整个代码的过程几乎是边百度边完成的。

    APP的问题不止这一个,我这只是举例说明危害性,并且漏洞依然存在,只是被前端的这些安全措施提高了利用门槛。但是大家也不要觉得自己就不行,我代码基础也不好,仅有大概看懂的地步,所以说学习能力对于我们搞技术的来说才是最重要的。

    这次的文章更偏向于技术性,已经尽量简化、简单地来描述,也不知此次的文章风格被不被接受,新朋友可以看看我之前的文章,有啥问题、或者对以后文章的建议也可以在本文下面评论、留言,Onls都会尽量满足。PS:就算你现在看不懂,你起码也可以在下面留言夸夸表哥帅嘛、这社会谁求不着谁呢,混个脸熟没准哪天你有问题找我的时候,我就恰好帮上你了呢。对于伸手党、只看不回复的,Onls最鄙视了。哈哈哈。


    更多骚作:
    游客,如果您要查看本帖隐藏内容请回复


    信息安全菜鸟/社会主义接班人
    发表于 2017-9-25 18:44:52
    天天TM就是撩妹撩妹,对于你这种人,我只想说,老哥带我
    xss  交流群602221356  接收XSS爱好者
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    推荐
    发表于 2017-9-26 11:48:29
    wooyunvip 发表于 2017-9-26 03:04
    草,这明明是腾讯加固的,怎么变成360加固了,去腾讯应用市场下载的 ...

    我这是演示的时候搜的,下载包是在网上找的早期版本下载,早期版本功能少,代码量少一些方便看代码。
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    <li><a href="https://www.ichunqiu.com/" target="_blank" title="I春秋">i春秋</a></li>
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    推荐
    发表于 2017-9-26 09:42:51
    黑桃6 发表于 2017-9-26 01:31
    老哥,我这膝盖你得收!!!!《谁也不服就服你》

    百度大法用得好,菜鸟也能变大佬。
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    推荐
    发表于 2017-9-25 17:45:00
    阿麦大侠 发表于 2017-9-25 09:43
    郑庄公是什么鬼?文章不错,马克慢慢看

    秒天秒地被评为春秋郑庄公。
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    推荐
    发表于 2017-9-29 13:36:19
    庞钢明 发表于 2017-9-28 12:11
    只有C语言功底的可以学吗

    可以啊  其实都是想通的
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    推荐
    发表于 2017-9-29 13:36:31
    yyy1394 发表于 2017-9-28 09:27
    这文章非常好,对了,帅哥,如果不对它进行解密,能搞定吗

    不行
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    yyyxy 管理员 六国战旗移动展示平台! 秦 楚 燕 魏 齐 赵
    沙发
    发表于 2017-9-25 17:02:47
    既然如此,沙发不如给我
    欢迎加入i春秋QQ群大家庭,每人只能任选加入一个群哦!投稿请加我QQ:286894635。
    i春秋-楚:533191896
    i春秋-燕:129821314
    i春秋-齐:417360103
    i春秋-秦:262108018
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    板凳
    发表于 2017-9-25 17:03:56
    yyyxy 发表于 2017-9-25 09:02
    既然如此,沙发不如给我

    唉,世态炎凉、人心不古。
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    膜拜 大神  
    使用道具 举报 回复
    发表于 2017-9-25 17:39:50
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    5#
    发表于 2017-9-25 17:40:50

    终于有人来打破零回复惨案了。。
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    onls辜釉 i春秋签约作家 春秋认证√作家团颜值担当 i春秋签约作者
    6#
    发表于 2017-9-25 17:41:05
    信息安全菜鸟/社会主义接班人
    使用道具 举报 回复
    郑庄公是什么鬼?文章不错,马克慢慢看
    使用道具 举报 回复
    发表于 2017-9-25 17:57:39
    马克学习
    使用道具 举报 回复
    虽然不懂还是要看~
    使用道具 举报 回复
    发表于 2017-9-25 18:55:03
    666 大神 大神
    使用道具 举报 回复
    发表于 2017-9-25 18:58:31
    反编译出来的源码是不完整的
    使用道具 举报 回复
    发表于 2017-9-25 19:26:34
    厉害了,我的哥
    使用道具 举报 回复
    您需要登录后才可以回帖 登录 | 立即注册