root完后怎么恢复微信聊天记录恢复

苹果5怎么查通话记录/苹果5怎么查通话记录 _百度 _ 知道
省领导活动报道集
您当前的位置 :&&&&&&&正文
苹果5怎么查通话记录
作者: 怎么查看别人的微信聊天记录被删除了还能恢复吗   来源: 生活报     频道主编: 张微
 苹果5怎么查通话记录,,辽际
   微信删除的聊天记录可以恢复么
如何怎么查看被删的微信聊天记录
不简单啊手机号码定位能找到人吗谁知道告诉一下吧能够玩出什么花样
请问要怎样才能偷听到他人的手机通话内容兄弟姐妹们
在这片神奇
可以查询别人腾讯QQ近期聊天内容吗都不能接近
各地公车补贴标准中央和国家机关本级车改在去年已全面完成,情况更为复杂的地方车改目前正在推进。《吉林日报》近期报道,吉林省的公车拍卖会正在进行,今年计划开八场拍卖会,“随着对取消车辆处置工作的开展,我省省直机关车改已接近尾声”。这一报道还披露:吉林省省直机关公务交通补贴标准划分为7个档次,从科员及以下其他人员(机关工勤编制人员)每人每月500元,到正厅局级每人每月1690元不等,公务人员今年3月份就已通过工资统发系统领到了公务交通补贴。长安街知事APP梳理发现,除西藏、新疆和新疆兵团按计划放宽进度要求以外,全国29个省份车改方案均已上报,目前,吉林、广东、湖南、浙江、甘肃等多地的省级公车拍卖会正在进行中,可谓先行一步。在小伙伴们最为关注的公车补贴一项中,有这么几个地方领跑全国。按规定,中央和国家机关车改补贴标准是司局级每人每月1300元,处级每人每月800元,科级及以下每人每月500元,地方补贴标准不得高于上述标准的130%,边疆民族地区和其他边远地区标准不得高于150%。也就是说,车改补贴最高一档为1950元(%)。从目前公布的22地公车补贴来看,云南、广西、贵州均是补贴“顶格”,是司局级1300元标准的150%。值得一提的是云南省,厅级、处级、科级的补贴均为中央要求范围的最高值。在覆盖面广泛的科员补贴上,600元及以上的地方并不多,只有云南、广西、重庆、山西、河南、辽宁和浙江,云南仍旧以750元“顶格”最高。地方车改“先行者”广东的科员及科员以下补贴最低,是中央标准的一半,补贴300元和250元。有分析认为,这与经济大省公务员整体收入较高,交通较为便利有关。长安街知事APP咨询了多地公务员小伙伴,大家都表示车改效果立竿见影。延安市某市属部门的公务员就说,现在连接待外地来访的人一般都不能用公车,有时候我们只能开私家车。《晚报》曾报道浙江取消公车后的“首日尴尬”。报道称,公务用车的取消,让平时习惯乘坐公车上下班的厅级官员们一下子变得有些“手忙脚乱”。除了要比以往提前起床赶公交或开私家车上班以外,向手机里加装打车软件者有之,乘公交没座位一路站着的有之,更有一位厅级官员没有挤上公交又一时打不到车,不得不硬着头皮步行80分钟赶到单位。公车收紧了,出行怎么解决?不只是公务员个人纷纷下打车软件代步,面对大量专车被取消后的车辆空缺,各地还在推动政府招标或定向签约等方式购买服务,以提高公车的利用率。比如北京公交集团下属的北汽出租汽车集团计划向政务用车领域拓展市场,包括承担企事业单位包车、专车等多项业务。近期,滴滴、神州租车等公司也在抢食政务用车市场。北京交通大学经管学院教授赵坚分析认为,未来可以进一步加强“互联网+”模式的应用,例如将公车全数并入专车公司,以实现车辆在各个政府部门之间的流转,甚至可以放开私人预约公车限制,使政务用车领域更加市场化。公车改革推进中,各地自身情况不同,进度不一,落地难免有差异。媒体曾报道,个别地方干部抱怨申请不到公车,或车补不到位等,出现了“没公车不愿下乡”、“尽量少下乡”的现象,也有小伙伴告诉长安街知事APP,有的地方仍然存在“普通科员还没拿到补贴”以及“处级领导还在开公车”的情况。开弓没有回头箭,后续动作很关键。车改能否到位,关键要解决公与私的理念问题。当前,车改已经全面铺开,但是公车私用的问题还没有完全得到解决。国庆假日期间,北京市纪委就采用调阅公车ETC出行记录的方式严防公车“节日病”,让违规者无处遁形。只有当大家都自觉“公私分明”时,公车的使用标准才能定格于同一度量衡之上。剩下的问题,就是合理补贴了——既不多占便宜,也不能让人吃亏。一方面确保公车公用,另一方面让公用的私车得到价值补贴,如此才能实现车改的目标:公务出行便捷合理、交通费用节约可控、车辆管理规范透明、监管问责科学有效。资料来源:人民网 北京商报 新华网
&&精彩推荐
正式开始冲榜
龙江24小时新闻排行
Copyright & 2001- All Rights Reserved.
本网站为东北网版权所有,未经协议授权,禁止下载使用。手机数据恢复 导出微信聊天记录
查看: 3627|
评论: |原作者: csdn
摘要: 手机恢复微信聊天记录数据,首先要考虑找到微信聊天数据库,恢复数据库后导出数据,详细描述了导出微信聊天记录的方法,镜像手机emmc存储芯片或者通过数据线读取到数据本文没有描述。
首先,很容易发现数据库在/d ...
恢复微信聊天记录数据,首先要考虑找到微信聊天数据库,恢复数据库后导出数据,详细描述了导出微信聊天记录的方法,镜像手机emmc存储芯片或者通过数据线读取到数据本文没有描述。
首先,很容易发现数据库在/data/data/com.tencent.mm/MicroMsg/ 下,file之,显示为data…… 好吧看来被腾讯加密了。。
在/data/data/com.tencent.mm/里随便看,发现lib里有个libmmcrypto.so,大概就是用来加密的了。nm -D之,发现一堆sqlite3_*;稍微google下,觉得应该是用了sqlcipher。于是只用拿到密钥就好啦。
希望break到sqlite3_exec之类的函数来看到密钥。发现自带的gdbserver有问题,attach上去后根本看不到调用栈,不明原因。于是手动编译了静态的arm构架的gdb,push上去,能attach和traceback了;但一旦下断点,目标进程就会蹦,不明原理。此想法失败。
替换掉libmmcrypto.so
希望用自己修改的sqlcipher来替换原来的库,把密钥直接打印出来。花了很多时间,交叉编译了不少东西,但最后微信在使用被换掉的库的情况下总还是要崩……
逆向+肉眼密钥算法
使用apktool逆向微信的app(需要注意的是使用apktol前应该安装framework,否则会各种错误;我在这里耗了好久)。grep 'PRAGMA key',真的有,前后看了下,发现貌似是把this中的一个东西作为了key。。。没找到生成密钥的算法……
想到修改代码把key直接打出来。google了一会儿,发现了以下方法:
const-string v1, "!!!!!SQL:&&"
invoke-static {v1, p1}, Landroid/util/L-&d(Ljava/lang/SLjava/lang/S)I复制代码
然后再用logcat就能看到日志了。兴冲冲改好代码,打包,用signapk.jar签名,但进行安装时总是说Data exceeds UNCOMPRESS_DATA_MAX,会有一些资源找不到导致程序蹦掉。。google了很多解决方法都没成功。。
后来灵机一动,只把原来微信.apk里的classes.dex替换成修改过的版本,重新签名,it works,在log里看到密钥了!
一阵激动,于是把数据库拿到pc上,用本地编译的sqlcipher想直接读出来。。。但总还是失败。。难道腾讯还修改过加密算法…… 没有办法,想直接调用libmmcrypto.so。。结果发现我的工具链里的glibc和android系统里的版本不兼容,最终也没能实现交叉调用(这大概也是最初自己编译的sqlcipher不能被微信使用的原因)……
后来想起android貌似还有个ndk,于是糙快猛入门,编译了个executable出来,总算work了。。 运行过程中发现mmcrypto打出了些debug信息,估计真是被腾讯改过了;而且版本好老,木有sqlcipher_export ,还得自己手动写程序dump……
微信做了数据库加密,而且密钥跟机器相关(甚至可能还跟系统相关),一旦机器蹦了或丢了数据就没了,但不提供导出记录,呵呵……
附:dump数据库用的小程序(从sqlite3 里抠了不少代码……)
#define DECLARE(name) \
& & & & static typeof(name) *f_##
DECLARE(sqlite3_close)
DECLARE(sqlite3_column_text)
DECLARE(sqlite3_column_count)
DECLARE(sqlite3_errmsg)
DECLARE(sqlite3_exec)
DECLARE(sqlite3_finalize)
DECLARE(sqlite3_free)
DECLARE(sqlite3_initialize)
DECLARE(sqlite3_mprintf)
DECLARE(sqlite3_open_v2)
DECLARE(sqlite3_prepare)
DECLARE(sqlite3_shutdown)
DECLARE(sqlite3_snprintf)
DECLARE(sqlite3_step)
DECLARE(sqlite3_trace)
#define UNUSED_PARAMETER(name) (void)(name)
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
& & & & UNUSED_PARAMETER(NotUsed);
& & & & for(i=0; i< i++){
& & & & & & & & printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
& & & & printf("\n");
& & & & return 0;
** An pointer to an instance of this structure is passed from
** the main program to the callback.&&This is used to communicate
** state and mode information.
struct callback_data {
&&sqlite3 *& && && &&&/* The database */
&&int echoOn;& && && && &/* True to echo input commands */
&&int statsOn;& && && &&&/* True to display memory stats before each finalize */
&&& && && && && &/* Number of records displayed so far */
&&FILE *& && && && & /* Write results here */
&&FILE *traceO& && &&&/* Output for f_sqlite3_trace() */
&&int nE& && && && &&&/* Number of errors seen */
&&& && && && &&&/* An output mode setting */
&&int writableS& & /* True if PRAGMA writable_schema=ON */
&&int showH& && &&&/* True to show column names in List or Column mode */
&&char *zDestT& && &/* Name of destination table when MODE_Insert */
&&char separator[20];& & /* Separator character for MODE_List */
&&int colWidth[100];& &&&/* Requested width of each column when in column mode*/
&&int actualWidth[100];&&/* Actual width of each column */
&&char nullvalue[20];& & /* The text to print when a NULL comes back from
& && && && && && && && & ** the database */
&&const char *zDbF& & /* name of the database file */
&&const char *zV& && && &&&/* Name of VFS to use */
&&sqlite3_stmt *pS& &/* Current statement if any. */
&&FILE *pL& && && && &/* Write log output here */
** Execute a query statement that will generate SQL output.&&Print
** the result columns, comma-separated, on a line and then add a
** semicolon terminator to the end of that line.
** If the number of columns is 1 and that column contains text "--"
** then write the semicolon on a separate line.&&That way, if a
** "--" comment occurs at the end of the statement, the comment
** won't consume the semicolon terminator.
static int run_table_dump_query(
&&struct callback_data *p, /* Query context */
&&const char *zSelect,& &&&/* SELECT statement to extract content */
&&const char *zFirstRow& & /* Print before first row, if not NULL */
&&sqlite3_stmt *pS
&&const char *z;
&&rc = f_sqlite3_prepare(p-&db, zSelect, -1, &pSelect, 0);
&&if( rc!=SQLITE_OK || !pSelect ){
& & fprintf(p-&out, "/**** ERROR: (%d) %s *****/\n", rc, f_sqlite3_errmsg(p-&db));
& & p-&nErr++;
&&rc = f_sqlite3_step(pSelect);
&&nResult = f_sqlite3_column_count(pSelect);
&&while( rc==SQLITE_ROW ){
& & if( zFirstRow ){
& && &fprintf(p-&out, "%s", zFirstRow);
& && &zFirstRow = 0;
& & z = (const char*)f_sqlite3_column_text(pSelect, 0);
& & fprintf(p-&out, "%s", z);
& & for(i=1; i< i++){=""
& && &fprintf(p-&out, ",%s", f_sqlite3_column_text(pSelect, i));
& & if( z==0 ) z = "";
& & while( z[0] && (z[0]!='-' || z[1]!='-') ) z++;
& & if( z[0] ){
& && &fprintf(p-&out, "\n;\n");
& & }else{
& && &fprintf(p-&out, ";\n");
& & rc = f_sqlite3_step(pSelect);
&&rc = f_sqlite3_finalize(pSelect);
&&if( rc!=SQLITE_OK ){
& & fprintf(p-&out, "/**** ERROR: (%d) %s *****/\n", rc, f_sqlite3_errmsg(p-&db));
& & p-&nErr++;
** Compute a string length that is limited to what can be stored in
** lower 30 bits of a 32-bit signed integer.
static int strlen30(const char *z){
&&const char *z2 =
&&while( *z2 ){ z2++; }
&&return 0x3fffffff & (int)(z2 - z);
/* zIn is either a pointer to a NULL-terminated string in memory obtained
** from malloc(), or a NULL pointer. The string pointed to by zAppend is
** added to zIn, and the result returned in memory obtained from malloc().
** zIn, if it was not NULL, is freed.
** If the third argument, quote, is not '\0', then it is used as a
** quote character for zAppend.
static char *appendText(char *zIn, char const *zAppend, char quote){
&&int nAppend = strlen30(zAppend);
&&int nIn = (zIn?strlen30(zIn):0);
&&len = nAppend+nIn+1;
&&if( quote ){
& & len += 2;
& & for(i=0; i< i++){
& && &if( zAppend[i]==quote ) len++;
&&zIn = (char *)realloc(zIn, len);
&&if( !zIn ){
& & return 0;
&&if( quote ){
& & char *zCsr = &zIn[nIn];
& & *zCsr++ =
& & for(i=0; i< i++){
& && &*zCsr++ = zAppend[i];
& && &if( zAppend[i]==quote ) *zCsr++ =
& & *zCsr++ =
& & *zCsr++ = '\0';
& & assert( (zCsr-zIn)==len );
& & memcpy(&zIn[nIn], zAppend, nAppend);
& & zIn[len-1] = '\0';
&&return zIn;
** This is a different callback routine used for dumping the database.
** Each row received by this callback consists of a table name,
** the table type ("index" or "table") and SQL to create the table.
** This routine should print text sufficient to recreate the table.
static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
&&const char *zT
&&const char *zT
&&const char *zS
&&const char *zPrepStmt = 0;
&&struct callback_data *p = (struct callback_data *)pA
&&UNUSED_PARAMETER(azCol);
&&if( nArg!=3 ) return 1;
&&zTable = azArg[0];
&&zType = azArg[1];
&&zSql = azArg[2];
&&if( strcmp(zTable, "sqlite_sequence")==0 ){
& & zPrepStmt = "DELETE FROM sqlite_\n";
&&}else if( strcmp(zTable, "sqlite_stat1")==0 ){
& & fprintf(p-&out, "ANALYZE sqlite_\n");
&&}else if( strncmp(zTable, "sqlite_", 7)==0 ){
& & return 0;
&&}else if( strncmp(zSql, "CREATE VIRTUAL TABLE", 20)==0 ){
& & char *zI
& & if( !p-&writableSchema ){
& && &fprintf(p-&out, "PRAGMA writable_schema=ON;\n");
& && &p-&writableSchema = 1;
& & zIns = f_sqlite3_mprintf(
& && & "INSERT INTO sqlite_master(type,name,tbl_name,rootpage,sql)"
& && & "VALUES('table','%q','%q',0,'%q');",
& && & zTable, zTable, zSql);
& & fprintf(p-&out, "%s\n", zIns);
& & f_sqlite3_free(zIns);
& & return 0;
& & fprintf(p-&out, "%s;\n", zSql);
&&if( strcmp(zType, "table")==0 ){
& & sqlite3_stmt *pTableInfo = 0;
& & char *zSelect = 0;
& & char *zTableInfo = 0;
& & char *zTmp = 0;
& & int nRow = 0;
& & zTableInfo = appendText(zTableInfo, "PRAGMA table_info(", 0);
& & zTableInfo = appendText(zTableInfo, zTable, '"');
& & zTableInfo = appendText(zTableInfo, ");", 0);
& & rc = f_sqlite3_prepare(p-&db, zTableInfo, -1, &pTableInfo, 0);
& & free(zTableInfo);
& & if( rc!=SQLITE_OK || !pTableInfo ){
& && &return 1;
& & zSelect = appendText(zSelect, "SELECT 'INSERT INTO ' || ", 0);
& & /* Always quote the table name, even if it appears to be pure ascii,
& & ** in case it is a keyword. Ex:&&INSERT INTO "table" ... */
& & zTmp = appendText(zTmp, zTable, '"');
& & if( zTmp ){
& && &zSelect = appendText(zSelect, zTmp, '\'');
& && &free(zTmp);
& & zSelect = appendText(zSelect, " || ' VALUES(' || ", 0);
& & rc = f_sqlite3_step(pTableInfo);
& & while( rc==SQLITE_ROW ){
& && &const char *zText = (const char *)f_sqlite3_column_text(pTableInfo, 1);
& && &zSelect = appendText(zSelect, "quote(", 0);
& && &zSelect = appendText(zSelect, zText, '"');
& && &rc = f_sqlite3_step(pTableInfo);
& && &if( rc==SQLITE_ROW ){
& && &&&zSelect = appendText(zSelect, "), ", 0);
& && &}else{
& && &&&zSelect = appendText(zSelect, ") ", 0);
& && &nRow++;
& & rc = f_sqlite3_finalize(pTableInfo);
& & if( rc!=SQLITE_OK || nRow==0 ){
& && &free(zSelect);
& && &return 1;
& & zSelect = appendText(zSelect, "|| ')' FROM&&", 0);
& & zSelect = appendText(zSelect, zTable, '"');
& & rc = run_table_dump_query(p, zSelect, zPrepStmt);
& & if( rc==SQLITE_CORRUPT ){
& && &zSelect = appendText(zSelect, " ORDER BY rowid DESC", 0);
& && &run_table_dump_query(p, zSelect, 0);
& & free(zSelect);
&&return 0;
** Run zQuery.&&Use dump_callback() as the callback routine so that
** the contents of the query are output as SQL statements.
** If we get a SQLITE_CORRUPT error, rerun the query after appending
** "ORDER BY rowid DESC" to the end.
static int run_schema_dump_query(
&&struct callback_data *p,
&&const char *zQuery
&&char *zErr = 0;
&&rc = f_sqlite3_exec(p-&db, zQuery, dump_callback, p, &zErr);
&&if( rc==SQLITE_CORRUPT ){
& & char *zQ2;
& & int len = strlen30(zQuery);
& & fprintf(p-&out, "/****** CORRUPTION ERROR *******/\n");
& & if( zErr ){
& && &fprintf(p-&out, "/****** %s ******/\n", zErr);
& && &f_sqlite3_free(zErr);
& && &zErr = 0;
& & zQ2 = malloc( len+100 );
& & if( zQ2==0 )
& & f_sqlite3_snprintf(len+100, zQ2, "%s ORDER BY rowid DESC", zQuery);
& & rc = f_sqlite3_exec(p-&db, zQ2, dump_callback, p, &zErr);
& & if( rc ){
& && &fprintf(p-&out, "/****** ERROR: %s ******/\n", zErr);
& & }else{
& && &rc = SQLITE_CORRUPT;
& & f_sqlite3_free(zErr);
& & free(zQ2);
static void dump(struct callback_data *p)
& & & & /* When playing back a "dump", the content might appear in an order
& & & &&&** which causes immediate foreign key constraints to be violated.
& & & &&&** So disable foreign-key constraint enforcement to prevent problems. */
& & & & fprintf(p-&out, "PRAGMA foreign_keys=OFF;\n");
& & & & fprintf(p-&out, "BEGIN TRANSACTION;\n");
& & & & p-&writableSchema = 0;
& & & & f_sqlite3_exec(p-&db, "SAVEPOINT PRAGMA writable_schema=ON", 0, 0, 0);
& & & & p-&nErr = 0;
& & & & run_schema_dump_query(p,
& & & & & & & & & & & & "SELECT name, type, sql FROM sqlite_master "
& & & & & & & & & & & & "WHERE sql NOT NULL AND type=='table' AND name!='sqlite_sequence'"
& & & & & & & & & & & & );
& & & & run_schema_dump_query(p,
& & & & & & & & & & & & "SELECT name, type, sql FROM sqlite_master "
& & & & & & & & & & & & "WHERE name=='sqlite_sequence'"
& & & & & & & & & & & & );
& & & & run_table_dump_query(p,
& & & & & & & & & & & & "SELECT sql FROM sqlite_master "
& & & & & & & & & & & & "WHERE sql NOT NULL AND type IN ('index','trigger','view')", 0
& & & & & & & & & & & & );
& & & & if( p-&writableSchema ){
& & & & & & & & fprintf(p-&out, "PRAGMA writable_schema=OFF;\n");
& & & & & & & & p-&writableSchema = 0;
& & & & f_sqlite3_exec(p-&db, "PRAGMA writable_schema=OFF;", 0, 0, 0);
& & & & f_sqlite3_exec(p-&db, "RELEASE", 0, 0, 0);
& & & & fprintf(p-&out, p-&nErr ? "ROLLBACK; -- due to errors\n" : "COMMIT;\n");
int main(int argc, char **argv){
& & & & sqlite3 *
& & & & char *zErrMsg = 0;
& & & & int rc,
& & & & if( argc & 4 ){
& & & & & & & & fprintf(stderr, "Usage: %s library DATABASE SQL-STATEMENTs\n", argv[0]);
& & & & & & & & return 1;
& & & & void *hdl = dlopen(argv[1], RTLD_LAZY);
& & & & if (!hdl) {
& & & & & & & & fprintf(stderr, "failed to load lib: %s\n", dlerror());
& & & & & & & & return -1;
#define SOLVE(name) \
& & & & f_##name = dlsym(hdl, # name); \
& & & & if (!f_##name) { \
& & & & & & & & fprintf(stderr, "failed to resolve %s: %s\n", #name, dlerror()); \
& & & & & & & & return -1; \
& & & & SOLVE(sqlite3_close);
& & & & SOLVE(sqlite3_column_text);
& & & & SOLVE(sqlite3_column_count);
& & & & SOLVE(sqlite3_errmsg);
& & & & SOLVE(sqlite3_exec);
& & & & SOLVE(sqlite3_finalize);
& & & & SOLVE(sqlite3_free);
& & & & SOLVE(sqlite3_initialize);
& & & & SOLVE(sqlite3_mprintf);
& & & & SOLVE(sqlite3_open_v2);
& & & & SOLVE(sqlite3_prepare);
& & & & SOLVE(sqlite3_shutdown);
& & & & SOLVE(sqlite3_snprintf);
& & & & SOLVE(sqlite3_step);
& & & & SOLVE(sqlite3_trace);
& & & & f_sqlite3_initialize();
& & & & rc = f_sqlite3_open_v2(argv[2], &db,
& & & & & & & & & & & & SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
& & & & if( rc ){
& & & & & & & & fprintf(stderr, "Can't open database: %s\n", f_sqlite3_errmsg(db));
& & & & & & & & f_sqlite3_close(db);
& & & & & & & & return 1;
& & & & for (i = 3; i & i ++)
& & & & & & & & fprintf(stderr, "exec: %s\n", argv[i]);
& & & & & & & & if (!strncmp(argv[i], ".dump", 5)) {
& & & & & & & & & & & & struct callback_
& & & & & & & & & & & & memset(&p, 0, sizeof(p));
& & & & & & & & & & & & p.out = fopen(argv[i] + 5, "w");
& & & & & & & & & & & & if (!p.out) {
& & & & & & & & & & & & & & & & fprintf(stderr, "failed to open file %s: %m\n", argv[i] + 5);
& & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
& & & & & & & & & & & & p.db =
& & & & & & & & & & & & dump(&p);
& & & & & & & & & & & & fclose(p.out);
& & & & & & & & & & & &
& & & & & & & & }
& & & & & & & & rc = f_sqlite3_exec(db, argv[i], callback, 0, &zErrMsg);
& & & & & & & & if( rc!=SQLITE_OK ) {
& & & & & & & & & & & & fprintf(stderr, "SQL error: %s\n", zErrMsg);
& & & & & & & & & & & & f_sqlite3_free(zErrMsg);
& & & & & & & & & & & &
& & & & & & & & }
& & & & f_sqlite3_close(db);
& & & & f_sqlite3_shutdown();
& & & & return 0;
刚表态过的朋友 ()
上一篇:下一篇:
教程:手机数据恢复 安卓设备内置存储器数据创建镜像到电
那些被判死刑的硬盘数据恢复,当需要恢复数据的客户,被告
我们的系统维护的过程中肯定需要对数据库进行定期的备份,
10-0409-0508-3108-2308-1908-1408-1108-1108-0808-05
118698104486839672793244623672136
硬盘基地推荐 /2
开盘数据恢复是硬盘物理故障数据恢复的一种特殊情况。当硬盘的磁组件的任何一个部件(如磁头、前置放大器、音圈、驱动臂等)损坏...
SSD能恢复数据吗?相信很多正在使用SSD固态硬盘的用户都有这么疑问。毕竟大家都有错手删错文件的时候...【玩机教程】百加V6完美备份和恢复微信聊天记录全攻略_百加手机吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:192,554贴子:
【玩机教程】百加V6完美备份和恢复微信聊天记录全攻略收藏
现在微信很受欢迎,很多的记录和聊天记录都在手机里。可是一旦换手机或者是刷机的时候,就会发现重新登录微信,聊天记录都没有,现在论坛君收集和整理研究了相关文献,把微信聊天记录恢复和备份方法分享给大家,希望大家会喜欢。
1:微信记录的备份方法
(一)首先将把手机root下,ROOT工具有很多这个就不具体介绍了
(二)root完成后,打开\data\data\com.tencent.mm\MicriMsg 文件夹,里面会有一个以很长一串数字或者一些字母组成命名的文件夹(也可能有多个。不同的文件夹名代表不同的QQ,如果你用不同的QQ登陆过微信,每个QQ会产生一个新乱码文件夹,保险起见,可以都备份上)把此文件夹备份出来,文件夹里还有个systemInfo.cfg文件可以不用备份。
(三)把手机通过USB线连接,打开手机卡所在的文件夹,理由有微信的备份文件的文件夹:\sdcard\Tencent\MicroMsg 文件夹。里面的乱码文件夹名,和刚才的是root里面的一一对应的,将乱码文件夹备份出来 。而CAMERRA 、VIDEO、 watchdog这三个也不用管。
(四)备份完成,就可以进行刷机和换手机了,弄好后,看以下把微信的聊天记录恢复回系统。
2:恢复微信聊天记录的方法(一)刷机或者换手机,安装最新的微信软件,下载方法不再罗嗦。安装完后,先不用进行内容的恢复登陆微信 (二)登录账号后点击“设置”,然后选择“退出登录”,这个步骤主要是生成微信的系统文件 (四)root备份的文件,删除新生成的乱码文件,然后把原来的备份文件复制到这个文件夹,如果没有删除,就一定要完全覆盖。(五)然后把手机通过USB线连接,打开\sdcard\Tencent\MicroMsg 文件夹,删除新生成的备份文件,把之前备份的旧的聊天记录文档复制进去,如果没有删除,就一定要完全覆盖(六)完成后,关闭文件夹,重新登录微信,就会发现聊天记录回来了。
好贴,赞一个
root或者刷机会影响保修吗?@100JIA手机
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 不root微信聊天记录 的文章

 

随机推荐