作者文章归档:面对疾风吧

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

汇编手记之第一个窗口程序


写在前面

我又来写汇编了,最近搞微信逆向搞的头大。
汇编的话,直接从书里抄代码还是轻松愉快,调用的基本是Windows API,也并不晦涩难懂。
而且,看着自己敲的代码在OD里一行一行的执行,瞬间觉得自己理解了编程的本质(雾)。
这样一个窗口程序,编译后只有2.5kb左右,不知道用C++实现编译出来会多大。

汇编代码

.386
.model flat,stdcall
option casemap:none
;-----------------------------------
; Include
;-----------------------------------
include win

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

js获取网页echarts图表中的数据


写在前面

最近接到某网站的爬虫需求,因为客户与目标网站是通过协议获取的账号,所以不希望从接口获取数据,而网页源代码无法获取完整的canvas数据,怎么办呢,需求还是得做。

实现思路

后来发现,echarts是动态图表,当鼠标移动到某处时,会高亮该处数据,并实时更改某个div的text内容,观察network接口,没有新的请求(也不可能有),说明数据已经存储在某个js变量里了,我就去瞅了一下echarts渲染数据时使用的函数:

var chart = echarts.init(document.getElementById("map"+Id),'write',

Read more

汇编手记之子程序的使用


写在前面

记录结构体、宏定义、解引用指针、子程序以及局部变量的使用。

程序代码

使用masm32编译。
TestProc.asm

.386
.model flat,stdcall
option casemap:none

include windows.inc
include kernel32.inc
include user32.inc

includelib user32.lib
includelib kernel32.lib

include msvcrt.inc
includelib msvcrt.lib
;一个宏,可以实现类似cpp中的ifdef _DEBUG
DEBUG equ 0

Read more

汇编手记之HelloWorld


写在前面

上一篇文章写了nmake的使用,本篇来写一下汇编版本的helloworld。

源程序

注:除特别说明以外,本站的汇编代码均使用masm32编译。
helloworld.asm

.386                                                                    ; 允许使用的指令集
.model flat, stdcall                                                    ; 平坦寻址,标准函数调用约定
option casemap:none                 

Read more

汇编手记之nmake的使用


写在前面

最近在读罗云彬的《Windows环境下32位汇编语言程序设计》,书中推荐使用nmake进行编译,nmake和cmake、以及linux自带的make工具,基本都依赖于makefile,在此记录一下namke语法,方便后面查阅。
ps:nmake.exe是VS的附带工具之一,可以使用everything迅速查找。

makefile

#源文件
ASM = helloworld.asm
#生成的obj文件名
OBJS = helloworld.obj
#生成的exe文件名
EXE = helloworld.exe
#链接参数,如果不需要控制台窗口,将console改为windows
LIN

Read more