草庐IT

小程序渗透测试系列(一)解密与解包及抓包环境搭建

SpaceSec安全团队 2023-08-01 原文

声明:本文在FreeBuf首发,首发链接为:https://www.freebuf.com/articles/network/325498.html

目前,小程序的应用可以说相当普遍,在渗透测试和外部打点时,如果对目标系统没有有效的思路时,不妨试着从小程序下手。

解密与解包

获取小程序源码的方式有很多种,可以通过夜神这类安卓模拟器、iOS、安卓手机等获取到小程序包,而PC端的小程序包则进行了相应的加密。这里就以比较复杂PC端为例展开讲解。

找到目标小程序包

  1. 一般小程序包位置位于微信文件管理目录的 \WeChat Files\Applet\ 目录下

  1. 打开相应目录后,再打开需要测试的微信小程序,这时就会生成相应的包,再根据时间进行排序,这样就能很快定位到目标小程序

  1. 逐一开打目录,可以找到 .wxapkg 结尾的包,这里选择主包 __APP__.wxapg

解密

新版的PC小程序需要先解密才能进行反编译,关注公众号 SpaceSec安全团队,回复关键字 “小程序”,即可获得解密工具

双击打开解密工具,选择对应小程序包的位置,需要注意的是,不能将包拷贝到其他目录,否则会无法获取到小程序的ID,导致解密失败;同时不能删除工具下的 wxpack 目录,这是解密结果的目录

解包

在 wxpack 目录下找到对应同名的小程序包

  1. 下载 nodejs,一直下一步安装即可

  2. 下载解包工具

    git clone https://github.com/wanliofficial/wxappUnpacker.git
    
  3. 安装依赖

    npm install
    
  4. 解包

    node wuWxapkg.js <wx_mini_progranm_file_path>
    

    解包成功后,会得到如下文件

这里仅演示解密主包,如果小程序有其他分包,可以用同样的方法进行解密和解包,但是在反编译分包时,需要带上 -s 参数,如下

node wuWxapkg.js -s=../ xxxx.wxapkg

../ 表示结果输出目录

xxxx.wxapkg 表示分包位置

抓包环境搭建

小程序的抓包环境也有非常多的搭建方式,同样可以采用模拟器或者移动端,可以参考APP抓包的方式,这里同样是以PC端为例,搭建一个 Wechat -> Proxifier -> Burp 的抓包环境

将Burp的证书安装到系统中

注意是系统,不是浏览器,否则将抓不到 HTTPS流量

  1. 访问Burp代理端口,下载证书

  2. 安装证书

    双击打开证书,点击确定

    根据图示依次点击,注意要选择为 受信任的根证书颁发机构

    然后一路下一步即可

Proxifier配置

  1. 配置代理服务器

    填入Burp代理的IP和端口,选择协议为 HTTPS

  2. 添加规则

    由于系统的流量会比较多,如果不设置指定的规则,会有许多干扰流量,不方便后续的渗透测试

    点击Browser,选择小程序的主程序,在Windows下文件名为 wechatapp.exe ,在 MacOS下名为 Mini Program.app ,这里我用 search Everything 搜索文件名,定位到相应位置再打开

    选择好应用后,操作点击刚刚配置好的Burp代理服务器

    最后再将默认的流量设置为直接连接即可

    再把设置的规则 mini-program前面的选框勾上,就能进行抓包了

后记

SpaceSec安全团队热衷分享网络安全相关的技术,希望能和各位师傅们一同成长,后续更新内容将会在公众号中持续更新,欢迎关注交流呀~

声明

  1. 本文初衷为分享网络安全知识,请勿利用技术做出任何危害网络安全的行为,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,与SpaceSec安全团队及作者无关!
  2. 文章中部分学习内容来自于网络,回馈予网络,如涉及版权问题,请联系删除。
  3. SpaceSec 保留对文章绝对的解释权,转载与传播时须保证文章的完整性,同时标明出处。未经允许,禁止转载或用于商业用途。
  4. 加小编,进内部技术交流群,还有不定期福利,微:SpaceSec_S

有关小程序渗透测试系列(一)解密与解包及抓包环境搭建的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  3. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  4. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  5. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  6. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  7. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  8. ruby - Ruby 的 Hash 在比较键时使用哪种相等性测试? - 2

    我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。

  9. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  10. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

随机推荐