发表日期:2021-02-13 03:18文章编辑:餐饮小程序开发的浏览次数: 标签:
零、状况
由于务必寻找一些手机微信微信小程序内部的逻辑性性,我对手机微信微信小程序的掌握是一个相仿于react native的物件,用java script写的编号,依据一个描述控制模块将其剖析成安卓系统系统软件原生态态的操纵,因而重要的逻辑性性理应是写在某一js文本文档内,因此就务必想方式获得手机微信微信小程序的运行包以及得到运行包内的js编号。
一、寻找手机微信微信小程序包1.1 基本分析要获得程序包,十分简易的方式就是寄希望于手机微信微信小程序是一个完全免费免费下载在本地的包,那般只务必找寻这一包,再对包进行分析。
[标识:內容1]
因而第一步就是务必明确手机微信微信小程序确实是一个本地可推行的包。最开始随便找一个手机微信微信小程序,安装运行,在断掉联接并且kill掉手机上手机微信再次起动后发现手机微信微信小程序依然能运行,那般就消除没有了互连网加载和运作运行内存运行二种非长期化方案计划方案,因此可以明确手机微信微信小程序理应是以一个本地包运行起来的了。接下就是找寻所有手机微信微信小程序的包安装在哪儿儿里。
杀掉所有手机上手机微信相关全过程的命令下列
:/ # ps |grep tencentu0_a98 2752 375 2100724 190148 ffffffff b6e58784 S com.tencent.mmu0_a98 2834 375 1643756 79344 ffffffff b6e58784 S com.tencent.mm:exdeviceu0_a98 2905 375 1654692 78280 ffffffff b6e58784 S com.tencent.mm:pushu0_a98 3001 375 1952576 109060 ffffffff b6e58784 S com.tencent.mm:appbrand0u0_a98 3086 375 1947448 114104 ffffffff b6e58784 S com.tencent.mm:supportu0_a98 3234 375 1951704 108988 ffffffff b6e58784 S com.tencent.mm::/ # kill -9 2752 2834 2905 3001 3086 32341.2 变化明确
这儿选用了BeyondCompare,依据对比安装前和安装后的/data/data/com.tencent.mm下的每一个文档文件目录规格来找寻手机上手机微信手机微信微信小程序有可能安装的文档文件目录。运行一下命令得到所有手机上手机微信私有文档文件目录文本文档:
cp -r /data/data/com.tencent.mm/ /sdcard/adb pull /sdcard/com.tencent.mm ~/Desktop
在得到安装前和安装后两个文档文件目录后运用Beyond Compare比较
发现MicroMsg和cache两个文本文档夹规格变化比较明显,cache理应并不大将会。马上进入MicroMsg,在一路检索
发现.wxapkg那般后缀名名的包提升了,进而确立这一包就是没多久安装的“手机微信微信小程序案例”这一手机微信微信小程序了。
1.3 获得包依据上面的分析,可以发现手机上手机微信的手机微信微信小程序包是一个.wxapkg的包,放进/data/data/com.tencent.mm/MicroMsg/帐户标示/appbrand/pkg/下,马上用下面二行命令便可以拉出相符合的手机微信微信小程序包。
cp /data/data/com.tencent.mm/MicroMsg/帐户标示/appbrand/pkg/手机微信微信小程序包名.wxapkg /sdcard/adb pull /sdcard/手机微信微信小程序包名.wxapkg ~/Desktop/二、剖析手机微信微信小程序包
获得手机微信微信小程序包,算作比较完满了,接下来就是对这一包进行分析了。
2.1 基本分析一般获得文本文档,马上拖至hex撰写器查寻,我这儿选用的是hex fiend这一手机上手机软件,具体用哪个可以本身百度搜索检索都大同市市小异。
最开始一眼即可以看到,手机上手机微信的手机微信微信小程序包理应是没有数据信息数据加密的,至少是一些值是没有数据信息数据加密的,可以马上看到一些文本文档的相对性相对路径和名字。在对比了许多个wxapkg文本文档之后,发现他们的前2八位的刚开始都是OxBE ~ OxED,猜测这一段理应是有标示着文本文档的头信息内容內容。
大胆的猜测,手机上手机微信的手机微信微信小程序包理应就是将相片,js,json文本文档全部压在一起的结构,那般的结构理应是有三一一部分,一段是头信息内容內容,根据头信息内容內容确立数据信息库数据库索引,最后根据数据信息库数据库索引确立文本文档Body体。
在大胆的猜测后,下面大伙儿根据一些与众不同文本文档和猜测一步一步验证寻找手机上手机微信手机微信微信小程序的大约结构。
2.2 分析文档文件格式不在断对比许多个文本文档后,基本确立OxBE OxED理应是相仿掩码,用以标示文本文档的,他们正中间理应是头信息内容內容
取下一个文本文档数量相对性性比较少的wxapkg下列图:
可以发现红框招标志数据信息五,而正好此篇件在/WAWidget.js后就是数据信息信息内容段了,正好唯一五个文本文档,因此猜测OxED后八位标示因而包含有的文本文档数量,在查寻了许多个wxapkg文本文档后明确。
再接下来就是明确OxBE和OxED内的说明了,根据逻辑性逻辑思维惯性力力,将他们正中间激光器激光切割为八位一组,发现正好分为三组,就拿上面哪一个唯一五个文本文档的wxapkg来看,各有是Ox00000000, Ox0000007E, Ox000F5D8A, 0x00000000很可能是标示该文本文档的一些特点不大好确立,因为查寻了许多文本文档发现值都为0。0x0000007E这一数据信息比较小,为126,很有可能说明数据信息库数据库索引的长度公司理应是byte,变成化十六进制说明就是252位,正好相符合着文本文档相对性相对路径后面好多个,因而这一长度理应能确立是数据信息库数据库索引的长度了,那剩下的理应也就是Body的长度了。
在确立了数据信息库数据库索引的长度和Body的长度后,在与众不同分析这一文本文档,发现就是一个一个文本文档的名字和后面加上2组,相仿于Ox0000000A /WAPerf.js Ox0000008C Ox00001FE9,前边Ox0000000A说明长度10byte, 正好20位Ox2F574150 6572662E 6A73说明了/WAPerf.js。后面的也就很有可能是WAPerf.js这一文本文档的一开始位置和文本文档长度了。这儿只做一个猜测,写完程序再验证。
2.3 输出规范根据上面的分析后例举下面那般的一个表
字段名名 特点 长度 说明 头信息内容內容 首掩码 1 bytes OxBE的头掩码 头信息内容內容 模糊不清 4 bytes 模糊不清特点,所有拉出来的包值都为Ox00000000 头信息内容內容 数据信息库数据库索引长度 4 bytes 数据信息库数据库索引的长度 头信息内容內容 文本文档长度 4 bytes Body的长度,具体上十分于文本文档的长度 头信息内容內容 尾掩码 1 bytes OxED的尾掩码 头信息内容內容 文本文档数量 4 bytes 本来觉得这一是所属于数据信息库数据库索引的,但是依据数据信息库数据库索引长度计算后,发现数据信息库数据库索引长度是以文本文档数量后一开始计算的 数据信息库数据库索引 文本文档名长度 4 bytes 文本文档名长度 数据信息库数据库索引 文本文档名 根据上一个字段名名确立 数据信息库数据库索引 文本文档一开始位置 4 bytes 数据信息库数据库索引 文本文档结束位置 4 bytes 数据信息库数据库索引 循环系统系统软件文本文档数量次后数据信息库数据库索引端结束 Body 根据文本文档一开始位置和文本文档结束位置算出具体上所有整个过程并没有2.2分析的那般完满,猜测也是有很多次歪斜确的地域,大胆猜测,小心验证,最后获得了上面的表格。
三、输出程序重要编号下列
public WXAPPPackage parse(String path) throws IOException, InvalidWXPackageException { FileInputStream fileInputStream = new FileInputStream(path); fileInputStream.skip(1); int edition = getEdition(fileInputStream); System.out.println("Edition: " + edition); int indexLength = getIndexLength(fileInputStream); System.out.println("Index Length: " + indexLength); int bodyLength = getBodyLength(fileInputStream); System.out.println("Body Length: " + bodyLength); fileInputStream.skip(1); int fileCount = getFileCount(fileInputStream); System.out.println("File Count: " + fileCount); ArrayList WXAPPFile wxappFiles = new ArrayList (); for (int i = 0; i fileCount; i++) { int fileNameLength = getFileNameLength(fileInputStream); String fileName = getFileName(fileInputStream, fileNameLength); int fileOffset = getFileOffset(fileInputStream); int fileSize = getFileSize(fileInputStream); System.out.println("File Name: " + fileName + ", File offset: " + fileOffset + ", File size: " + fileSize); WXAPPFile file = new WXAPPFile(); file.setFileNameLength(fileNameLength); file.setFileName(fileName); file.setFileSize(fileSize); file.setFileStart(fileOffset); wxappFiles.add(file); } WXAPPPackage wxappPackage = new WXAPPPackage(); wxappPackage.setEdition(edition); wxappPackage.setIndexLength(indexLength); wxappPackage.setBodyLength(bodyLength); wxappPackage.setFileCount(fileCount); wxappPackage.setFiles(wxappFiles); return wxappPackage;}
可以发现,就是根据上面总结的表格,一个一个字段名名的分析xml,最后得到包结构体相符合的总体目标。
具体编号可以查寻
github/ZaratustraN/wxapp-parser
3.1 检验程序可以导进入IDEA中运行检验,具体方法都不提了,我检验了10再说一个手机上手机微信手机微信微信小程序包,临时性没有发现大的难点,小难点可能也是有,热情热烈欢迎注重提issue。
四、总结所有整个过程那麼完满也超过了我的意料之外,最开始是手机上手机微信居然没有对手机微信微信小程序包进行数据信息数据加密或者变小,倘若进行了数据信息数据加密至少不可易那麼完满连dump运作运行内存和反编译程序程序的方法都没有用上。其次就是减轻工作压力后发现js编号居然没有一切的维护保养,可以很随意的正确认识楚手机微信微信小程序的逻辑性性,乞求url,数据信息信息内容数据信息数据加密方式,添充方式,十分非常容易的网络黑客进攻者仿效出乞求进行攻击。
它就是我第一次进行这种文本文档文档文件格式的破解,也是有一点体会。
仔细观察很多文本文档正中间的区别进行大胆的猜测,而且测试用例外法针对猜测进行验证。写出程序,接着再根据程序运行的结果调整规律性性,最终接近最终回应最后再贴出来来一次编号位置:
github/ZaratustraN/wxapp-parser
经典著作权声明
即速应用倡导高度重视与维护保养技术专业专业知识产权年限期限。如发现本站文章内容內容存在经典著作权难点,烦请提供经典著作权疑虑、真正真实身份确认、经典著作所有权证实、 ,大伙儿将马上处理。本站文章内容內容仅作共享资源沟通交流沟通交流关键主要用途,写作者看法不一同于即速应用看法。顾客与写作者的一切交易与本站无关紧要,请悉知。