從零到一開發一版微信助手工具

Github地址https://github.com/suruixin/w...前端

效果圖

自動回覆消息
自動回覆消息.png
自定義回覆文件圖片
自定義回覆文件圖片.png
自定義回覆消息
自定義回覆消息.png
發送消息
發送消息.png
羣發消息
羣發消息.png
取消自動回覆
取消自動回覆.pngvue

背景

hi!你們好,今天給你們帶來個人小工具錦集第二季,關於微信助手的話題,大約在2019年6月份左右,看到了一個很是有意思的項目微信每日說,當時整好入手了樹莓派,想要部署一版,用來作每日天氣推送(原諒我窮,還常常被雨淋)後來在使用的過程當中發現web版微信不支持2017年後註冊的微信號登錄(如今可能更多的微信號),在通過了漫長的查找過程,最終發現了趙慶明老師關於微信hook的課程(目前已下架),決定已這個爲突破口,開發一版微信助手工具,目前項目已經收尾node

奈何本身能力有限,本身寫的dll慘不忍睹,正好有位大佬開源了本身的項目(wechat-bot),因而,我就很是開心的利用electron製做了個人微信助手工具ios

下面來對個人項目進行一個簡單的介紹c++

技術棧

vue-cli3
vuetify
sass
electron-builder
electron-update
node-ffi-napi

關於node-ffi-napi你們能夠參考個人node-ffi從入門到放棄(安裝篇)來進行安裝git

版本要求

node: 12.16.0-x86
node-gyp: 7.0.0
ffi-napi: 2.4.5
微信版本: 2.9.0.123

微信: 2.9.0.123
提取碼:j4m0github

注入器及hook文件地址

hookweb

注入器vuex

目錄

./
├ public                   // 公共文件存放地址
├ src
│  ├ config                // 配置文件存放地址
│  │  ├ config.ts          // 系統中須要用到的不對外公開的配置信息
│  │  ├ index.ts           // 系統中須要用到的初始化配置信息
│  │  └ yaml.ts            // 將初始化配置存放到用戶電腦上,並生成yarm文件
│  ├ enum                  // 數據類型文件存放地址
│  │  ├ ipc.ts             // 主進程和渲染進程通訊
│  │  ├ mainEnum.ts        // 主進程中用到的數據類型
│  │  └ weChat.ts          // 調用微信hook進行數據傳輸的數據類型
│  ├ interface             // 接口存放地址
│  │  ├ api.ts             // 數據請求接口
│  │  ├ config.ts          // 初始化配置信息接口
│  │  ├ mainInterface.ts   // 主進程中用到的接口
│  │  ├ views.ts           // 渲染進程中用到的接口
│  │  ├ vuexInterface.ts   // vuex用到的接口
│  │  └ weChatParams.ts    // 微信hook用到的接口
│  ├ mainProcess            // 主進程存放地址
│  │  ├ BrowserWindow      // 主進程配置文件
│  │  │  └ index.ts
│  │  ├ Inject             // 注入文件
│  │  │  ├ Inject.ts      // 注入文件封裝
│  │  │  └ manage.ts      // 注入文件使用
│  │  ├ ipc                // 主進程與渲染進程通信
│  │  │  └ index.ts
│  │  ├ tray               // 托盤
│  │  │  └ index.ts
│  │  ├ update             // 升級
│  │  │  └ index.ts
│  │  └ index.ts           // 主進程輸出文件
│  ├ render                 // 渲染進程存放地址
│  │  ├ api                // 數據請求
│  │  │  ├ index.ts       // 數據請求出口文件
│  │  │  ├ turing.ts      // 圖靈機器人數據請求
│  │  │  └ weChat.ts      // 微信hook數據請求
│  │  ├ assets             // 渲染進程靜態文件
│  │  │  ├ icon           // icon
│  │  │  ├ images         // 圖片
│  │  │  └ sass           // 全局sass文件
│  │  ├ components         // 組件
│  │  │  ├ Common
│  │  │  │  └ Snackbar.vue // 錯誤提醒
│  │  │  ├ Main             // 通用主頁面
│  │  │  │  ├ components
│  │  │  │  │  ├ content.vue        // 內容區域
│  │  │  │  │  ├ footer.vue         // 底部
│  │  │  │  │  ├ navigation.vue     // 左側邊欄
│  │  │  │  │  └ title.vue          // 頭部
│  │  │  │  └ index.vue  // 通用主頁面入口文件
│  │  │  └ Socket
│  │  │     └ Socket
│  │  │         └ WeChat.ts // 微信hook websocket監聽
│  │  ├ mixins             // 混入
│  │  │  └ index.ts
│  │  ├ plugins            // 插件
│  │  │  ├ tool
│  │  │  │  ├ api.ts     // api文件輸出
│  │  │  │  └ index.ts   // 輸出本目錄下全部文件
│  │  │  ├ common.ts      // 通用方法
│  │  │  ├ main.ts        // vue全局注入
│  │  │  └ vuetify.ts     // vuetify配置
│  │  ├ router             // 路由
│  │  │  ├ index.ts
│  │  │  └ routes.ts
│  │  ├ store              // vuex
│  │  │  ├ modules
│  │  │  │  ├ index.ts
│  │  │  │  ├ main.ts
│  │  │  │  └ userList.ts
│  │  │  ├ actions.ts
│  │  │  ├ getters.ts
│  │  │  ├ index.ts
│  │  │  ├ mutations.ts
│  │  │  └ mutations.ts
│  │  ├ utils              // 工具封裝
│  │  │  ├ axios.ts       // axios封裝
│  │  │  ├ ipc.ts         // 通用主進程通信分裝
│  │  │  └ require.ts     // get post等請求封裝
│  │  └ views              // 頁面
│  │      ├ About          // 關於頁面
│  │      │ └ AboutPage.vue          // 關於頁面
│  │      ├ Home           // 首頁(未想好作什麼樣的)
│  │      ├ SendMsg        // 發送消息頁面
│  │      │ ├ SendMsgPage            // 發送消息頁面相關信息
│  │      │ │ ├ userList            // 好友列表相關
│  │      │ │ │ ├ listItem.vue     // 單好友頁面
│  │      │ │ │ └ listWrapper.vue  // 好友組頁面
│  │      │ │ ├ setParams.vue       // 右側發送消息
│  │      │ │ └ userList.vue        // 好友列表
│  │      │ └ SendMsgPage.vue        // 發送消息頁面入口
│  │      └ Tool           // 配置頁面(未想好作什麼樣的)
│  ├ type                   // 類型別名文件存放地址
│  ├ App.vue
│  ├ background.ts          // 主進程入口
│  ├ main.ts
│  ├ registerServiceWorker.ts
│  ├ shims-node.d.ts
│  ├ shims-tsx.d.ts
│  └ shims-vue.d.ts
├ static
│  ├ dll // 動態連接庫(hook和注入)存放地址
│  └ icon // 打包icon存放地址
├ package.json
├ tsconfig.json
└ vue.config.js

