小工具知识网

当前位置: 首页 > 行业知识 > 手把手教你反编译小程序

行业知识

手把手教你反编译小程序

2026-11-02 08:24:48 来源:互联网转载

本次实验环境

操作系统: win10 10.0.19042

node: v14.17.0

微信开发者工具: Stable 1.05.2110290

前期准备

  1. 在电脑端安装模拟器工具,这里以夜神模拟器为例,

    • 在模拟器中安装微信:用于微信打开小程序时加载小程序包。
    • 在模拟器中文件管理器:用于查看小程序包,这里使用模拟器自带的Amaze。
    • 文件共享路径:可以通过模拟器的文件助手查看文件共享路径,模拟器中的安卓共享路径对应于电脑共享路径。作用是方便后续找到并复制小程序包。
    • 下载反编译工具

      关注微信公众号“安前码后”,然后发送关键字xcx688即可获取。

开始反编译小程序

获取小程序包

  1. 这里以东方财富小程序为例,在夜神模拟器中登录微信,然后找到并打开东方财富小程序

  2. 打开模拟器中的Amaze文件管理器,进入到以下路径查找源码包(可以根据文件的下载时间,区分出你想要的源码包),不同的小程序中间的那段hash值是不一样的/data/data/com.tencent.mm/MicroMsg/7931eb2bec903760d4266d663b5fbd0e/appbrand/pkg

  3. 拷贝小程序文件包至模拟器共享文件夹,为了方便起见,可以先新建了一个文件夹wxcode,将复制的小程序包放到此文件夹下的东方财富文件夹

  4. 然后在电脑端的共享文件夹中,可以看到刚刚复制的小程序包

开始解包

  1. 进入反编译工具wxappUnpacker项目的根目录,运行yarn install安装依赖包

  2. 在wxappUnpacker项目根目录下,执行解包命令node wuWxapkg.js 。一个小程序一般会有多个包,我们需要找出主包。执行解包命令时,后面的参数需要具体到主包的文件名。经过多次试验总结发现,一般主包是以 _-开头,文件名与其他的文件看起来是不同的。

可以看到命令行输出如下提示:

