分类目录归档:C语言

在目标进程中构造函数


写在前面

也做了一段时间的Windows逆向,编写了包含一系列API的WeChat机器人,将dll注入目标进程后,调用就成了问题,要调用,就要知道api函数的地址。
想要搞到地址,就要使用GetProcAddress这个函数,可是这个函数需要两个参数,CreateRemoteThread只能传递一个参数,怎么办呢?这里提供两种解决方案。

获取RVA

这种方案比较简单,主要思路就是把dll加载到自身进程,再通过函数地址 - 模块句柄的方式获取到目标函数的RVA。
然后使用GetModuleHandle拿到远程进程中的模块句柄,加上RVA就得到了函数地址。
这种办法自然也有局限性,比如64位进程无

Read more

PC微信逆向--离线解密数据库


写在前面

前面的几篇文章,已经找到sqlite3_exec函数并调用,也实现了数据库在线备份,本篇文章,尝试定位保存数据库密码的基址,并编写一个离线解密工具。

回顾

在开始之前,要先回顾一下之前得到的结果: 数据库初始化

785BE313    8D55 CC         lea     edx, dword ptr [ebp-34]
785BE316    52              push    edx
785BE317    8B08            mov     ecx, dword ptr [eax]
785BE319    8B06            mov 

Read more

PC微信逆向--在线备份数据库


写在前面

在前面三篇文章,已经找到数据库句柄、sqlite3_exec函数和一系列备份用的函数地址,本篇文章,尝试完成微信数据库在线备份。

回顾

数据库句柄

[[WeChatWin.dll + 0x222F3FC] + 0x1888][[WeChatWin.dll + 0x222F3FC] + 0x188C]

函数地址

微信版本:3.6.0.18

sqlite3_open = 1138ACD0
sqlite3_backup_init = 1131C110
sqlite3_backup_step = 1131C510
sqlite3_sleep = 1138B510
sqlite3_backu

Read more

PC微信逆向--定位备份sqlite数据库相关函数


写在前面

上一篇文章,介绍了如何使用找到的数据库句柄和sqlite3_exec函数执行SQL,本篇文章,来尝试定位微信中备份sqlite数据库的相关函数,为下一篇文章要实现的在线备份做铺垫。

备份函数

开始找之前,要明确需要找的目标,先看一段别人写的备份函数:

int backupDb(sqlite3* pDb, const char* szFilename,
    void(*xProgress)(int, int)
) {
    int rc;
    sqlite3* pFile;
    sqlite3_backup* pBackup;
    //打开数据库
    rc = s

Read more

PC微信逆向--调用sqlite3_exec执行SQL


写在前面

上一篇文章,实现了定位保存微信数据库句柄的容器和微信内部的sqlite3_exec函数地址,这一篇文章,尝试使用得到的数据库句柄和sqlite3_exec,来查询数据库中的内容。

回顾

首先回顾一下上篇文章:PC微信逆向--定位sqlite3_exec和数据库句柄得到的结果,IDA中sqlite3_exec的地址是0x11356570,对应的偏移是0x11356570 - 0x10000000 = 0x1356570,对应微信中的地址:WeChatWin.dll + 0x1356570
保存数据库句柄的容器首地址:[[WeChatWin.dll + 0x222F3FC] + 0x18

Read more

PC微信逆向--定位sqlite3_exec和数据库句柄


写在前面

最近在做PC端微信逆向,搞定了基本的收发消息,通讯录获取等,这期间遇到一个小小的问题,从通讯录获取到的内容不全,除非登录后手动点击过某个好友,不然获取不到头像、V3等,所以产生了解密数据库的想法。

收集资料

首先要明确一个想法,这个世界很大,想做的事情,至少90%都可能是别人做过的,有些人会把他们的经历分享到互联网上,我们可以利用这些知识,让自己不需要从0开始。 在这个日新月异的时代,技术存在时效性,找到的资料可以作为参考,我们需要做的,是更新替换那些过期的内容,让别人分享的东西在重新跑起来。 下面是我找到的一些资料,讲的都很详细:

  1. 一个系列教程,通过已打开的数据库句柄完成在线备份

Read more

PC微信逆向--看看哪些好友删除了自己


写在前面

搞微信逆向也有一段时间了,实现了发送文本、图片、文件、名片、xml文章消息,以及获取好友列表,查询好友信息
上面这些功能足够做一个发单机器人。但对我来讲,并没有什么实质的用处,所以,又查了点无痕清粉的资料,配合通讯录就可以看看哪些好友偷摸把自己删了。
将不会介绍自动删除好友的东西,想做无痕清粉的自己研究哈(ps:被封不关我事)

微信版本

微信电脑版3.6.0.18

资料

两篇资料都来自看雪论坛:
Dump微信PC端的界面Duilib文件
微信无痕清粉分析过程-附源码地址
感谢KongKong20大佬

Duilib界面

思路仍然适用于微信电脑版3.6.0.18版本,IDA如果搜不到字符

Read more

PC微信逆向--获取通讯录


写在前面

微信版本:3.5.0.46
之前完成了发送文本消息和图片消息功能,但是发送的时候,需要指定对方的wxid,这可不是个简单的事情,毕竟微信给用户看的一般是自定义的微信号,所以需要获取到通讯录,然后根据昵称啊、微信号、备注一类的东西搜索wxid出来。

思路

参考是B站up主Hellmessage的视频,指路:Hellmessage
微信登录过程中会同步服务器中的好友列表到内存中,这一块数据以链表形式存在,很少发生变化,只要找到头结点,就能获取到整个通讯录,需要做的是定位头结点的偏移。

定位过程

启动微信,搜索某个好友信息(utf-16),wxid、签名、昵称什么的都可以用,哪个出来的少搞

Read more

PC微信逆向获取聊天表情


写在前面

PC微信版本:3.5.0.46
今天有个老哥提出需求,问我能不能把微信的表情包保存到本地,因为之前找到过未加密图片数据的Hook点,本来以为差不多的,然而并不是,所以有了这篇文章。

思路

首先还是在接收消息的地方下断,发一个表情,查看消息内容,把xml数据拷贝出来,看看都用到了哪些属性,然后在OD里右键-查找-查找所有字串,搜索某个属性,把push这些属性的指令都下断。

然后再发一个表情消息,会在某个push属性的地方断下,取消掉之前所有的断点,再BP CreateFileW,然后一直运行直到CreateFileW的路径包含CustomEmotion,此时记下文件句柄(eax),取消

Read more

Python通过COM口调用微信发消息CALL


写在前面

赶在二月底来更新。
WeChat版本:
3.5.0.46
编译环境:
Windows10 Pro
VS 2019 Community

实现思路

思路,之前的文章基本讲过:

  1. 编写32位DLL,添加内联汇编调用微信发消息CALL
  2. 开辟远程进程,在远程进程中开辟远程线程和写入DLL绝对路径
  3. 调用LoadLibrary让微信加载自己的DLL
  4. 将DLL加载进自己创建的exe进程中,计算导出函数的偏移
  5. 以同样的方式,在远程进程中写入数据,创建远程线程调用目标函数
  6. 创建32位ATL简单对象,编写注入、调用、卸载等一系列接口
  7. 注册COM组件
  8. 64/32位Python调用

Read more