会员登录 立即注册

搜索

jadx 调试器 分析微信

[复制链接]
崎山小鹿 发表于 2024-4-24 17:05:18 | 显示全部楼层 |阅读模式
崎山小鹿
2024-4-24 17:05:18 14181 4 看全部
官网下载:https://sourceforge.net/projects/jadx.mirror/

用于从 Android Dex 和 apk 文件生成 Java 源代码的命令行和 GUI 工具。将 Dalvik 字节码从 APK、dex、aar、aab 和 zip 文件反编译为 java 类。从 resources.arsc 中解码 AndroidManifest.xml 和其他资源。包括反混淆器。请注意,Android Studio 可能会干扰 jadx 调试器,因此最好在附加到 jadx 中的进程之前将其关闭。 Smali 调试器,请检查 wiki 页面以了解设置和使用情况。使用突出显示的语法查看反编译的代码。

ajd.png

可以看到,小程序在代码中被称为appbrand,主要逻辑放在包com.tencent.mm.plugin.appbrand下面(部分抽出的ui控件除外);另外引用了3个js资源,均在/assets/wxa_library/下。虽然很大部分代码被混淆过的,但是适当的反编译后,我们还是能看出绝大部分东西。

开启调试
D:\Android\android-sdk\platform-tools>adb start-server
* daemon not running; starting now at tcp:5037
* daemon started successfully

D:\Android\android-sdk\platform-tools>netstat -ano | findstr "5037"
  TCP    127.0.0.1:5037         0.0.0.0:0              LISTENING       2140

微信图片_20240602232109.png

关掉adb服务:adb kill-server

点击“选择要调试的进程”
微信截图_20240602232836.png

双击要调试的进程
微信图片_20240602232725.png

进入调试模式:
jadx.png

包整理

依次整理com.tencent.mm.plugin.appbrand下的内容,按包区分:

a:似乎是单例和依赖注入的容器
appcache:微信小程序打包为wxapkg文件,这里处理的是下载解包验证和后续处理逻辑
appstorage:在数据库中存取AppBrandKVData的逻辑
b:在数据库中存取AppBrandLauncherLayoutItem的逻辑,是微信小程序列表缓存
c:通过安卓的canvas实现了一套完整的js的canvasapi,提供给小程序中canvas控件使用
config:小程序模块环境变量管理,其中数据可以通过互联网下发更新
contact:把app添加为微信联系人,似乎和聊天置顶有关
d:InputStream相关工具类
e:录音功能相关工具类
f:附近的人的小程序相关工具类
g:应该是AppBrandNetworkUtil,小程序模块用到的网络部分的工具类
h:权限管理工具类,包括小程序权限管理和jsapi权限管理,同时也可以通过网络更新
i:小程序sd卡操作工具类
ipc:ipc即进程间通信。小程序通过新开进程来保障独立运行的,独立进程的启动与微信本体的通信依赖这个包的代码完成。其中AppBrandMainProcessService是最主要运行服务,而AppBrandProcessProxyUI是小程序进程持有性质activity。
j:AppBrandConversionExtension,似乎是多个小程序切换过程中的辅助类
jsapi:微信小程序通过浏览器暴露给js环境的api的入口基本上都在这儿了,包括组件部分和api部分。最后AppBrandJSInterface把这些入口聚合在一起。
k:似乎是一些零散的工具类
l:js中WebSocketapi的native实现
launching:微信小程序加载逻辑的实现。主要是处理了很多加载准备过程中的逻辑和错误监测
m:微信小程序列表搜索功能相关逻辑
netscene:好像是对webview发起的特殊请求的处理和中断
page:页面部分,包括微信小程序列表页等,主要都是各个activity和使用的自定义view。其中l.class值得注意,应该是核心使用的webview了,h.class是这个webview的容器,也做了很多操作。
report:只是数据上报相关的东西
task:一些乱七八糟的异步工作放这儿了
ui:和page差不多,也是各种各样的activity和view。微信小程序实际的容器页面(5个)和各种功能与异常页面
widget:所有暴露给js的native控件都在这儿了。其实并不多

其他文件中值得关注的一些东西:
a.class即AppBrandBridge是小程序主路由控制器,持有着当前所有小程序
f.class看起来是AppBrandService,持有后台运行的jscore

15172-20180105221845049-357742587.png

15172-20180105221844253-1608990802.png

15172-20180105221850378-2045053537.png

15172-20180105221851331-1056034616.png

参考:
微信小程序源码阅读笔记1
天不生墨翟,万古如长夜!以墨运商,以商助墨。金双石科技长期招聘科技研发人才!微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-5-30 16:05:10 | 显示全部楼层
崎山小鹿
2024-5-30 16:05:10 看全部
问题1:do is not a valid resource name (reserved Java keyword)
翻译:do 不是有效的资源名称(保留的 Java 关键字)
解决:您不能使用保留关键字
天不生墨翟,万古如长夜!以墨运商,以商助墨。金双石科技长期招聘科技研发人才!微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-5-31 08:33:25 | 显示全部楼层
崎山小鹿
2024-5-31 08:33:25 看全部
Duplicate resources   重复资源
LintOptions#abortOnError 配置 用于设置 当编译时遇到错误 是否需要退出 ;
设置 true , 则遇到错误后 , 就会退出编译 ;
设置 false, 则遇到错误后 , 继续进行编译 ;
天不生墨翟,万古如长夜!以墨运商,以商助墨。金双石科技长期招聘科技研发人才!微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-5-31 11:03:39 | 显示全部楼层
崎山小鹿
2024-5-31 11:03:39 看全部
错误:Error:Execution failed for task ':app:mergeDebugResources'.

