【Java】反编译Mac版Charles,修改一些功能

发布时间:2021-11-27 06:31:29



目录
反编译jar使用javassist修改目标class替换CharlesContext.class
参考


最*学*HTTP代理相关资料时,偶然间发现Mac上的charles是用java实现的,且很好*猓ǜ髦痔齃icense)。同时也很好奇它是怎么实现的。所以反编译了一下。刚好业务方有些功能需求charles目前没有,顺便探究下修改难度。


这是一个实操过程记录,并不打算深究底层原理。各位看官担待。


反编译jar


其中 charles.jar 就是我们要关注的。使用jadx反编译这个jar



这是Charles默认打开时的一个界面,我们在使用jadx反编译charles.jar之后,全局搜索一下“Loading Preferences”,


可以看到初始化这里的相关逻辑,刚好上面有个getVersionName的方法,应该就是版本号的公开方法,我们尝试修改一下这个简单的方法试试效果。


使用javassist修改目标class

参考文档:如何修改jar包中的class文件


比如我们修改一下版本号,使用 javassist 修改字节码


public static void main(String[] args) {
//这个是得到反编译的池
ClassPool pool = ClassPool.getDefault();
try {
//取得需要反编译的jar文件,设定路径
pool.insertClassPath("/Users/okdude/Desktop/charles.jar");
//取得需要反编译修改的文件,注意是完整路径
CtClass cc1 = pool.get("com.xk72.charles.CharlesContext");
//取得需要修改的方法
CtMethod method = cc1.getDeclaredMethod("getVersionName");
//插入修改项,我们让他返回“This is fake version.”
method.insertBefore("{if(true) return "This is fake version";}");
//写入保存
cc1.writeFile();
} catch (NotFoundException e) {
e.printStackTrace();
} catch (CannotCompileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

以上程序使用javassist执行完成后,会在当前工程里生成修改后的CharlesContext.class。我们需要用它覆盖charles.jar中原有的class。


替换CharlesContext.class

首先将 charles.jar 拷贝一份出来,使用以下步骤替换CharlesContext.class


# 解压charles.jar 到当前文件夹
jar xvf charles.jar

# 手动将修改后的CharlesContext.class放到 com/xk72/charles/ 文件夹下

# 更新charles.jar包
jar -uvf charles.jar com/xk72/charles/CharlesContext.class

参考

*釩harles 4.5.1
Javassist 使用指南(一)
如何把java App包装成Mac安装包 - How to create a macOS installer for a Java application (.jar)

相关文档

  • 友谊作文400字|友谊作文
  • 安卓手机邮箱设置方法
  • 杨梅和酸奶能一起吃吗?杨梅和酸奶一起吃会怎么样
  • java 程序写出三个类,triangle,lader,circle(简单易懂)
  • pyGTK
  • 研发质量管理_老生常谈的软件质量到底如何保证?
  • 幼儿园大班健康教案《保护眼睛》含反思
  • 玻璃心的美文
  • 人体穴位 每天拍打这地方100次竟能消病
  • Android:保存图片到Sqlite数据库
  • 凄凉伤感的句子
  • STM32 PWM波驱动舵机(库函数版)
  • 圣诞节创意手工麋鹿折纸
  • Ubuntu20.04下超简单安装微信QQ等Wine软件
  • 大禹治水的方法
  • 高中文明校园黑板报图片
  • 小学教育专业生自我鉴定多篇
  • 澳洲留学五大热门城市衣食住行比较
  • 五年级班主任工作经验总结
  • 优美的情诗现代诗
  • 麻辣香锅在家怎么做
  • 鸡年男娃取名方法
  • 市建委科学发展观调研阶段工作策划方案
  • 生物课教学工作总结范文
  • 大学生村官离职证明
  • 初三语文备课组总结
  • UDS-诊断服务功能
  • 元旦的邀请函
  • 新光智能参加中国测绘学会智慧城市工作委员会主任委员扩大会
  • 红米note8能打王者吗
  • 猜你喜欢

  • 精选最新版2019年七年级下册数学单元测试-第五章《整式的乘除》完整考试题库(含答案)
  • 蓝色小清新通用冬至节气节日主题汇报PPT模板
  • 【推荐下载】教育教学工作自我鉴定-word范文 (3页)
  • 深度剖析木马的植入与攻击
  • 【小学语文】小学一年级语文阅读练*题(40篇)
  • 材料力学 *题解答_附录
  • 一个专为推荐系统定制的BERT!
  • 【推荐】2019秋九年级物理全册第十五章电流和电路第1节两种电荷第1课时两种电荷课件新版新人教版.ppt
  • 人教版小学二年级的数学下册教案
  • 教书育人必须以唯物辩证法为指导
  • 2013年安徽事业单位综合写作真题解析
  • 中学生合理使用手机的倡议书
  • 厚朴温中汤的功效与作用 药用价值 用法用量
  • 裳字的造句的内容
  • 精选推荐山西省2019届高三政治上学期质量检测考试试题(扫描版,无答案)
  • 英国利用边角料建立的品牌
  • 最新苏教牛津译林小学英语五年级下册《Unit 7 Chinese festivals》公开课课件 (1)
  • 安徽师范大学825教育管理学2014年考研专业课真题试卷
  • 武汉轩怡博古装饰工程有限公司企业信用报告-天眼查
  • 最新高考语文二轮复*专题七 精准训练十九《论语》文化经典专练(考试必备)
  • 氨气形成的电子式与相关知识
  • 一般个人简历范文
  • Linux进程的内存空间布局
  • 汽车解码器使用性能的研究
  • 属龙的人2019年财运
  • 值机选座是什么意思
  • 深度剖析木马的植入与攻击
  • 个人招商工作计划书范文
  • 最新文档-一年级上册语文课件-汉语拼音12.an en in un ün_人教(部编版) (共22张PPT)-PPT精品文档
  • 3 政治-涟水县第一中学2012-2013学年高二学业水*测试模拟考试(一)政治试题
  • 【精选】新人教小学数学四年级上册期末试卷(精选5套及标准答案)
  • 中考复习专题二次函数经典分类讲解复习以及练习题_(_含答案)[1]
  • 保证食品安全规章制度清单1
  • 给中国公民出国务工提个醒 中国公民出国签证
  • 【教育学习文章】第七课《神圣的宪法》教案_1
  • 公关部岗位说明书大全000009)
  • 长春市亚瑞汽车销售服务有限公司企业信用报告-天眼查
  • 2019年中考真题模拟【最新】四川省成都市2019届九年级高中阶段教育学校统一招生考试语文试题(附答案精品)
  • 外贸进出口年中分析报告excel表格模板
  • 甲泼尼龙琥珀酸钠治疗支气管哮喘重度发作的临床疗效观察
  • 我国企业“走出去”面临的风险与对策
  • 会计实务:外币借款业务的核算
  • 电脑版