服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

实战|一次APP密文Hook获取明文数据

日期: 来源:HACK之道收集编辑:绿盟科技

作者:绿盟科技

来源:https://forum.ezreal.cool/thread-67-1-2.html

在APP测试过程中,可能会遇到各种阻碍,如:
  1. Root检测,不能在root手机进行测试。

  2. 代理检测,无法代理抓包。

  3. 证书强校验,会出现“网络连接错误”等提示信息。

  4. 请求包的body部分被加密,使用AES、RSA等等。

那么在遇到这些情况的如何去应对?

目前比较好用的方法是Hook抓包,绕过一些检测校验。(逆向加密算法成本太高,比较费时间,这里加密函数是在native层的。)

本文将讲述APP在密文通信下,通过hook手段看到明文数据。

1.请求包密文参数hook:

打开某APP,登入抓包发现数据加密处理了,想办法搞明文:

使用app查看工具查看apk是否加固,最终验证是360加固。

然后使用了脱壳机进行脱壳,脱壳机拖出了很多dex文件,最终目的是想知道 “明文”、“密文”相关的函数在哪个dex文件(仅展示部分文件)。

下一步思考,进行简单的定位,分析请求包的body部分,观察iv参数,很像base64编码。

尝试使用base64解码,解码后的数据为 “5b567f680892474e”,这数据可能是AES算法的IV,十六进制的。

既然body的iv部分使用了base64编码,下一步立马想到对“某APP”进行base64的hook,因为他的request请求体部分肯定调用了base64加密,js代码如下:

Java.perform(function () {
    function showStacks() {
        console.log(
            Java.use('android.util.Log').getStackTraceString(
                Java.use('java.lang.Throwable').$new()
            )
        )
    }

    var base64 = Java.use("android.util.Base64");
    base64.encodeToString.overload('[B', 'int').implementation = function (a,b) {
        showStacks();
        console.log("base64.encodeToString: ", JSON.stringify(a));
        var result = this.encodeToString(a,b);
        console.log("base64.encodeToString: ",result)
        return result;
    };
});

Hook的结果,确实调用了android内置的base64方法,但是,结果和iv的不一样。进一步分析,他这个的base64是请求体cookie里面部分数据的base64结果,不是body部分的,所以加密和这块无关。

但是这一部分有价值,他的调用栈显示了整个调用过程,分析调用栈有个 “encryption” 字眼,第一印象,这估计就是加密函数,所以,下面根据调用栈的类名,定位脱壳后的dex文件(为什么要定位dex?因为脱壳后的dex文件太多,无法准确定位功能点)

通过上图调用栈,将encryption的类名进行全文搜索,关联到是5856160这个dex文件:

然后用jadx分析这个dex,发现都是方法a的重载

直接用objection批量hook,发现是调用了2个a方法,一个参数是“[object Object]”,另一个是“int, java.util.Map”:

针对上述两个方法进行hook,编写hook脚本:

Java.perform(function () {
    var name = "com.xxx.xx.util.encryption.c";
    var encrypt = Java.use(name);
    encrypt.a.overload('java.util.Map').implementation = function (obj) {
        console.log("parameter is : ", JSON.stringify(obj));
        var retval = this.a(obj);
        console.log("1 return value : ",retval);
        return retval;
    };

    encrypt.a.overload('int', 'java.util.Map').implementation = function (num, map) {
        console.log("first parameter : ",num);
        console.log("second parameter : ",JSON.stringify(map));
        var retval = this.a(num, map);
        console.log("2 return value : ", retval);
        return retval;

    };
});

然后运行打印,验证一下,一个是明文数据,一个是密文数据:

分析过程到此结束,即可看到明文数据。

2.响应数据hook

再进一步分析,然后发现com.xxx.xx.h.a方法有响应内容输出:

进入com.xxx.xx.h.a方法:

然后反编译dex文件,发现response关键字眼,代码中是将内容放入af的c方法中,下面看看af是什么:

发现af好像是kotlin的有一个底层库:(af是混淆后的名字)

然后用objection打印参数查看,确实有响应包的数据,下面直接hook这个kotlin模块:

编写hook脚本:

