请点击标题下蓝色文字或扫描下方二维码关注。
通过上一篇文章的介绍,我们了解到:要想实现微信个人收款码与订单系统的应用,最关键的环节就是要捕获PC微信的支付消息;本文将介绍捕获PC微信支付消息的基本思路以及必要的工具使用。
-
捕获PC微信支付消息的基本思路
-
ollydbg(od)反汇编工具的使用
-
汇编调试的一些术语及概念
-
总结
1
基本思路
我们都知道,当用户扫码支付后,微信会推送支付消息给PC微信端,然后把支付消息显示在 UI 界面上;换句话说,PC微信程序内部肯定有一个接收消息的方法,我们只要找到这个方法位置,然后植入我们的代码,取出其中的数据,在把数据发送给我们的订单系统,再继续执行微信原来的程序代码,这样就能实现我们的目的,也不影响微信正常运行。
那么,我们应该要如何把代码植入到微信程序内部?又如何找到微信接收消息的方法了?答案肯定没那么简单,因为我们也拿不到微信的源代码,是吧!
这里先科普一点小知识,所有 Windows 程序,不管用何种语言开发,最终都是编译成汇编代码的,PC微信程序也不例外;知道这一点,我们就能以汇编的方式来调试修改微信程序了。
2
ollydbg(od)反汇编工具
也许,看到汇编两个字,大多数朋友会望而止步;其实也没那么复杂,毕竟,我们只要了解一些粗浅的知识,达到目的就行,因为本人的观点就是以后用到的,以后再说!
现在我们的 ollydbg 工具是时候闪亮登场了,以下简称od;通俗的讲,od 就是一款汇编语言的调试工具,可以调试任何Windows的程序;借助 od 工具,我们就可以通过对微信程序的代码分析,找到我们需要的接收支付消息方法代码段的地址,然后在该地址植入我们的代码,读取内存数据,就能捕获微信推送的支付消息了。
od 工具的下载和安装这里我就不详细介绍了,请大家自行百度。
接下来,我们来看一下 od 工具如何使用。
2.1、od 工具的界面,如下图:
窗口1
跟大多数 Windows 程序一样,包含od的功能菜单和快捷工具条。
窗口2
汇编代码窗口,我们要调试的程序代码就在这里;与大多数软件开发工具里的代码编辑窗口一样,只不过这里显示的是汇编代码而已。
窗口3
CPU寄存器窗口,主要显示每行汇编代码运行时,在CPU内部各寄存器的数据加载情况。
窗口4
内存数据显示窗口,执行每行代码时读入到内存的数据都可以在这里查看。
窗口5
栈数据窗口,主要显示程序代码中,过程或函数跳转时,出入栈的情况。
窗口6
命令执行框,调试的时候需要执行一些命令就在这里。
好了,不太理解,不要紧,先有一个基本概念认识就行。
2.2、od 调试程序基本步骤
2.2.1、加载目标程序
我们要调试一个程序,就必须先把程序加载到 od 中,选择菜单 文件–>打开–>找到应用程序,就可以加载了;如下图:
当然,你也可加载正在运行的程序;选择菜单 文件–>附加–>找到加载的进程,就可以了;在选择附加进程窗口这里可以直接输入程序名,可快速的定位到要加载的进程,如输入wechat(微信可执行程序名);如下图:
2.2.2、调试相关操作
目标程序加载后,我们就可以开始调试程序了,以下列举了一些常用操作:
快捷键
F8 单步执行一条汇编指令
F2 切换操作,可设置或取消断点
Ctrl+F8 执行到下一个断点
工具条
其它的调试命令可以在调试菜单栏下查看,调试菜单与工具条上的快捷图标基本是对应的,大家只要熟悉一下就可以,这跟我们用的大多数软件开发工具调试功能基本相似。
2.3、其它常规操作
命令:dd 内存地址
查看某个内存地址数据的命令,如在命令框输入:dd 0EEAF51C 就可以在内存数据窗口查看该地址的数据
Ctrl+G 表达式跟随,搜索某个地址并跳转到该地址代码段
Ctrl+B 二进制串搜索,可以直接搜索机器码
各功能窗口:
其中常用的功能窗口:
e 程序模块窗口,可以查看并切换当前应用程序加载的所有模块,包括模块的基址,大小,路径等信息。
t 线程窗口,查看当前所有调试线程,可以挂起或继续某些线程执行。
c od 运行时默认加载的窗口,也是代码调试窗口。
b 断点管理窗口,可以删除,失效或生效断点。
r 每次搜索的字符串,搜索结果在这个窗口中展示。
3
术语及概念
在汇编代码调试过程中,经常会涉及到一些专业术语和概念,我们要获取微信支付消息,就必掌握这些概念。
地址
Windows 运行程序时,都会把程序代码加载到内存,而在内存中无论是代码指令或者是数据,都有对应的内存地址;我们要想修改某个应用程序的代码,就必须先找这个代码段的地址。
基址
Windows在加载应用程序时,都会把用到的子模块(DLL)载入内存,而每个模块在内存中的起始地址就是基址。
偏移地址
每条指令在内存中的地址相对于所属模块基址的偏移量。
机器码
计算机能识别的二进制代码,在运行程序时,最终都会把汇编代码解析成二进制代码,交给CPU来执行。
汇编指令
相对于机器码的更高级语言,能让地球人读懂。如 mov(赋值指令) jmp(无条件跳转指令)
寄存器
CPU在执行一条指令时,需要把内存中的代码或数据读入到自己的寄存器中,然后在根据寄存器的不同功能来决定要如何执行;可以理解为CPU的小型缓冲区。
栈
实际上就是系统在内存中开辟的特殊内存区域,它是一种运算受限的线性表,有栈顶或栈底界线,有出入栈的操作;主要用来父过程调用子过程时,暂存父过程数据入栈;子过程执行完成后在出栈继续往下执行。
4
总结
找到PC微信程序的接收支付消息方法的地址,植入代码,捕获支付消息;
掌握 od 工具的基本功能,通过调试PC微信程序,找到微信接收支付消息的代码。
下一篇,介绍如何找到PC微信推送支付消息的方法
获取全套内容,请直接扫描下方二维码关注一下!