新版飞信聊天记录逆向分析全过程

自学逆向有段时间了,今天来一帖!

直接进入正题:

安装飞信,登录飞信,制造一点聊天记录。
在 C:\Users\%用户名%\Documents\Fetion\"飞信号" 路径下发现了一个文件 V5_History.dat (可以在飞信设置里面点击打开历史记录文件位置直接过去)
看名称就知道啦,飞信数据库文件就是这货。
UE打开观察此文件,一看就知道肯定经过加密的。不做多的解释
<ignore_js_op>
打开飞信主目录,观察飞信目录中的dll。
看dll名称,猜测消息记录处理的dll,飞信主目录内发现目录 Data\History,目录中有个History.dll,猜测这货是处理历史记录的dll
于是打开OD,OD打开Fetion.exe,ALT+E 跟随History.dll,大概喵了几眼,然后CTRL+N查看模块中的名称,
发现一个_FhOpenDB,看名称就知道这是干嘛的了,根据OD显示,此函数出自Fhlib.dll,于是用 eXeScope 查看此dll的导入导出信息
在导入信息中发现导入了ADVAIP.DLL(非常重要!!!!),此DLL是Windows自带的加密算法库,于是打开 IDA Pro,准备开始分心Fhlib.dll.
在Import表里面发现了 CryptCreateHash、CryptHashData、CryptDeriveKey、CryptDestroyHash等很显眼的函数!!
感觉告诉我,这就是解码部分,
于是逆向了这部分代码,完成过后用OD跟踪,确定这几个函数的可变参数内容,哈哈,最重要的生产hash和key的密钥居然是飞信号,立刻打开VS写代码,
一举成功,成功将V5_History.dat解码,用UE打开观察解码后的文件,我艹!!文件签名好熟悉,这不是我常用的 sqlite3 么?而sqlite3是个轻量级小型开源数据库。
接着用数据库可视化查看工具查看数据库内容,聊天记录一览无遗。破解成功。
附上代码!!!

[C++] 纯文本查看 复制代码

view source

print?

01 * - 将解密的数据库文件放入系统临时目录
02 */
03 int IS_FetionV5History::DeCryptFetionDB()
04 {
05 HCRYPTPROV hProv = NULL;
06 HCRYPTHASH hHash = NULL;
07 LPCTSTR lpszPwd = (LPCTSTR)szFetionNum;//密码,飞信号
08 HCRYPTKEY hKey = NULL;
09  
10 CryptAcquireContext(&hProv, 0, "Microsoft Enhanced Cryptographic Provider v1.0", 1, 0xF0000000);
11 CryptCreateHash(hProv,0x8004,0,0,&hHash);
12 CryptHashData(hHash,(const BYTE *)lpszPwd,strlen((const char *)lpszPwd),0);
13 CryptDeriveKey(hProv,0x6801,hHash,0,&hKey);
14 CryptDestroyHash(hHash);
15  
16 /**************************************************************/
17 HANDLE pInFile,pOutFile;//文件句柄
18 DWORD dwReadLen = 0x400 ,dwReadSize ,dwWriteSize;//想要读取的数据长度;实际读取文件大小;实际写入数据
19  
20 {//打开源文件
21 pInFile = ::CreateFile(strEvidencePath.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING,
22 FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_READONLY, NULL); //用这个函数比OpenFile好
23 if( pInFile == INVALID_HANDLE_VALUE)
24 {
25 CloseHandle(pInFile); //一定注意在函数退出之前对句柄进行释放。
26 return -1;
27 }
28 }
29 {//打开写入文件
30 pOutFile = ::CreateFile(strDstPath.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
31 FILE_ATTRIBUTE_NORMAL, NULL); //用这个函数比OpenFile好
32 if( pOutFile == INVALID_HANDLE_VALUE)
33 {
34 CloseHandle(pOutFile); //一定注意在函数退出之前对句柄进行释放。
35 return -1;
36 }
37 }
38 /**************************************************************/
39 BYTE szBuf[0x400 + 1] = {0}; //__in__out 输入加密内容,输出解密后内容
40  
41 //循环读取文件
42 do
43 {
44 ReadFile(pInFile, szBuf, dwReadLen, &dwReadSize, NULL);
45  
46 if (dwReadLen < dwReadSize)
47 CryptDecrypt(hKey,0,TRUE,0,szBuf,&dwReadLen);
48 else
49 CryptDecrypt(hKey,0,TRUE,0,szBuf,&dwReadSize);
50 //写入文件
51 WriteFile(pOutFile,szBuf,dwReadSize,&dwWriteSize,NULL);
52  
53 memset(szBuf,0,0x400 + 1);
54 }while( dwReadSize == dwReadLen);
55  
56 CloseHandle(pInFile);
57 CloseHandle(pOutFile);
58 return 0;
59 }//DeCryptFetionDB()

