app 模拟器抓包 burpsuite_APP全加密了,又该如何进行安全测试

当前很多APP对数据包做了强加密,比如利用DES、AES加密等等,尤其是金融类APP,那么当我们利用burpsuite这类抓包工具进行测试的时候会发现,抓取到的数据包全是密文,就没办法进行改包以测试安全问题了。面对这种场景,又该如何进行安全测试?

Frida 工具

这里介绍一个hook工具frida,并以实际案例进行测试分析。首先frida是一个有效的插桩工具,插桩是指将额外的代码注入程序中以收集运行时的信息,可分为两种:

静态二进制插桩[Static Binary Instrumentation(SBI)]:在程序执行前插入额外的代码和数据,生成一个永久改变的可执行文件。

动态二进制插桩[Dynamic Binary Instrumentation(DBI)]:在程序运行时实时地插入额外代码和数据,对可执行文件没有任何永久改变。

Frida就是一个动态二进制插桩工具,其在使用时需要在Android平台上需要配置一个frida-server,二进制动态插桩技术的原理是使用了 ptrace 附加到目标进程上,访问进程的内存、Hook和跟踪以及拦截函数等等。

安装与使用

环境:win10 python3.7

1、下载frida模块

https://files.pythonhosted.org/packages/c3/01/c5ff8c86401066e8d4f747517d7037872879558ca175f3c16850ee0be12a/frida-12.8.20-py3.7-win-amd64.egg

2、进入python3.7目录,利用easy_install离线安装上述下载的模块

65a3708636d561ffc5f7510f5e784998.png

3、pip3.7安装frida-tools

db989cab8573034ea256083762d2ae18.png

4、可以执行安装完目录下的frida-ps看到系统进程验证安装成功

74623f797f5a5060720b45dfd9cd48e8.png

5、下载手机可用server端,跟客户端版本一致

https://github.com/frida/frida/releases

注意:模拟器中下载版本x86版本,不然可能报错:unable to inject library into process without libc

13287b7bfe98f87f34c7fdf46cd4e1b9.png

6、adb shell连接手机,将解压缩server端文件push到手机

1603fd7097343342b4132f3b0866d695.png

7、添加手机中server端执行权限,然后执行

424d5c5768742a08163addef62c16494.png

8、adb 执行端口转发

adb forward tcp:27042 tcp:27042adb forward tcp:27043 tcp:27043

9、进入宿主机frida安装目录,frida-ps -U 看到手机进程验证安装成功

480d3d695eadb7407f8a44c6d456037f.png

10、frida –U –f “package” 进入指定应用,对应用调试,需要开在手机开启应用

49bf7bb897234605810fa63dd93516a6.png

实测案例

先说明一下,frida针对加密数据包的处理是通过hook加密函数,在输入数据进入到加密函数前,将原始数据转发出来,然后再进入加密函数与服务端进行通信,这样我们就可以对原始数据包更改,改后的数据包继续走加密流程并与服务端通信。Frida使用的是python框架,具体hook流程由JavaScript实现,所以需要写一些代码。

整个流程如下:hook目标函数,在原始数据进入到加密函数时,利用js send方法将原始数据发到python框架,并由python发起http请求,这时由burpsuite代理截取原始数据包,并能进行更改,这里中转服务器的作用是原样返回请求的内容,即在burpsuite中更改后的内容最终从中转服务器回到burp,回到python,回到js,回到加密函数,正常进行加密后提交到服务端。

30ba778f6ceab38022b617f58dd7d739.png

1、利用burpsuite抓取APP数据包,发现数据包加密

216cdcf0cc2aab4be3fcf44f5ee63be1.png

2、写hook代码,python模板框架

adad32858c2646440b5a0fce576837d0.png

JavaScript hook具体函数,这里是Java层hook,固定句式,实现加密函数方法,把函数接受到的原始数据通过send方法转发出来

9348c474e5ca13e10ad5624be5c26912.png

3、运行代码进行hook

edb6a91ee093caafca99afc163e14e37.png

4、操作APP,可以看到burp拦截到转发出来的原始数据:testvalue

32aed4209df07d9a608538d772cafa35.png

5、在转发出来的中转服务器对数据包进行更改,字符串后面添加12345

29b8ce85156ec85ab007773dc21b5737.png

6、burpsuite放行数据包,更改后的数据进入加密函数然后向服务端发送更改后的加密请求

275edb10b6e6000f69df1e56db75cb34.png

利用秘钥解密验证,发现确实是更改后的密文

d669a852991e518c0c77b1e29542b153.png

小结

这样便实现了一个简单的Java层hook,可以对加密数据包进行安全测试,当然也只是最基本的。还有对native层的hook,因为有的加密是在底层做的,就需要具备一定的逆向功底。

当然,仅仅这样,我们也发现存在一些问题,我们需要有一定的基础:1、定位具体函数;2、hook代码编写能力;3、加壳的话得先脱壳。

那么有没有更直接的方式,当然有,下节介绍另一种针对加密数据包的处理方式。


始终专注于实战有效的渗透测试、安全测试经验分享,有需要测试案例或源码的欢迎私信交流,共同学习。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值