Java开发微信dat文件解析工具,android原生开发笔记应用
//保存路径(输出)
String savePath=“C:\Users\Administrator\Desktop”;
//开始解析
convert(wxPath, savePath);
/**
@param path 图片目录地址
@param targetPath 转换后目录
*/
private void convert(String path, String targetPath) {
File[] file = new File(path).listFiles();
if (file == null) {
return;
}
int size = file.length;
txtArea_log.append(“总共” + size + “个文件\r\n”);
AtomicReference integer = new AtomicReference<>(0);
AtomicInteger x
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
= new AtomicInteger();
for (File file1 : file) {
if (file1.isFile()) {
Object[] xori = getXor(file1);
if (xori != null && xori[1] != null){
x.set((int)xori[1]);
}
break;
}
}
Arrays.stream(file).parallel().forEach(file1 -> {
if (file1.isDirectory()) {
String[] newTargetPath = file1.getPath().split("/|\\");
File targetFile = new File(targetPath+File.separator+newTargetPath[newTargetPath.length - 1]);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
convert(file1.getPath(),targetPath+File.separator+newTargetPath[newTargetPath.length - 1]);
return;
}
Object[] xor = getXor(file1);
if (x.get() == 0 && xor[1] != null && (int) xor[1] != 0) {
x.set((int) xor[1]);
}
xor[1] = xor[1] == null ? x.get() : xor[1];
try (InputStream reader = new FileInputStream(file1);
OutputStream writer =
new FileOutputStream(targetPath + File.separator + file1.getName().split("\.")[0] + (xor[0] != null ?
“.” + xor[0] : “”))) {
byte[] bytes = new byte[1024 * 10];
int b;
while ((b = reader.read(bytes)) != -1) {//这里的in.read(bytes);就是把输入流中的东西,写入到内存中(bytes)。
for (int i = 0; i < bytes.length; i++) {
bytes[i] = (byte) (int) (bytes[i] ^ (int) xor[1]);
if (i == (b - 1)) {
break;
}
}
writer.write(bytes, 0, b);
writer.flush();
}
integer.set(integer.get() + 1);
txtArea_log.append(file1.getName() + “(大小:” + ((double) file1.length() / 1000) + “kb,异或值:” + xor[1] + “),” +“进度:” + integer.get() + “/” + size+"\r\n");
} catch (Exception e) {
e.printStackTrace();
}
});
txtArea_log.append(“解析完毕!\r\n”);
}
/**
判断图片异或值
@param file
@return
*/
private static Object[] getXor(File file) {
Object[] xor = null;
if (file != null) {
byte[] bytes = new byte[4];
try (InputStream reader = new FileInputStream(file)) {
reader.read(bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
xor = getXor(bytes);
}
return xor;
}
/**
@param bytes
@return
*/
private static Object[] getXor(byte[] bytes) {
Object[] xorType = new Object[2];
int[] xors = new int[3];
for (Map.Entry<String, String> type : FILE_TYPE_MAP.entrySet()) {
String[] hex = {
String.valueOf(type.getKey().charAt(0)) + type.getKey().charAt(1),
String.valueOf(type.getKey().charAt(2)) + type.getKey().charAt(3),
String.valueOf(type.getKey().charAt(4)) + type.getKey().charAt(5)
};
xors[0] = bytes[0] & 0xFF ^ Integer.parseInt(hex[0], 16);
xors[1] = bytes[1] & 0xFF ^ Integer.parseInt(hex[1], 16);
xors[2] = bytes[2] & 0xFF ^ Integer.parseInt(hex[2], 16);
if (xors[0] == xors[1] && xors[1] == xors[2]) {
xorType[0] = type.getValue();
xorType[1] = xors[0];
break;
}
}
return xorType;
}
private final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();
private JButton btn_open_wxpath;
private final JButton btn_open_savepath = new JButton("");
static {
getAllFileType();
}
private static void getAllFileType() {
FILE_TYPE_MAP.put(“ffd8ffe000104a464946”, “jpg”); //JPEG (jpg)
FILE_TYPE_MAP.put(“89504e470d0a1a0a0000”, “png”); //PNG (png)
FILE_TYPE_MAP.put(“47494638396126026f01”, “gif”); //GIF (gif)
FILE_TYPE_MAP.put(“49492a00227105008037”, “tif”); //TIFF (tif)
FILE_TYPE_MAP.put(“424d228c010000000000”, “bmp”); //16色位图(bmp)
FILE_TYPE_MAP.put(“424d8240090000000000”, “bmp”); //24位位图(bmp)
FILE_TYPE_MAP.put(“424d8e1b030000000000”, “bmp”); //256色位图(bmp)
FILE_TYPE_MAP.put(“41433130313500000000”, “dwg”); //CAD (dwg)
FILE_TYPE_MAP.put(“3c21444f435459504520”, “html”); //HTML (html)
FILE_TYPE_MAP.put(“3c21646f637479706520”, “htm”); //HTM (htm)
FILE_TYPE_MAP.put(“48544d4c207b0d0a0942”, “css”); //css
FILE_TYPE_MAP.put(“696b2e71623d696b2e71”, “js”); //js
FILE_TYPE_MAP.put(“7b5c727466315c616e73”, “rtf”); //Rich Text Format (rtf)
FILE_TYPE_MAP.put(“38425053000100000000”, “psd”); //Photoshop (psd)
FILE_TYPE_MAP.put(“46726f6d3a203d3f6762”, “eml”); //Email [Outlook Express 6] (eml)
Java开发微信dat文件解析工具,android原生开发笔记应用相关推荐
- Java开发微信dat文件解析工具
功能说明: 这个软件可以将电脑端微信的dat加密文件转换为png.jpg等图片资源,方便直接查看微信聊天记录里相关的文件,特别说明:本工具只能查看文件,不能查看聊天记录的文字内容! 软件截图: 关键代 ...
- AndroidStudio_安卓原生开发_什么是AndroidStudio NDK ---Android原生开发工作笔记140
今天在androidstudio的配置页面,看到了一个NDK Version 都没用过这个NDK,这个NDK是什么呢?来了解一下吧. 1.NDK是一系列工具的集合. NDK提供了一系列的工具,帮助开发 ...
- 微信DAT文件解码 免费 无限制 微信dat文件取证工具
先贴图吧 本人最近有个微信取证的需求,网上找不到好用的工具,不是收费就是需要手动计算key值,还有只支持一种图片格式的,总之普遍用起来很难受. 一不做二不休,自己用C#写了一个,使用.NET FRAM ...
- AndroidStudio_安卓原生开发_v4v7升级到androidx方法---Android原生开发工作笔记147
自己的程序版本太久了,导致要集成进一些网路上找的自定义控件等都集成不进来...就升级了: 1.首先在项目的: TestApp\gradle.properties 文件中: 添加 # 表示使用 andr ...
- android dat 乱码,微信dat文件打开乱码
微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...
- java xml文件解析工具_Xml文件解析工具 - java
解析Xml文件:就是把Xml文件里面的内容取出来. Xml文件解析工具:一个能解析Xml文件的类,即一个能把Xml文件里面的内容取出来的类. 先给出一个Xml文件(student_infor.xml) ...
- 微信 dat 文件还原
前言 以微信 PC 端为例 某个小姐姐/小哥哥通过微信发给你的图片会在以下目录以 .dat 后缀的格式出现 C:\Users\taadis\Documents\WeChat Files\taadis\ ...
- 微信缓存dat怎么转图片_微信dat文件转换为图片
微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...
- php解析bt,PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解
PHP基于闭包思想实现的BT(torrent)文件解析工具实例详解 发布于 2017-09-08 20:05:36 | 124 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP( ...
最新文章
- erlang精要(27)-异常处理
- JS通用窗口拖动函数
- Genymotion如何访问本地服务器?
- mysql存储过程的返回值在哪里设置_MySQL存储过程的返回值
- 运放的主要参数详细介绍
- 史上最成功的数学预测:用狄拉克方程推导出电子自旋
- 2020.xilinx开发环境
- php之$_SESSION的理解
- python安装包的路径
- 【大数据实战项目一】数据下载以及工具软件的使用
- matlab三维绘图函数plot3【matlab图行绘制四】
- mysql实验四数据库查询和视图_数据库实验四答案
- 微信小程序picker下拉框
- Google pixel 原生安卓出现 WiFi 网络受限、优化网速、网络无法连接问题
- ICD建模功能约束(详见DL/T860.73附录B)
- win10怎么还原系统【系统天地】
- 原生JS实现图片跑马灯特效
- 英语----非谓语的另类运用:独立主格
- 网络视频会议 OpenMeetings 介绍 运行 开发
- 太原市高二会考计算机试题及答案,太原市第二十一中学校2019-2020学年高二会考模拟生物试卷...