Java.perform(function () {

    var name = "com.xxx.xx.util.encryption.c";
    var encrypt = Java.use(name);
    encrypt.a.overload('java.util.Map').implementation = function (obj) {
        //console.log("parameter is : ", JSON.stringify(obj));
        var retval = this.a(obj);
        send(retval);
        var tmp;
        var op = recv('python_send', function(value) {
                console.log("修改完的数据:", value.payload);
                tmp=value.payload;
                return value.payload;
            }).wait();
        //console.log("op: ",op);
        return tmp;

    };

    var response = Java.use("kotlin.jvm.internal.af");
    response.c.overload('java.lang.Object', 'java.lang.String').implementation = function (obj, s) {
        var r = s.indexOf("try");
        //console.log("r = ", r);
        if (r!=-1) {
            console.log("result is ",)
            console.log("one param is ", obj);
            //console.log("two param is ", s);
        }

        var retval = this.c(obj,s);
        return retval;

    };

});

这里hook脚本js和python脚本联合,将请求发送到burpsuite,再通过burpsuite将修改后的数据回调进app进行后序操作,如下图:

正常的请求过程

Hook的过程:

这个过程中需要一个中转服务器,一个和burpsuite通信的脚本:(其中hook的语句写入了通信脚本里面,让其自动加载进去)。最终控制台输出明文数据。

测试截图:

相关阅读

  • 烟台5G大数据中心预计年底封顶,位于莱山滨海路

  • 大小新闻客户端3月16日讯(YMG全媒体记者 徐睿 通讯员 王雅静)近日,在位于莱山区滨海路街道的烟台5G大数据中心项目建设现场,工人们在各自岗位上有条不紊地忙碌着,呈现出一派热火
  • 【权威发布】为淄博乡村振兴装上“智慧大脑”

  • □淄博日报/淄博晚报/博览新闻见习记者 赵培珊如何利用数字技术赋能乡村振兴?3月15日,市政府新闻办公室组织召开“乡村振兴看淄博”主题系列新闻发布会第一场。市大数据局相关
  • 是的,我们出了一本书

  • 历经两年又三个月,在这个春天里,RUC新闻坊终于做出了一本关于自己的书:《把数据作为方法:数据叙事的理论与实践》。在这本书里,你能看到一整个敞开的“后台”。这个小小的、流动
  • CASS小技巧:3步化解只有高程注记的问题

  • 最近有用户反馈,使用CASS处理数据时,高程只有注记却没有高程点,怎么能把高程点生成出来呢?本期推文,我们教你3步化解只有高程注记的问题。PS:此方法也同样适用于只有高程点没有高
  • 含“中”量高的基金

  • 哈喽,大家好,我是喵喵姐,每天养基之前学一学。三月份以来,中字头央企指数屡屡登上市场热搜,前三个交易日涨了5.14%,本周有所回调。数据来源:WIND大涨背后的原因与多部委的官方发声
  • 你的大脑要被监控了

  • 神经接口将成为人们与技术互动的主要方式之一文 | 妮塔·法拉哈尼‍‍大脑监控的时代已经开启。神经技术设备在商业和管理上的应用范围在迅速扩大。全球各地的企业已开始将

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • AMD Radeon 780M 核显最新跑分:超 GTX 1650 Max-Q

  • IT之家是科技媒体中的老牌一哥了,我不仅每天都看,还会转载他家的笔记本新闻。手机、笔电等数码新品的资讯,去他家的App和网站上看准没错。今天就向大家强烈推荐IT之家公众号,另
  • 实战|一次APP密文Hook获取明文数据

  • 作者:绿盟科技来源:https://forum.ezreal.cool/thread-67-1-2.html在APP测试过程中,可能会遇到各种阻碍,如:Root检测,不能在root手机进行测试。代理检测,无法代理抓包。证书强校验,
  • 6月底通车!相城⇋姑苏更快了!|早安,苏州

  • 今天白天多云到阴夜里阴有中雨今晨最低气温:8~9℃今天最高气温:16~17℃早安☀今日关注01姑苏区消息,桐泾路北延工程项目线路里程2.07公里,起点位于西塘河南侧,下穿清塘路、山塘河