electron簡介

electron 是 GitHub 發佈的跨平臺桌面應用開發工具,使用 JavaScriptHTMLCSS 構建跨平臺的桌面應用程序,其自己是基於 C++ 開發的vue-cli

官網: https://www.electronjs.org/

文檔: https://www.electronjs.org/docs

主進程

向微信進程注入dll

import ffi from "ffi-napi";
import { DllInject } from "@/interface/mainInterface";
import { join } from "path";

export default class Inject {
  private Handel: DllInject;

  public constructor(dllPath: string) {
    this.Handel = ffi.Library(dllPath, {
      Inject: ['int', ["string", "string"]]
    })
  }

  public Inject(dllPath: string, exePath: string): number {
    return this.Handel.Inject(dllPath, exePath);
  }
  public StatusCode(code: number): string {
    const StatusCode: {
      [p: number]: string;
    } = {
      0: "成功",
      1: "沒有找到微信進程,請確認微信是否打開",
      2: "打開進程失敗",
      3: "分配內存空間失敗",
      4: "寫入內存失敗",
      5: "查找LoadLibraryA失敗",
      6: "啓動遠程線程失敗"
    };
    return StatusCode[code]
  }
}

const InDllPath = join(global.__static, "/dll/demoInject.dll");
const BeInDllPath = join(global.__static, "/dll/version2.9.0.123-4.5.7.69.dll");

const WeChatInject = new Inject(this.InDllPath);

WeChatInject.Inject(BeInDllPath, "WeChat.exe");

渲染進程

後續將api整理好,提供地址,內容太多,寫完後發現不是很好,刪除了

致謝

感謝cixingguangming55555大佬提供的wechat-bot

警告

本項目初衷爲解決生活中須要被動回覆消息/發送文件,嚴禁用於打廣告/推廣等行爲

微信助手不屬於騰訊承認的助手工具,因此用於營銷,發廣告等行爲會致使封號,這也是我說嚴禁用於打廣告/推廣的緣由,但願你們能夠在騰訊容許的範圍內進行使用

如二次開發給女友查詢乾溼垃圾,每日天氣播報等等,同時歡迎各位it朋友加好友一塊兒研究前端 c++知識(本人前端一枚,會一些簡單的c++)

相關文章
相關標籤/搜索