首页 > 其他分享 >企业微信HOOK逆向(PC端)——接收消息

企业微信HOOK逆向(PC端)——接收消息

时间:2022-10-14 19:00:14浏览次数:57  
标签:SQLITE return PC int 微信 db HOOK 断点

分析: 1、企业微信收到信息后会存到数据库,或者会先查消息窗口相关信息用以展示。 2、企业微信用的是sqlite数据库 3、从sqlite数据库作为切入点,找到存入数据库时的断点。当然,应该还存在其他的各种方法。   一、找HOOK点 1、分析sqlite执行sql语句的源码:   SQLITE_API int sqlite3_get_table( sqlite3 *db, /* The database on which the SQL executes */ const char *zSql, /* The SQL to be executed */ char ***pazResult, /* Write the result table here */ int *pnRow, /* Write the number of rows in the result here */ int *pnColumn, /* Write the number of columns of result here */ char **pzErrMsg /* Write error messages here */ ){ int rc; TabResult res;   #ifdef SQLITE_ENABLE_API_ARMOR if( !sqlite3SafetyCheckOk(db) || pazResult==0 ) return SQLITE_MISUSE_BKPT; #endif *pazResult = 0; if( pnColumn ) *pnColumn = 0; if( pnRow ) *pnRow = 0; if( pzErrMsg ) *pzErrMsg = 0; res.zErrMsg = 0; 。。。。   SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){ u32 magic; if( db==0 ){ logBadConnection("NULL"); return 0; } magic = db->magic; if( magic!=SQLITE_MAGIC_OPEN ){ if( sqlite3SafetyCheckSickOrOk(db) ){ testcase( sqlite3GlobalConfig.xLog!=0 ); logBadConnection("unopened"); } return 0; }else{ return 1; } }     第一个可能会被执行的包含比较特殊的字符串符号的语句 logBadConnection("unopened");//应该不会被执行,但是会执行调用它的方法,先找到它就可以找到方法的入口,

 

2、搜索unopened字符串,在引用字符串的语句位置找到函数入口处下断点 给企业微信发送消息后断下 Ctrl+F9跳出函数,观察寄存器地址和栈顶地址存放的数据特征。循环往复直到找到熟悉的微信id和一个可能是企业微信id的内存块儿(大概在断点处断下了三次,再往外跳了n次)

 

3、这时的反汇编区不好hook,在dd [[[esi+24]+8]]的内存位置下内存访问端点,然后F9

 

4、这个位置比较适合,读ecx的值即可。在此处下断点,删除其他断点,测试几次看看 发几个文本、图片、视频,发现都会断下,不发送信息,随便用鼠标操作企业微信不会断下。可以采取次地址为hook地址   5、内容结构分析 经过测试分析得出接收内存的偏移对应的大概内容 +0:消息ID +10:微信ID +28:会话ID +50:消息类型 +134:内容 。。。

标签:SQLITE,return,PC,int,微信,db,HOOK,断点
From: https://www.cnblogs.com/cnzryblog/p/16792668.html

相关文章