吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5366|回复: 7
收起左侧

[原创] Charles 4.5.1 静态逆向 自动化Patch

  [复制链接]
Ax王者 发表于 2019-11-3 14:07
https://blog.csdn.net/Kaitiren/article/details/83182108

主要思路来自于这里,这里会利用ASM提供一种更为简单的逆向方法,
对于大佬们那些爆破,对我来说就太难了,静态破解是最简单的方法了。

我们找到那篇文章找到的一个入口点,然后根据他的思路进行修改。
(没想到这种商业软件能会出现如此简单的验证)
image.png

修改后:
image.png

之后我们编译导出:
image.png

替换运行测试:
image.png

成功了,这个方法是可行的。






接下来我们开始实现自动化破解,使用ObjectWeb ASM框架
使用了我自己整合的框架(Radon混淆器ClassWrapper),并添加了一些东西,让他能够更容易使用。

[Java] 纯文本查看 复制代码
        // 加载根目录下以 input.jar 为名称的文件,输出为 output.jar 的文件。
        File input = new File("input.jar");
        File output = new File("output.jar");

        // 检查文件是否存在

        if(!input.exists()){
            logger.info("目标 input.jar 文件不存在. ");
            System.exit(0);
        }

        ClassEditor classEditor = new ClassEditor(logger, input, output);
        classEditor.init(); // 初始化加载 class 文件


对于静态破解,我们还需要对目标类进行条件匹配,所以先以我手中的样本为例
目标类的名称为YQUd,我们直接写死并输出类信息

[Java] 纯文本查看 复制代码
         classEditor.getClasses().values().forEach(classWrapper -> {
            if(classWrapper.getName().equals("com/xk72/charles/YQUd")){
                System.out.println(classWrapper.getName() + ": " + classWrapper.getMethods().size() + "-" + classWrapper.getFields().size() + "-" + classWrapper.getAccessFlags());
            }
        });


image.png

由此可知,目标类拥有26个方法,70个Field,Access为49
image.png

由此写出匹配:
[Java] 纯文本查看 复制代码
    private static boolean isTargetClass(ClassWrapper cw){
        return cw.getMethods().size() == 26 && cw.getFields().size() == 70 && cw.getAccessFlags() == 49;
    }


接下来我们需要定位那两个目标方法,并进行修改。

首先我们需要把boolean类型的那个方法进行匹配+修改:
image.png
到整个类找了一下发现就只有这一个是boolean类型且访问权限为9,所以匹配写起来也就轻松多了。

[Java] 纯文本查看 复制代码
    private static boolean isTargetBooleanMethod(MethodWrapper mw){
        return mw.getAccessFlags() == 9 && mw.getDescription().equals("()Z");
    }


之后我们就可以直接patch掉这个方法:
[Java] 纯文本查看 复制代码
                    if(isTargetBooleanMethod(methodWrapper)) {
                        // 对 instruction 进行清理 并返回true
                        methodWrapper.getMethodNode().instructions.clear();

                        methodWrapper.getMethodNode().instructions.add(new InsnNode(ICONST_1)); // 返回 TRUE
                        methodWrapper.getMethodNode().instructions.add(new InsnNode(IRETURN));

                        methodWrapper.getMethodNode().tryCatchBlocks.clear();
                        methodWrapper.getMethodNode().localVariables.clear();
                        methodWrapper.getMethodNode().exceptions.clear();
                        methodWrapper.getMethodNode().maxStack = 1;
                        methodWrapper.getMethodNode().maxLocals = 1;
                    }


对那个静态字符串的方法 处理方法甚是相同:
[Asm] 纯文本查看 复制代码
                    if(isTargetStringMethod(methodWrapper)){
                        // 对 instruction 进行清理 并返回水印
                        methodWrapper.getMethodNode().instructions.clear();

                        methodWrapper.getMethodNode().instructions.add(new LdcInsnNode("Cracked by UltraPanda")); // 返回 TRUE
                        methodWrapper.getMethodNode().instructions.add(new InsnNode(ARETURN));

                        methodWrapper.getMethodNode().tryCatchBlocks.clear();
                        methodWrapper.getMethodNode().localVariables.clear();
                        methodWrapper.getMethodNode().exceptions.clear();
                        methodWrapper.getMethodNode().maxStack = 1;
                        methodWrapper.getMethodNode().maxLocals = 1;

                        System.out.println("String Method Patched.");
                    }


菜鸡一个,有错误请指出,勿喷

image.png

免费评分

参与人数 6威望 +2 吾爱币 +10 热心值 +5 收起 理由
geniusrot + 1 我想要一个汉化补丁
majia4075669072 + 1 谢谢@Thanks!
冥界3大法王 + 1 用心讨论,共获提升!
tail88 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
Hmily + 2 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
onething + 1 + 1 热心回复!

查看全部评分

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

冥界3大法王 发表于 2019-11-3 15:02
用到的工具列表呢?
 楼主| Ax王者 发表于 2019-11-3 16:22
本帖最后由 Ax王者 于 2019-11-3 16:25 编辑
冥界3大法王 发表于 2019-11-3 15:02
用到的工具列表呢?

https://github.com/UltimateLeaks/JByteMod-Reborn 自己的 JByteMod 魔改版
用于静态修改、分析Java字节码
IDEA Ulitimate
小宇殿下 发表于 2019-11-3 17:50
Charles的破解确实是挺简单的,后来觉得没难度也放弃了这个工具的破解,主要是自己用不上...
shaokui123 发表于 2019-11-5 08:59
这个工具是网络抓包的吧
majia4075669072 发表于 2019-11-7 00:04
支持一把,苹果下面的逆向还是很少的,不错。
linyouqingseo 发表于 2019-11-24 01:21
大虾·············厉害!
liangjinwu520 发表于 2019-11-24 02:28
有破解好的吗?
cxljava 发表于 2020-2-13 14:11
工具能否分享呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-19 19:49

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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