吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11618|回复: 63
收起左侧

[原创] 给Charles添加URL Decode的扩展功能

  [复制链接]
h080294 发表于 2020-7-17 15:37

前言

Charles是抓包工具中经常用到的工具,但是某些特定的场景下,还是有一些不便。本文就是自己根据需要,通过逆向修改代码,实现了charles功能的增强。

1、问题场景描述

工作中经常使用charles,在抓包时一些参数会被转码显示,虽然Charles提供类似Base 64 Decode和默认的URL encode/decode,但是展示的时候可能仍然是转码状态。

预览

预览

右键的菜单中,只能找到Base 64 Decode,并不是我们需要的URL Decode。

只提供了Base 64 Decode功能

只提供了Base 64 Decode功能

又因为这个在实际中太常用了,每次要查看信息都要拷贝出来,利用在线网站去解码,忒麻烦了。就想着能不能改造一下,增加一个URL Decode的扩展功能出来。

2、调研

网上搜寻了大量的资料,都未找到类似的功能扩展插件,所有的内容都是关于使用和破解的。看来只能自己造轮子了。

查看一下应用目录,顺便结合网上一些破解的资料,了解到核心的功能和ui实现等都在charles.jar这个包中。

charles.jar文件

charles.jar文件

3、逆向

首先看一下百科词条关于jar包的介绍。

百度百科词条:
在软件领域,JAR文件(Java归档,英语:Java Archive)是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。
通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。

那么Java层面的逆向相对来说还是比较容易的,市面上有各种各样现成的工具。我们随便使用一款JUI用具来随机查看一下。

反编译

反编译

可以看到,项目经过了混淆,但整体上结构还是非常清晰工整。这非常方便逆向工作的展开。

3.1、定位代码

我们主要目的是在右键菜单中增加一个URL Decode的功能。比猫画虎,原版提供给我们一个Base 64 decode的功能,那么可以仿照它这个,额外添加一个扩展功能。

类似的功能

类似的功能

在项目中搜索“Base 64”关键字,可以查看到相关的引用。

关键词搜索

关键词搜索

很快就能查找到一个叫base64DecodeAction地方的引用,跟进去查看。很明显,这里类继承了AbstractAction。

Base64 Decode Action

Base64 Decode Action

百度百科AbstractAction词条
此类提供 JFC Action 接口的默认实现。它定义了一些标准行为,比如 Action 对象属性(icon、text 和 enabled)的 get 和 set 方法。开发人员只需为此抽象类创建子类并定义 actionPerformed 方法即可。

观察actionPerformed方法,可以看到这里就是实现Base64这个菜单选项功能的地方。

B64 actionPerformed

B64 actionPerformed

往上查找调用,可以在一个popMenu的类中找到创建的地方。

PopupMeun

PopupMeun

3.2、添加扩展功能

我们的需求很简单,只是在右键中添加一个类似的功能选项,因此没有必要动它的一些基类方法。

按照原版的功能实现一个抽象的CharlesUrlDecode类,并继承AbstractAction。里面定义一下actionPerformed方法,即添加URL decode解码。

CharlesUrlDecode

CharlesUrlDecode

然后分别创建CharlesUrlDecodeTextComponent、CharlesUrlDecodeText两个类并实现一下getBody方法。

#  CharlesUrlDecodeTextComponent类
public class CharlesUrlDecodeTextComponent extends CharlesUrlDecode{
    private final JTextComponent component;

    public CharlesUrlDecodeTextComponent(JTextComponent jTextComponent) {
        super(jTextComponent);
        this.component = jTextComponent;
    }

    public String getBody() {
        String selectedText = this.component.getSelectedText();
        return selectedText == null ? this.component.getText() : selectedText;
    }

}

#  CharlesUrlDecodeText类
public class CharlesUrlDecodeText extends CharlesUrlDecode{

    private final String text;

    public CharlesUrlDecodeText(String str) {
        super((Component) null);
        text = str;
    }

    public CharlesUrlDecodeText(String str, Component component) {
        super(component);
        text = str;
    }

    @Override
    public String getBody() {
        return this.text;
    }
}

3.3、展示结果

转码完成后,我们有两种方式展示:
1、替换掉原来的字符串
2、新pop一个窗口展示

为了避免影响原功能,所以新弹出一个窗口展示结果更为合适。查看完随时关掉,不影响源软件的任何使用。粗糙的写一个简陋的JFrame承载结果就好了。