$ node wuWxapkg.js ../dongFangCaiFu/_-2081057737_66.wxapkgUnpack file ../dongFangCaiFu/_-2081057737_66.wxapkg...Header info:  firstMark: 0xbe  unknownInfo:  0  infoListLength:  6445  dataLength:  2158356  lastMark: 0xedFile list info:  fileCount:  172Saving files...Unpack done.Split app-service.js and make up configs & wxss & wxml & wxs...deal config okdeal js okdeal html okdeal css oksplitJs: F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66\app-service.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 02CB91817FA2198C64ADF986253F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 0FD5E5F37FA2198C69B38DF4E56F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 11EAF9667FA2198C778C91613F8F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 1CC3D0F37FA2198C7AA5B8F4A5BF1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 212D2CB47FA2198C474B44B3E9ED1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 24EFAE017FA2198C4289C606DDFE1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 3CE424D77FA2198C5A824CD01A9F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 44199CD77FA2198C227FF4D0319E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 4C52C3117FA2198C2A34AB16818D1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 4E3F4A367FA2198C28592231639D1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 50E340B47FA2198C368528B3AD5E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 5A0161E27FA2198C3C6709E5BCAF1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 5B1C0EE47FA2198C3D7A66E321EF1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 61219CD57FA2198C0747F4D25F6E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 6249DFF57FA2198C042FB7F293FE1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 680649437FA2198C0E602144E54F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 69160F537FA2198C0F706754BA2E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 6987BC357FA2198C0FE1D432427F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 7B819AE57FA2198C1DE7F2E233DE1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 8AC58DF47FA2198CECA3E5F3B31E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 8ACE1F557FA2198CECA8775277FD1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 8D1643E27FA2198CEB702BE507CD1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 99D2EAB27FA2198CFFB482B564BD1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/arrayLikeToArray.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/arrayWithHoles.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/arrayWithoutHoles.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/asyncToGenerator.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/defineProperty.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/interopRequireDefault.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/iterableToArray.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/iterableToArrayLimit.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/nonIterableRest.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/nonIterableSpread.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/objectSpread2.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/slicedToArray.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/toConsumableArray.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/typeof.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/helpers/unsupportedIterableToArray.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 @babel/runtime/regenerator.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 A2A31AD37FA2198CC4C572D43E9E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 A2E1F3817FA2198CC4879B86A08E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 ADC668017FA2198CCBA0000675CF1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 B33469017FA2198CD552010620FF1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 B4790A047FA2198CD21F6203CEAE1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 C6F555147FA2198CA0933D13385F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 C7D2F7C37FA2198CA1B49FC4CE1F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 C92323547FA2198CAF454B537B2F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 D5D51E667FA2198CB3B37661A5AD1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 D7E073717FA2198CB1861B76F3EE1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 DD9D93E57FA2198CBBFBFBE2D12E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 E174D1B77FA2198C8712B9B0BC0F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 E48C9AB07FA2198C82EAF2B73D3E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 E9AA86447FA2198C8FCCEE438F4E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 F19F4B857FA2198C97F92382008F1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 F4E555647FA2198C92833D6310CE1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 F917D9857FA2198C9F71B182FFCF1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 FE8EF1457FA2198C98E8994269DD1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 FF3491C77FA2198C9952F9C0870E1537.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 app.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/base-modal/modal.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/call-login-modal/call-login-modal.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/downform/downform.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/footbar-share/footbar-share.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/footbar/footbar.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/image-share copy/image-share.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/image-share/image-share.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/kaihuform/kaihuform.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/login-modal/login-modal.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/modal/modal.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/navbar/navbar.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/navigator/navigator.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/openapp copy/openapp.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/openapp/openapp.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/stock-list/stock-list.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/user/user.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 components/zhi-shu/zhi-shu.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/downloadcopy/download.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/index/index.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/kaihu/kaihu.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/kaihuDetail/kaihuDetail.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/download/download.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/market/market.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/stockDetail/stockDetail.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/gubaDetail/gubaDetail.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/protocol/index.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/LoginIndex/LoginIndex.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/timeShare/timeShare.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/timeShareHK/timeShareHK.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/timeShareUS/timeShareUS.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/SearchPage/SearchPage.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/informationDetail/informationDetail.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/LoginPage/Login.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/My/My.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/BindingedEMPage/BindingedEMPage.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/zixun/zixun.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/zixunDetail/zixunDetail.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/gubaPost/gubaPost.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/loginByTel/loginByTel.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/BPTest/BPTest.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/viewDialog/viewDialog.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/test/test.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/bankuai/bankuai.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/data/data.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/me/me.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/error/error.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/AgreementView/AgreementView.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/fissionkhAuth/fissionkhAuth.jsF:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66 pages/fissionkhAuthSucc/fissionkhAuthSucc.jsSplitting "F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66\app-service.js" done.Decompile ./components/base-modal/modal.wxml...Decompile success!Decompile ./components/call-login-modal/call-login-modal.wxml...Decompile success!Decompile ./components/downform/downform.wxml...Decompile success!Decompile ./components/footbar-share/footbar-share.wxml...Decompile success!Decompile ./components/footbar/footbar.wxml...Decompile success!Decompile ./components/image-share copy/image-share.wxml...Decompile success!Decompile ./components/image-share/image-share.wxml...Decompile success!Decompile ./components/kaihuform/kaihuform.wxml...Decompile success!Decompile ./components/login-modal/login-modal.wxml...Decompile success!Decompile ./components/modal/modal.wxml...Decompile success!Decompile ./components/navbar/navbar.wxml...Decompile success!Decompile ./components/navigator/navigator.wxml...Decompile success!Decompile ./components/openapp copy/openapp.wxml...Decompile success!Decompile ./components/openapp/openapp.wxml...Decompile success!Decompile ./components/stock-list/stock-list.wxml...Decompile success!Decompile ./components/user/user.wxml...Decompile success!Decompile ./components/zhi-shu/zhi-shu.wxml...Decompile success!Decompile ./pages/AgreementView/AgreementView.wxml...Decompile success!Decompile ./pages/BPTest/BPTest.wxml...Decompile success!Decompile ./pages/BindingedEMPage/BindingedEMPage.wxml...Decompile success!Decompile ./pages/LoginIndex/LoginIndex.wxml...Decompile success!Decompile ./pages/LoginPage/Login.wxml...Decompile success!Decompile ./pages/My/My.wxml...Decompile success!Decompile ./pages/SearchPage/SearchPage.wxml...Decompile success!Decompile ./pages/bankuai/bankuai.wxml...Decompile success!Decompile ./pages/data/data.wxml...Decompile success!Decompile ./pages/download copy/download.wxml...Decompile success!Decompile ./pages/download/download.wxml...Decompile success!Decompile ./pages/error/error.wxml...Decompile success!Decompile ./pages/fissionkhAuth/fissionkhAuth.wxml...Decompile success!Decompile ./pages/fissionkhAuthSucc/fissionkhAuthSucc.wxml...Decompile success!Decompile ./pages/gubaDetail/gubaDetail.wxml...Decompile success!Decompile ./pages/gubaPost/gubaPost.wxml...Decompile success!Decompile ./pages/index/index.wxml...Decompile success!Decompile ./pages/informationDetail/informationDetail.wxml...Decompile success!Decompile ./pages/kaihu/kaihu.wxml...Decompile success!Decompile ./pages/kaihuDetail/kaihuDetail.wxml...Decompile success!Decompile ./pages/loginByTel/loginByTel.wxml...Decompile success!Decompile ./pages/market/market.wxml...Decompile success!Decompile ./pages/me/me.wxml...Decompile success!Decompile ./pages/protocol/index.wxml...Decompile success!Decompile ./pages/stockDetail/stockDetail.wxml...Decompile success!Decompile ./pages/test/test.wxml...Decompile success!Decompile ./pages/timeShare/timeShare.wxml...Decompile success!Decompile ./pages/timeShareHK/timeShareHK.wxml...Decompile success!Decompile ./pages/timeShareUS/timeShareUS.wxml...Decompile success!Decompile ./pages/viewDialog/viewDialog.wxml...Decompile success!Decompile ./pages/zixun/zixun.wxml...Decompile success!Decompile ./pages/zixunDetail/zixunDetail.wxml...Decompile success!Guess wxss(first turn)...Regard F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66\app.wxss as pure import file.Regard F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66\pages\bankuai\bankuai.wxss as pure import file.Regard F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66\pages\gubaDetail\gubaDetail.wxss as pure import file.Regard F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66\pages\timeShare\timeShare.wxss as pure import file.Import count info: {"./app.wxss":7,"./pages/index/index.wxss":5,"./pages/gubaDetail/gubaDetail.wxss":2,"./timeShareCommon.wxss":4}Guess wxss(first turn) done.Generate wxss(second turn)...Generate wxss(second turn) done.Save wxss...saveDir: F:\webstormProjects\mini-program\dongFangCaiFu\_-2081057737_66Split and make up done.Delete files...Deleted.File done.Total use: 5.626s
  1. 如果想单独执行config、js、wxml、wxss的反编译可以在解包时加-o参数不做后续操作

  2. 工具的其他脚本的用法:

    • node wuConfig.js 将 app-config.json 中的内容拆分到各个文件对应的 .json 和 app.json , 并通过搜索 app-config.json 所在文件夹下的所有文件尝试将 iconData 还原为 iconPath 。
    • node wuJs.js 将 app-service.js (或小游戏中的 game.js ) 拆分成一系列原先独立的 javascript 文件,并使用 Uglify-ES 美化,从而尽可能还原编译前的情况。
    • node wuWxml.js [-m] 将编译/混合到 page-frame.html ( 或 app-wxss.js ) 中的 wxml 和 wxs 文件还原为独立的、未编译的文件。如果加上-m指令,就会阻止block块自动省略,可能帮助解决一些相关过程的 bug 。
    • node wuWxss.js 通过获取文件夹下的 page-frame.html ( 或 app-wxss.js ) 和其他 html 文件的内容,还原出编译前 wxss 文件的内容。
    • node wuWxapkg.js [-o] [-d] [-s=] 将 wxapkg 文件解包,并将包中上述命令中所提的被编译/混合的文件自动地恢复原状。如果加上-o指令,表示仅解包,不做后续操作。如果加上-d指令,就会保留编译/混合后所生成的新文件,否则会自动删去这些文件。同时,前面命令中的指令也可直接加在这一命令上。

导入开发者工具

打开微信开发者工具,导入项目即可。

在本次的东方财富小程序解包后,注意在开发者工具的详情--->本地设置中

  • 勾掉e6转es5(这个小程序貌似并没有使用es6语法)
  • 注意勾选不校验合法域名

    解包其它小程序可能项目配置略有不同,多调试调试。

    扩展小结

    体验版解包

    体验版的需要找到debug开头的文件(形如:debug_xxx 是没有后缀的),然后拿到文件后手动添加wxapkg后缀再执行以上操作,即可完成解包。

    解包时提示是子包

    解决:有些小程序可能采取了分包策略,所以就有一个主包和多个子包之分。经过多次试验总结发现,一般主包是以 _-开头,文件名与其他的文件看起来是不同的。

    写在最后

    今天的干货就分享到这里。欢迎一键三连,持续关注“安前码后”,一个只输出干货而不是随大流的技术号。另外,赚钱的号“韭盾”,也在持续开发中,有投资兴趣的铁子们可以先关注,绝对是好物。 加油,铁子们。

上一篇:域名SSL证书全解析,网络安全的关键保障措施

下一篇:本地服务器家用怎么设置?