失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 按键精灵手机助手找回素材

按键精灵手机助手找回素材

时间:2023-08-26 15:30:53

相关推荐

按键精灵手机助手找回素材

独角兽企业重金招聘Python工程师标准>>>

事故缘由:

手机游戏有更新,这个脚本之前一直运行良好,所以客户也没有问题反馈,所以一直没有更新,今天那款游戏有比较重要的更新,所以只能更新了。

不然对不起客户的付费。

因为按键精灵手机助手连接不到模拟器,所以卸载重装试试能否连接上。注意了,这里我有备份脚本源码。

但是却忘了备份脚本素材,就是图片素材。

这个脚本的编写花费了十多个小时,其中包含四五十张图片,说实话我真的有点方,和烦,郁闷。

因为没有图片素材,意味着脚本没法识别图片进而做出下一步操作,一整个脚本都废掉了。

我可没有心思重新截取游戏的五六十张图片。。。这样无异于重写。

但是,但是,注意了,方并不能解决问题。

后来想了下,有已经编译好的apk,能不能从这里面找回还原所有图片呢?

于是提取解压apk文件,发现

我为什么能确定是这个文件呢?

思路就是,你添加一张小图片的素材,打包apk,

然后添加一张超大图片的素材,打包apk,你会发现这个文件是增大的。

所以可以肯定我的素材在里面。

但是到这里只能确定素材在里面,万一素材有加密呢。

提取script.atc文件,里面的内容无疑是二进制文件。。。用notepad++打开

发现下面内容:

乱码是肯定的,我有心理准备

下面怎么从这堆乱码中确定是否有素材。关键点来了

同样的截取一张小图片,打包apk,提取上面所述的文件

然后比对图片的二进制代码和script.atc的二进制代码

素材图片的开头是8950 4e47 0d0a

可以发现都是吻合的,一直到图片的结尾。

这样我们可以确定图片素材没有加密。

接下来就是怎么提取图片了?

算法是这样的,中文解释就是假设一段文字是这样的:

文字文字abcdkk567jkdlfg文字文字文字文字

文字文字文字文字他们文字文字文字文字文字文字

他们他们他们abcd520ytjkdlfg文字他们文字文字文

这里abcd是这段图片的开头编码,所有png图片的开头编码是一样的

jkdlfg是这段图片的结尾编码,中间是图片的像素信息。

那么算法就是找出所有abcd开头和jkdlfg结尾的一段文字,这段文字就是图片素材的信息。

接下来就是编码了:

从byte数组中找出开头结尾的byte数组就是图片了。

public static class ByteArray{byte[]target;int startIndex;int endIndex;}public List<ByteArray> findBytes(byte []src, byte[]startByte,byte[]endByte){List<ByteArray> result=new ArrayList<>();byte [] tempForStart = new byte[startByte.length];byte [] tempForEnd =new byte[endByte.length];int startIndex=-1;for(int i=0;i<src.length;i++){if(startIndex==-1&&i+startByte.length<=src.length){System.arraycopy(src,i,tempForStart,0,startByte.length);if(Arrays.equals(tempForStart,startByte)){startIndex = i;}}if(startIndex!=-1&&i+endByte.length<=src.length){System.arraycopy(src,i,tempForEnd,0,endByte.length);if(Arrays.equals(tempForEnd,endByte)){byte [] target =new byte[i+endByte.length-startIndex];System.arraycopy(src,startIndex,target,0,target.length);ByteArray byteArray =new ByteArray();byteArray.startIndex = startIndex;byteArray.endIndex = byteArray.startIndex+target.length;byteArray.target = target;result.add(byteArray);startIndex = -1;}}}return result;}

图片找到然后保存到磁盘,大功告成!!

这里有人可能问图片素材的名字怎么确定?

仔细观察script.atc文件里面

可以发现在图片文件前面紧跟着图片的名字

那么同理只要抽取出Attachment开头.png结尾的字符内容即可。

然后匹配最近的图片位置,就能对应上了。

如果觉得《按键精灵手机助手找回素材》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。