寻找消失的类名

公众号: 奋飞安全 等级 354 1 0
标签:

一、目标

前几天有个朋友问了我一个新手问题,frida提示: 找不到 p009cn.com.chinatelecom.gateway.lib.C1402a 这个类

寻找消失的类名

1:main

原因是,jadx反编译的时候,为了反混淆,会把类名做个处理,加上几个数字,这样好让你分辨,不会满眼都是变量a。

实际上他已经提示你了,这个类的真实类名是 cn.com.chinatelecom.gateway.lib.a

本以为事情就这么过去了,谁知道没过两天,在一个夜黑风高的的晚上,我也遇到了这个问题。

二、步骤

类名是奇怪字符

老江湖也遇到新问题了,这个类名是什么鬼?

寻找消失的类名

1:step1

现在的App太不讲武德了,混淆我也就忍了,搞出个鬼画符,是什么操作?

这个符可不好打出来,常规操作是直接把类名复制到js里面,结果不好使,frida依然抱怨 找不到这个类。

查了一下js文档,有个 encodeURIComponent() 函数,可以把这种鬼画符通过 UTF-8 编码的转义 然后打印出来。

但是这个类名的转义字符是啥呢?

遍历之

我们可以找个取巧的方式,把这个包下的类都遍历出来,这样不就可以知道这个类名的UTF-8 编码的转义了吗?

Java.enumerateLoadedClasses({
    onMatch: function(className) {
        if(className.indexOf('com.google.android.material.tooltip') >=0 ){
            console.log(className.toString());
            console.log(encodeURIComponent(className.toString()));
        }
    },
    onComplete:function(){
    }
});

跑一下,符显形了。

寻找消失的类名

1:show1

Hook之

拿到了转义编码之后如何hook呢? 这时候就需要 decodeURIComponent函数了

var hookCls = Java.use(decodeURIComponent('com.google.android.material.tooltip.%DB%A4%DB%A4%DB%9F%DB%A6'));

这次frida就不抱怨找不到类名了。

成员函数名

找到了类名当然不是我们的目的,我们的目的是星辰大海,哦不,是hook成员函数呀。

寻找消失的类名

1:step2

不出所料,它的方法名,依然是鬼画符。

这时候我们就需要去遍历方法名了

var hookCls = Java.use(decodeURIComponent('com.google.android.material.tooltip.%DB%A4%DB%A4%DB%9F%DB%A6'));
var methods = hookCls.class.getDeclaredMethods();

