免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。
1、前言
前面介绍过很多篇关于web站点以及微信小程序如何做js逆向的案例,有兴趣的老铁可以翻一翻斯叔前面的文章。今天介绍一下app逆向的思路。
2、开始行动
正常配置抓包环境,劫持请求包,首先映入眼帘的就是两个加密的参数,reqdata和signtx(出于保密,原谅重码)
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
这个reqdata看着很像base64,用个工具base64解密一下看下,很好,已经完成了对reqdata加密方式的逆向分析了,就是用的base64对数据进行的加密
还剩一个signtx,顾名思义,他应该是某些参数的sign值校验,不过有的时候后端不一定会校验sign值,所以可以尝试修改reqdata中的内容,重放请求包看看后端的响应情况。
很好,看样子逆向sign值是跑不掉的了
好在这个app没有加壳,我们可以直接通过jadx进行逆向源代码。Jadx打开apk文件之后直接搜索关键字signtx。好在量不是很多,不过我们应该选择哪个代码块呢?这也是一个考验经验以及运气的部分。不过大多数的开发者给参数赋值都会用到set关键字,所以这边斯叔当时是直接选择的名叫setSigntx函数
跳转过去,看起来没什么内容啊
没关系,我们右击这个函数,然后选择查找用例
运气不错,只有一个用例,我们直接双击跳转过去看一下
简单读一下上下文的代码逻辑可以发现,这里说的是如果signty的值等于MD5,那么就调用这个setSigntx函数,然后还巴拉巴拉调用了其他两个函数,最里面的传参是reqtime + reqdata
这个reqtime和reqdata刚好都在请求的数据包中出现了,那我们就可以做出猜想,这个sign是不是就是针对reqtime和reqdata结合后的字符串进行的一系列运算产生的值呢?
带着这个疑问,咱们就可以简单编写一个主动调用的frida代码来验证一下。什么不会写frida的主动调用代码?没关系人工智障会!
把gpt的结果复制粘贴到js脚本中,然后把123的内容换成请求包中的reqtime和reqdata结合后的字符串,最后的脚本长这样式的
然后启动我们万能的frida,加载一下脚本,看看怎么一回事儿,完美,跟请求包内容一摸一样,这说明app就是调用的这个地方进行的sign值计算
下一步就是如何脚本化的持续调用这个sign值加密了,毕竟每次修改请求包之后都需要人工改脚本计算以此sign很麻烦,如果能一键计算就更好了。首先想到的就是编写frida的rpc,可能又会有小伙伴说了,frida的rpc怎么编写?没关系,我们有人工智障!
不过调用rpc终究还是太麻烦了,如果能够直接用python实现加解密操作就更方便了。因为这个sign值计算的地方出现了很多次MD5的关键字,所以我们有理由去猜测是否就是reqtime和reqdata结合后的字符串的MD5值,直接让人工智障写一个python实现MD5的方法
复制粘贴然后Python跑一下,结果正确,nice!
搞到这里就思路清晰了,测试的时候reqdata是base64加密,修改完reqdata内容之后,将新的reqdata的base64内容与reqtime结合的字符串进行md5加密替换signtx的内容就可以正常测试了。
下一步就是借助burp插件让这个过程自动起来了,达成我只需要修改reqdata的内容,然后自动对signtx的值进行计算替换到请求包中进行请求的效果,这里斯叔用的是f0ng大佬写好的burp插件autoDecoder,采用的是接口加密,接口加密的脚本也很简单,人家也提供了很多可供参考的案例。
这里因为只需要对请求包做sign值加密,不用管解密的事情去,所以主要针对encode的案例代码进行修改,这个encrypt()函数保持不变,我们主要修改des_decrypt()函数中的内容(不用在意名称,我直接用的案例脚本,函数名称懒得改了)。通过注释辅助也能明白,encrypt()函数做的操作就是先获取post的参数,然后将获取到的参数经过des_decrypt()函数走一遍之后的返回值再返回给burp。
我给大家准备了一份全套的《网络安全入门+进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程,需要的小伙伴可以扫描下方二维码或链接免费领取~
在des_decrypt()函数中,我们先将获取到的post参数json格式化,然后通过json便捷式的获取reqdata和reqtime的内容,将它们组合称字符串然后进行MD5计算,之后再将值赋值给signtx。最后将json化的内容通过dumps方法变成字符串进行返回。
脚本编写好,我们直接运行即可,这里提示接口开放在http://192.168.73.99:8888/
我们回到burp的插件页面测试一下,选择接口加密页面,设置好我们的加密接口,然后贴入测试加密的数据包,这里我们将signtx的内容改成123,点击加密可以看到左侧的signtx已经成功进行正确的sign值计算,说明我们的脚本是没有问题的。
这时候就可以根据自己的需求设置重发器或者测试器加载脚本了
这时候又引申出来另一个需求,对于脚本小子而言,如何使用sqlmap对reqdata中的参数进行sql注入测试呢?
没关系,那就再编写一个更暴力的脚本呗,只留明文的reqdata内容,然后通过autodecoder的接口对reqdata的内容进行base64加密,然后前后内容拼接起来,之后就跟前面的脚本差不多了,脚本大概长这个样子!
测试的效果是这样的
实际发送一下请求包,能正常请求数据,说明没问题。
需要用sqlmap的时候直接点击代理,
然后sqlmap设置到burp的代理–proxy=http://127.0.0.1:8080
即可自动对sqlmap的sql注入探测流量进行加密了,通过把burp的流量设置代理给yakit可以清晰的看到真正请求服务器的数据包的样子。
更多autoDecoder的用法等待各位老铁的探索。
总结
如果各位老铁对文章有什么意见建议,或者是安全小白刚刚接触安全不知道怎么学习,又或者是渗透测试实习生即将毕业对未来充满了问号等等都可以下方二维码联系我哈,说出你的困惑以及现状,跟强哥1V1激情连麦,强哥可以根据大家的实际情况免费给大家做一做职业规划哈
网络安全学习资源分享:
给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
因篇幅有限,仅展示部分资料,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,请看下方扫描即可前往获取
👉1.成长路线图&学习规划👈
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
👉2.网安入门到进阶视频教程👈
很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,其中一共有21个章节,每个章节都是当前板块的精华浓缩。(全套教程扫描领取哈)
👉3.SRC&黑客文档👈
大家最喜欢也是最关心的SRC技术文籍&黑客技术也有收录
SRC技术文籍:
黑客资料由于是敏感资源,这里不能直接展示哦! (全套教程扫描领取哈)
👉4.护网行动资料👈
其中关于HW护网行动,也准备了对应的资料,这些内容可相当于比赛的金手指!
👉5.黑客必读书单👈
👉6.网络安全岗面试题合集👈
当你自学到这里,你就要开始思考找工作的事情了,而工作绕不开的就是真题和面试题。
所有资料共282G,朋友们如果有需要全套《网络安全入门+进阶学习资源包》,可以扫描下方二维码或链接免费领取~