这个异常的意思是对资源合并发生错误,那就是我使用的图片资源有问题,我使用的图片是能在android环境自适应展示的.9.png格式,在Eclipse上使用是能通过编译的,但是为什么在android studio上就不能呢?
原来,android studio中的资源文件命名是不能带有数字的,因为会与R类的资源ID起冲突,所以编译就发生了错误。
方式一:只需重新命名图片即可,在Make Project一下编译就能通过了。
方式二:我们可以用代码去除掉android studio对png格式文件的检测,这样系统就不会检测png格式的资源文件了。

找到app->build.gradle文件并打开,在buildToolsVersion属性下添加如下代码

aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
完整的build.gradle文件如下,修改完成再Make Project一下就不会报错了。
但是,主要还是看自己的编码规范,比如我遇到的问题是UI妹子切图的时候,命名不规范(下划线、A至Z、0至9,尽量避免驼峰命名法),还有是自己写对应的应用文件是否正确,都是自己编码过程中遇到的问题。

                        
原文链接:https://blog.csdn.net/qq_33721320/article/details/77198154
天不生墨翟,万古如长夜!以墨运商,以商助墨。金双石科技长期招聘科技研发人才!微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

 楼主| 崎山小鹿 发表于 2024-5-31 11:08:48 | 显示全部楼层
崎山小鹿
2024-5-31 11:08:48 看全部
报错信息:

在使用array.xml保存string[]时,如果数据中有 ' 符号时会报错

Cause: startElement.getAttributeByName(QName("name")) must not be null

解决方案:

使用 \' 进行转义
或删除  ' 符号

                        
原文链接:https://blog.csdn.net/dackchong/article/details/128798970
天不生墨翟,万古如长夜!以墨运商,以商助墨。金双石科技长期招聘科技研发人才!微信:qishanxiaolu   电话:15876572365   公司:深圳市金双石科技有限公司
回复

使用道具 举报

  • 您可能感兴趣
您需要登录后才可以回帖 登录 | 立即注册 |

本版积分规则 返回列表

管理员给TA私信
以墨运商,以商助墨。

查看:14181 | 回复:4

  • 墨山游侠部门规划

    阅读:41|2025-07-18
  • 墨山游侠墨子模型

    网上有很多很优秀的墨子照片: 我们能否使用AI生存模型呢?

    阅读:84|2025-07-17
  • 墨子图书馆III

    这是第三座墨子图书馆,由墨山游侠团队超级英雄小安创作。如果你也喜欢墨子,关注我们

    阅读:197|2025-07-13
  • 墨山游侠-圣安大教堂

    圣安大教堂是由墨山游侠团队超级英雄小安所做,圣安大教堂以其极高的艺术价值让世人惊

    阅读:220|2025-07-13
  • 墨山游侠-聚贤山庄

    中国古代建筑群,历时三个月倾情打造 视频: 下载地址:

    阅读:203|2025-07-12
  • MiniSNS是什么

    MiniSNS是一款支持多端(App、小程序、H5、PC)的社区程序,基于 Laravel框架 开发,

    阅读:170|2025-07-11
  • SDGun社区是用什么语言开发的,是什么架构

    SDGun社区是一个聚集了射击竞技、射击娱乐和军事潮流爱好者的平台。它提供了新品爆料

    阅读:238|2025-07-07
  • 墨山游侠-墨山写字笔

    墨山写字笔 很多时候玩家想在某地做一个标记,或者留下一段感悟写字笔就非常有用了。

    阅读:486|2025-06-30
  • 墨山游侠-自定义画

    方法1: 找到 textures/painting 文件夹中的 kz.png(早期)或多个 painting 图(

    阅读:445|2025-06-25
  • 墨山游侠工具合集

    墨山游侠是由一群墨学爱好者共同创建的游戏,这个游戏地图已经开发6个月了,在这期间

    阅读:472|2025-06-24
金双石科技,软件开发20年,技术行业领先,您的满意,就是我们的目标,认真负责,开拓进取,让成品物超所值
关于我们
公司简介
发展历程
联系我们
本站站务
友情链接
新手指南
内容审核
商家合作
广告合作
商家入驻
新闻合作

手机APP

官方微博

官方微信

联系电话:15876572365 地址:深圳市宝安区西乡街道宝民二路宝民花园 ( 粤ICP备2021100124号-1 ) 邮箱:qishanxiaolu@qq.com
QQ|Powered by Discuz! X3.5 © 2001-2025 Discuz! Team.
快速回复 返回顶部 返回列表