代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
提取s60v5微信的本地存储文件内容
作者:
price
/ 发布于
2012/6/12
/
637
S60V5系统的微信消息提取,献给还在用塞班的童鞋和师妹,代码参考umdbuilder,主要提取msg和contact,难免存在bug,可用UltraEdit查看文件的16进制存储格式,开始的0x40内容具体意义不详。其后则是连续的存储单元,有些是固定大小的,有些是固定大小的整数倍,恕不详述。有些字段的意义不详,可自行摸索。
<div>/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package org.youyou.weixin.reader;</div> import org.youyou.weixin.reader.MMBlockData; import org.youyou.weixin.reader.MMBlockFunc; import java.io.*; import org.price.util.FileUtil;</div> <div>/** * * @author Verse */ public abstract class BaseReader {</div> <div> protected int pointer = 0; protected int baseBlockLen = 0x88; protected int headLen = 0x40; protected MMBlockFunc blockFunc = new MMBlockFunc(); protected byte[] bytes = null;</div> <div> public BaseReader() { } <div> public BaseReader(byte[] bytes) { this.bytes = bytes; } <div> public void init() { } <div> public void read() throws IOException { parseHeader(); try { readBlocks(); } catch (Exception e) { } <div> for (MMBlockData block : blockFunc.getDatas()) { parseBlock(block); } } <div> public void setHeadLen(int headLen) { this.headLen = headLen; } <div> protected int getStr(byte[] bytes, int start, int len, ByteArrayOutputStream out) {</div> <div> if (start % baseBlockLen == 0) { start += 0x10; } while ((start + len) / baseBlockLen != (start) / baseBlockLen) { int baseline = (start / baseBlockLen) * baseBlockLen; if (start % baseBlockLen != 0) { baseline += baseBlockLen; } out.write(bytes, start, baseline - start); len = len - (baseline - start); start = baseline + 0x10; } out.write(bytes, start, len); start = start + len; return start; } <div> protected int addOffset(int point, int offset) { if (point % baseBlockLen == 0) { point += 0x10; } while ((point + offset) / baseBlockLen != (point) / baseBlockLen) { int baseline = (point / baseBlockLen) * baseBlockLen; if (point % baseBlockLen != 0) { baseline += baseBlockLen; } offset = offset - (baseline - point); point = baseline + 0x10; } <div> return point + offset;</div> <div> } <div> public int bytesToInt(byte... bytes) { return FileUtil.bytesToInt(bytes); } <div> public static String getString2(byte[] bytes) {</div> <div> return getString2(bytes, 0, -1); } <div> public static String getString2(byte[] bytes, int stat_p) {</div> <div> return getString2(bytes, stat_p, -1); } <div> public static String getString2(byte[] bytes, int stat_p, int end_p) { int point = stat_p; if (end_p < 0) { end_p = bytes.length; } for (; point < end_p; point++) { if (bytes[point] == (byte) 0x00) { break; } } String result = null; try { result = new String(bytes, stat_p, point - stat_p, "utf-8"); } catch (Exception e) { } return result; } <div> public void setPointer(int pointer) { this.pointer = pointer; } <div> public void setBaseBlockLen(int baseBlockLen) { this.baseBlockLen = baseBlockLen; } <div> public abstract void parseBlock(MMBlockData block);</div> <div> public abstract void parseHeader();</div> <div> public abstract void readBlocks();</div> <div> protected boolean isInvalidBlock(byte[] datas) {</div> <div> if (datas.length < 4) { return false; } for (int j = 0; j < 4; j++) { byte b = datas[j]; if (b != (byte) 0xFF) { return false; } } for (int j = 4; j < this.baseBlockLen; j++) { byte b = datas[j]; if (b != 0) { return false; } } return true; } <div> public MMBlockFunc getBlockFunc() { return blockFunc; } <div> public void setBlockFunc(MMBlockFunc blockFunc) { this.blockFunc = blockFunc; } <div> public int getBaseBlockLen() { return baseBlockLen; } } </div>
试试其它关键字
存储文件内容
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
实现测量程序运行时间及cpu使用时间
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
price
贡献的其它代码
(
1
)
.
提取s60v5微信的本地存储文件内容
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3