https://www.0xaa55.com/forum.php?mod=viewthread&tid=1787&extra=page%3D1

时间: 2024-11-05 14:07:03

新版飞信聊天记录逆向分析全过程的相关文章

IOS逆向分析——GL脚本的提取

总结:要逆一个程序必须清楚地知道程序的结构和常用的API函数,不清楚一个程序而去逆出结果是不可能滴 首先是glsl脚本运行的全过程,第一步是为shader的运行创建一个容器GLuint glCreateProgram(void),第二步是把编译好的shader附加到程序void glAttachShader(GLuint program, GLuint shader),编译好的shader可以是多个所以第二步可以重复多步把每一个编译好的一一附加到程序,顶点shader和像素shader一一成对,

路由器逆向分析------MIPS系统网络的配置(QEMU)

本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69378333 MIPS系统网络的配置  使用QEMU 模拟正在运行的MIPS系统并配置MIPS系统网络,这样本地主机ubuntu系统就可以和QEMU虚拟机进行网络通讯和传输数据了.在进行MIPS程序的测试时是很有用处. 01.获取安装依赖文件,执行下面的命令: $ sudo apt-get install bridge-utils uml-utilities 02.修改 ubun

利用漏洞溢出掉360安全卫士逆向分析

注:本文测试环境为360安全卫士9.0,最新版的安全卫士已修复此漏洞 现象 某个木马运行后可以关闭360安全卫士,经过逆向分析发现该木马只是简单运行了以下代码: /* HMODULE h360 =GetModuleHandle(TEXT("safemon.dll")); int i = 0; for (i = 0; i<0x30000; i++) { if (memcmp((BYTE *)(h360+i), "\x83\xEC\x10\x56\x8D\x44\x24\x

c++反汇编与逆向分析 小结

第一章  熟悉工作环境和相关工具1.1 熟悉OllyDBG  操作技巧1.2 反汇编静态分析工具 IDA(最专业的逆向工具)    快捷键    功能     Enter     跟进函数实现     Esc       返回跟进处    A         解释光标处的地址为一个字符串的首地址     B         十六进制数与二进制数转换    C         解释光标处的地址为一条指令     D         解释光标处的地址为数据,没按一次将会转换这个地址的数据长度   

Android逆向分析(2) APK的打包与安装

http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之鱼不如授之以渔,只有知道一些基本原理,才能让我们以后能自行解决更多问题. 那么,你知道么?从我们在Android Studio中,点击run,

逆向分析智能窗帘频射协议

近来我热衷于对家庭自动化设备的破解,然后将它们添加到我的Homekit集成包之中.这事情要从几个月前说起,当时我爸订购了大批量的RAEX 433MHz射频电动窗帘,以替代老式的手动式窗帘. 注意:你可以在Spotlight网店搜索Motion Motorised Roller Blind找到该窗帘. 我对这个电动窗帘非常满意,有了它我就不用跑上跑下的去打开/关闭窗户,可是为了控制它们,你需要购买RAEX的遥控器.RAEX有许多不同类型的遥控器产品,其中我选择购买了以下两种遥控器: R 型遥控器

Android动态逆向分析工具ZjDroid--脱壳神器

项目地址:https://github.com/BaiduSecurityLabs/ZjDroid 前提条件: 1.Root手机一部 2.须要通过Xposed installer( http://dl.xposed.info/latest.apk)安装Xposed Framework; 一.ZjDroid工具介绍 ZjDroid是基于Xposed Framewrok的动态逆向分析模块,逆向分析者能够通过ZjDroid完毕下面工作:1.DEX文件的内存dump2.基于Dalvik关键指针的内存Ba

逆向分析底纹

工作需要会被要求还原某个证书底纹,一般解决的思路是到网上找,如果找到了就直接用,如果找不到了相同的就找近似的凑合用,如果连近似的底纹都没有那我们是不是就没有办法了呢?有的,我们可以直接逆向分析出它最基本的单元,然后用photshop的填充功能生成即可. 既然用的是逆向分析,那么我们应该知道正向是怎么回事! 一般证书底纹是由一张二方连续贴图或者四方连续贴图拼接而成的,我这里称这张贴图为原子贴图,原子贴图的特征为"它是底纹里面最基本的那个单位,不能被拆分了",只要制作好了这个原子贴图,那么

TI(德州仪器) TMS320C674x逆向分析之一

一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地方,后面再慢慢修改. 二.正向开发流程 C语言开发,开发工具使用CCS(Code Composer Studio,基于eclipse开发的),有过开发经验的都会很容易上手,新建test工程,选择C674x,输出文件为ELF格式,如图所示: 编译成功后,会生成test.out文件(ELF格式). 使用