Dialog

Dialog

当然,为了更加方便的查找结果,有必要增加一个查询功能。简单修改下,增加一个键盘的监听事件。因为只有只在mac上办公,所以设置了command + F的快捷方式作为入口。

监听键盘command + F事件

监听键盘command + F事件

在实现查找功能的时候,可以考虑增加上循环查找、区分大小写,高亮内容等等。网上有很多代码,这里就不啰嗦展示了。

3.4、替换&&编译文件

编译过程很简单,在项目中build一下即可生成所需要的class文件,然后使用jar uf命令,就可以将文件更新到jar包中。

4、实践

替换到原版的jar包后,就可以开始实践了。首先查看右键菜单,发现成功添加了URL decode一项。

添加的菜单

添加的菜单

点击该选项后,会将转码的结果用一个新的pop弹窗来展示。

Decode结果

Decode结果

额外增加的查找功能,顺便高亮一下结果,让所搜更加便利。

查找功能

查找功能

总结

到这里,我们就达到了预期的效果 - 给Charles添加URL Decode的扩展功能

整个过程相对来说比较顺利,一是java代码反编译较为容易,二是需求明确且比较简单。经过需求制定,到逆向分析,再到功能实现,中间也踩了一些小坑,不过都顺利的解决了。有了这个功能,就不必在网页工具和charles中来回切换了,大大地提高了工作效率。

从此次经历中还看到一些安全方面的问题,即在搜索资料的过程中,发现网络上充斥着大量破解相关的内容。谁也不知道在这些破解的文件中,是否包含了恶意的代码在其中。

因此强烈建议从官方网站下载安装文件

免费评分

参与人数 28吾爱币 +29 热心值 +25 收起 理由
m0re + 1 + 1 我很赞同!
hkbayer04 + 1 鼓励转贴优秀软件安全工具和文档!
icodex + 1 + 1 热心回复!
oyfj + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zsq + 1 + 1 谢谢@Thanks!
gaosld + 1 + 1 热心回复!
Polar!S + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Mr_zhaohy + 1 谢谢@Thanks!
罗科帷幕 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lz3329178 + 1 + 1 热心回复!
红烧排骨 + 1 我很赞同!
ghosts1 + 1 + 1 我很赞同!
smilerYang + 1 谢谢@Thanks!
sunsyw + 1 + 1 热心回复!
墨等风也你 + 1 谢谢@Thanks!
songyiisong + 1 + 1 我很赞同!
asq56747277 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
海云帆 + 1 + 1 谢谢@Thanks!
largemonster + 1 + 1 热心回复!
庐陵酒徒 + 1 热心回复!
sym945 + 1 + 1 热心回复!
Time丨Brand + 3 + 1 热心回复!
TinyBad + 2 + 1 用心讨论,共获提升!
solly + 2 + 1 鼓励转贴优秀软件安全工具和文档!
poiuyhn + 1 谢谢@Thanks!
wkxq + 2 + 1 谢谢@Thanks!
笙若 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Cyntec + 2 + 1 也有过这个想法,不过一直没实践,给作者点个赞

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

solly 发表于 2020-7-21 17:35
Loopher 发表于 2020-7-21 09:24
很少逆向java的,原来可以用jar uf 将一个class文件写入到jar里边

用一般压缩软件(winrar,winzip,7z等)都可以,反正jar的格式就是 zip格式。
迈克尔詹姆斯 发表于 2020-8-3 19:49
自己动手,丰衣足食,谢谢大佬分享教程。我也正在研究客户端的开发,从IOS,到安卓,到windows。。看到您的文章,思路清晰,干净明了,真心点赞!!
不苦小和尚 发表于 2020-7-17 15:55
Tyki 发表于 2020-7-17 22:18
收藏了学习一下。
不苦小和尚 发表于 2020-7-17 22:53
最好有成品,希望楼主能发一下,高亮的
failsray 发表于 2020-7-18 14:19
不错 谢谢老师
poiuyhn 发表于 2020-7-18 23:03
好文章,收藏了
bingbingbd 发表于 2020-7-19 17:11
非常的喜欢,实验一下
Loopher 发表于 2020-7-21 09:24
很少逆向java的,原来可以用jar uf 将一个class文件写入到jar里边
znew 发表于 2020-7-21 15:33
看完感觉并不难,思路很重要!学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 13:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表