for (var i in methods) {
    console.log(methods[i].toString());
    console.log(encodeURIComponent(methods[i].toString().replace(/^.*?.([^\s.()]+)(.*?$/, "$1")));
}

结果倒是没问题,就是分辨起来还有点麻烦。只能从成员函数的入参和返回值来分辨我们想要hook的成员函数

寻找消失的类名

1:show2

Hook这个成员函数的代码如下

hookCls[decodeURIComponent("%DB%9F%DB%A3%DB%A5%DB%9F%DB%A3")]
           .implementation = function () {
                        console.log("m1344 =============== ");
                        return "xxx";

           }

搞定,收工~

三、总结

为了抵抗分析,App能想的办法都想了。只能比谁藏的更深,找的更快了。

寻找消失的类名

总把平生入醉乡

Tip:

: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

收藏
评论区

相关推荐

Java的数值数据类型以及命名规范
一、Java中的数值数据类型 <table<tbody<tr<td width"75" valign"top" style"wordbreak: breakall;"<span style"backgroundcolor: rgb(255, 254, 213);"类型名<br</span</td<td width"299
C# 不同类型对象同名属性赋值
/// <summary> /// 不同类型对象同名属性赋值 /// </summary> /// <typeparam name="S">源类型</typeparam> /// <typeparam name="T">目标类型</typeparam>
Java中匿名类的两种实现方式
使用匿名内部类课使代码更加简洁、紧凑,模块化程度更高。内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到。然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式:第一种,继承一个类,重写其方法;第二种,实现一个接口(可以是多个),实现其方法。下面通过代码来说明: 1. publicclass TestAnonymo
Java中的工具类究竟如何命名?
先来几个例子 ====== * JDK自带工具类 Arrays.asList(); Objects.equals(); Collections.sort(); * Spring框架工具类 StringUtils.isEmpty(); CollectionUtils.isEmpty() FileCopyUtils.copy(); * Hu
Java基础入门之Object类、匿名内部类、构造方法的继承解析
点击上方“ **Java进阶学习交流** ”,进行关注 后台回复“**Java**”即可获赠Java学习资料 今 日 鸡 汤 古调虽自爱,今人多不弹。 前言 -- 大家好,我是Java进阶者。这篇文章我们主要介绍Java基础中的Object类、匿名内部类、构造方法的继承知识,一起来学习下吧! 一、Object类 ---------
Java开发笔记(六十)匿名内部类的优势
前面依次介绍了简单接口和扩展接口,给出的范例都是自定义的接口代码,其实Java系统本身就自带了若干行为接口,为了更好地理解系统接口的详细用法,接下来还是从一个基础的例子出发,抽丝剥茧地逐步说明接口的几种调用方式。 早在阐述如何使用数组的时候,就提到Java提供了Arrays工具可用于数组变量的常见处理,例如该工具的copyOf方法用来复制数组、sort方
java不同的包下相同的类名的问题与解决办法
Java中的类以包进行分类组织,当程序中需要用到某个包下的类时,可以以该类的全限定名进行引用。这样,不同的包中的类就可以同名,不会产生混淆。 但是这样就可能导致引用的时候会产生一些问题。 第一个问题,是Spring中自动注入的问题。 Spring自动注入不同包下的相同类名的类会有点问题。 Spring并不支持不同包下的类名相同的设定。这是因为默认的S
MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
一、准备演示需要使用的表和数据 --------------- ![复制代码](http://static.oschina.net/uploads/img/201512/27162409_Fm1W.gif) CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT,
ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
原文:https://www.stevejgordon.co.uk/httpclientfactory-named-typed-clients-aspnetcore 发表于:2018年1月       上一篇文章《HttpClientFactory简介》我解释了创建该功能的原因。我们知道了它可以解决的问题,然后例举了一个非常基本的示例展示了如何在WebAP
FtpUtil ftp工具类 过滤文件名
工具类: import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File;
Linux文件类型 扩展名的作用
链接类型文件 ![](https://images2018.cnblogs.com/blog/1430251/201807/1430251-20180714211243569-687719486.jpg) 查找显示管道文件 ![](https://oscimg.oschina.net/oscnet/e8ddb94f7f332b66dd29ddcb5b3
Python技巧之运行时访问类名和函数名
你可以在运行时获取字符对象名,技巧是使用下划线包裹的属性: # You can get the name of # an object's class as a # string: >>> class MyClass: pass >>> obj = MyClass() >>> obj.__
SDK“iOS 10.0”中的产品类型“应用”需要代码签名
我面临以下问题,无法构建应用程序。 > XXX具有冲突的配置设置。 XXX已自动配置,但已手动指定配置文件WildCard。 在构建设置编辑器中将配置配置文件值设置为“自动”,或切换到目标编辑器中的手动配置。 SDK“iOS 10.0”中的产品类型“应用”需要代码签名 我也无法选择特定的个人资料。 [![在此输入图像描述](https://i.stac
JavaScript用html5新方法操作元素类名
现在网页中类属性使用越来越多,经常会通过增加类、移除类给指定的元素修改样式效果。早先JavaScript处理起来特别不方便,需要先取到class属性,然后对字符串进行处理。现在html5给所有元素增加了classList属性来操作类属性,非常方便。 classList先看如下代码:html 栏目1 栏目2 栏目3 // 获取到当前的li元素 let acti
寻找消失的类名
一、目标前几天有个朋友问了我一个新手问题,frida提示: 找不到 p009cn.com.chinatelecom.gateway.lib.C1402a 这个类1:main原因是,jadx反编译的时候,为了反混淆,会把类名做个处理,加上几个数字,这样好让你分辨,不会满眼都是变量a。实际上他已经提示你了,这个类的真实类名是 cn.com.chinateleco