Description
反馈BUG之前,先issue里面搜看看有没有别人已经反馈过,重复的不予处理!!
问题描述
在VirtualXposed 0.16.0里面hook 微信6.73版本,使用XposedBridge.log记录日志信息,发现在某些情况下(不太明确)会记录一样的2条记录。挂钩程序中采用了JAVA的文件锁FileLock,,记录当前微信进程号,如果已经存在了则不在重复写日志,但每次打开Xposed日志查看总是看到记录了2条一摸一样的。
逻辑如下
if(isHooked())return;//已经hook了则直接不再处理
else XposedBridge.log("欢迎["+Process.myPid()+"]"+Thread.currentThread().getName()+"."+Thread.currentThread().getId());
最终启动微信后,结果总是能看到如下类似的2条一模一样的日志记录
10.31 08:07:47.890 I/Xposed (4098): 欢迎[4089]main.2
10.31 08:07:47.890 I/Xposed (4098): 欢迎[4089]main.2
重启手机或者点击VirtualXposed设置里面的重启都没用
判断程序isHooked的原型定义如下
private boolean isHooked(){
FileLock fileLock=null;
RandomAccessFile randomAccessFile=null;
try {
randomAccessFile=new RandomAccessFile("/sdcard/wx.txt","rw");
while(fileLock==null) {//等待获取文件锁
try {
fileLock = randomAccessFile.getChannel().lock();
}
catch(Throwable e){
}
try{
if(fileLock==null)Thread.sleep(20);
}
catch(Throwable e){
}
}
try{
Thread.sleep(40);//获取到FileLock后故意多等一会
}
catch(Throwable e){
}
if(randomAccessFile.length()==0){//还未记录,说明还未hook
randomAccessFile.write(Integer.toString(Process.myPid()).getBytes());
}
else{
randomAccessFile.seek(0);
byte[] data = new byte[100];
int readNum = randomAccessFile.read(data);
int recordPid = Integer.parseInt(new String(data, 0, readNum).trim());
if (Process.myPid() == recordPid) return true;//已经记录了当前进程号,已经hook过了
//当前进程号和记录的不一致,说明还未hook
randomAccessFile.setLength(0);
randomAccessFile.seek(0);
randomAccessFile.write(Integer.toString(Process.myPid()).getBytes());
}
return false;
} catch (Throwable e) {
return false;
}
finally {//释放文件锁等相关资源
try {
if (fileLock != null) fileLock.release();
}
catch(Throwable e){
}
try {
if (randomAccessFile != null) randomAccessFile.close();
}
catch(Throwable e){
}
}
}
复现步骤
只要出现了重复,无论如何重启手机或者VirtualXposed都没用,打开查看日志总是出现重复。
最终我是去掉了VirtualXposed设置里面 高级设置->启用桌面功能 ,然后重启手机,然后手工把
VirtualXposed再强杀掉之后,50%左右的机会才正常。
环境
机型:MIX2S
系统版本:Android 8.0.0
ROM版本:MIUI 10.0.3.0
Xposed 插件以及插件版本:0.16.0自带,微信6.73版本
VirtualXposed版本:0.16.0
补充
实际中感觉不只是日志记录重复,反而觉得好像就是微信相同的进程号被启动了2个(瞎彩的,因为
在微信里面注册了接收广播的action,发送广播的时候Toast.makeText了信息,明显看到了2次)
最后顺便问一下:兄弟精力十足啊,这个好像还不是太稳定的情况又去折腾太极,那个太极我试着渡劫
微信6.73 支付宝10.1.38 都不行啊