捕获PC微信支付消息的基本原理

请点击标题下蓝色文字或扫描下方二维码关注。

捕获PC微信支付消息的基本原理

通过上一篇文章的介绍,我们了解到:要想实现微信个人收款码与订单系统的应用,最关键的环节就是要捕获PC微信的支付消息;本文将介绍捕获PC微信支付消息的基本思路以及必要的工具使用。

  • 捕获PC微信支付消息的基本思路

  • ollydbg(od)反汇编工具的使用

  • 汇编调试的一些术语及概念

  • 总结

1

基本思路

我们都知道,当用户扫码支付后,微信会推送支付消息给PC微信端,然后把支付消息显示在 UI 界面上;换句话说,PC微信程序内部肯定有一个接收消息的方法,我们只要找到这个方法位置,然后植入我们的代码,取出其中的数据,在把数据发送给我们的订单系统,再继续执行微信原来的程序代码,这样就能实现我们的目的,也不影响微信正常运行。

那么,我们应该要如何把代码植入到微信程序内部?又如何找到微信接收消息的方法了?答案肯定没那么简单,因为我们也拿不到微信的源代码,是吧!

这里先科普一点小知识,所有 Windows 程序,不管用何种语言开发,最终都是编译成汇编代码的,PC微信程序也不例外;知道这一点,我们就能以汇编的方式来调试修改微信程序了。

2

ollydbg(od)反汇编工具

也许,看到汇编两个字,大多数朋友会望而止步;其实也没那么复杂,毕竟,我们只要了解一些粗浅的知识,达到目的就行,因为本人的观点就是以后用到的,以后再说!

现在我们的 ollydbg 工具是时候闪亮登场了,以下简称od;通俗的讲,od 就是一款汇编语言的调试工具,可以调试任何Windows的程序;借助 od 工具,我们就可以通过对微信程序的代码分析,找到我们需要的接收支付消息方法代码段的地址,然后在该地址植入我们的代码,读取内存数据,就能捕获微信推送的支付消息了。

od 工具的下载和安装这里我就不详细介绍了,请大家自行百度。

接下来,我们来看一下 od 工具如何使用。

2.1、od 工具的界面,如下图:

捕获PC微信支付消息的基本原理

窗口1

跟大多数 Windows 程序一样,包含od的功能菜单和快捷工具条。

窗口2

汇编代码窗口,我们要调试的程序代码就在这里;与大多数软件开发工具里的代码编辑窗口一样,只不过这里显示的是汇编代码而已。

窗口3

CPU寄存器窗口,主要显示每行汇编代码运行时,在CPU内部各寄存器的数据加载情况。

窗口4

内存数据显示窗口,执行每行代码时读入到内存的数据都可以在这里查看。

窗口5

栈数据窗口,主要显示程序代码中,过程或函数跳转时,出入栈的情况。

窗口6

命令执行框,调试的时候需要执行一些命令就在这里。

好了,不太理解,不要紧,先有一个基本概念认识就行。

2.2、od 调试程序基本步骤

2.2.1、加载目标程序

我们要调试一个程序,就必须先把程序加载到 od 中,选择菜单 文件–>打开–>找到应用程序,就可以加载了;如下图:

捕获PC微信支付消息的基本原理

当然,你也可加载正在运行的程序;选择菜单 文件–>附加–>找到加载的进程,就可以了;在选择附加进程窗口这里可以直接输入程序名,可快速的定位到要加载的进程,如输入wechat(微信可执行程序名);如下图:

捕获PC微信支付消息的基本原理

2.2.2、调试相关操作

目标程序加载后,我们就可以开始调试程序了,以下列举了一些常用操作:

快捷键

F8 单步执行一条汇编指令

F2 切换操作,可设置或取消断点

Ctrl+F8 执行到下一个断点

工具条

捕获PC微信支付消息的基本原理

其它的调试命令可以在调试菜单栏下查看,调试菜单与工具条上的快捷图标基本是对应的,大家只要熟悉一下就可以,这跟我们用的大多数软件开发工具调试功能基本相似。

2.3、其它常规操作

命令:dd 内存地址

查看某个内存地址数据的命令,如在命令框输入:dd 0EEAF51C 就可以在内存数据窗口查看该地址的数据

Ctrl+G  表达式跟随,搜索某个地址并跳转到该地址代码段

捕获PC微信支付消息的基本原理

Ctrl+B  二进制串搜索,可以直接搜索机器码

捕获PC微信支付消息的基本原理

各功能窗口:

捕获PC微信支付消息的基本原理

其中常用的功能窗口:

e 程序模块窗口,可以查看并切换当前应用程序加载的所有模块,包括模块的基址,大小,路径等信息。

t 线程窗口,查看当前所有调试线程,可以挂起或继续某些线程执行。

c od 运行时默认加载的窗口,也是代码调试窗口。

b 断点管理窗口,可以删除,失效或生效断点。

r 每次搜索的字符串,搜索结果在这个窗口中展示。

3

术语及概念

在汇编代码调试过程中,经常会涉及到一些专业术语和概念,我们要获取微信支付消息,就必掌握这些概念。

捕获PC微信支付消息的基本原理

地址

Windows 运行程序时,都会把程序代码加载到内存,而在内存中无论是代码指令或者是数据,都有对应的内存地址;我们要想修改某个应用程序的代码,就必须先找这个代码段的地址。

基址

Windows在加载应用程序时,都会把用到的子模块(DLL)载入内存,而每个模块在内存中的起始地址就是基址。

偏移地址

每条指令在内存中的地址相对于所属模块基址的偏移量。

机器码

计算机能识别的二进制代码,在运行程序时,最终都会把汇编代码解析成二进制代码,交给CPU来执行。

汇编指令

相对于机器码的更高级语言,能让地球人读懂。如 mov(赋值指令) jmp(无条件跳转指令)

寄存器

CPU在执行一条指令时,需要把内存中的代码或数据读入到自己的寄存器中,然后在根据寄存器的不同功能来决定要如何执行;可以理解为CPU的小型缓冲区。

实际上就是系统在内存中开辟的特殊内存区域,它是一种运算受限的线性表,有栈顶或栈底界线,有出入栈的操作;主要用来父过程调用子过程时,暂存父过程数据入栈;子过程执行完成后在出栈继续往下执行。

4

总结

找到PC微信程序的接收支付消息方法的地址,植入代码,捕获支付消息;

掌握 od 工具的基本功能,通过调试PC微信程序,找到微信接收支付消息的代码。

下一篇,介绍如何找到PC微信推送支付消息的方法

获取全套内容,请直接扫描下方二维码关注一下!

捕获PC微信支付消息的基本原理

上一篇:OD之绕过序列号验证(二)


下一篇:二进制部署K8s集群第5节之私有仓库Harbor搭建