实战 逆向最新黄鸟抓包软件

这篇具有很好参考价值的文章主要介绍了实战 逆向最新黄鸟抓包软件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

观众器者为良匠,观众病者为良医。这篇文章分析了知名抓包软件HttpCanary高级功能的使用限制,使用了许多实用的工具,过程写的尽可能的详细,希望对大家有所帮助。

笔者实践环境:

  1. pixel 6
  2. Android 12
  3. frida 15.1.27
  4. HttpCanary v3.3.5

脱壳

在jadx中查看原包,检查软件是否加固

实战 逆向最新黄鸟抓包软件

由于包下的类比较少且看见了stub,因此可以确定是360加固了,直接用工具脱壳,我用的是hluwa巨佬的frida-dexdump,具体用法可以看官网,这里直接进行尝试脱壳

实战 逆向最新黄鸟抓包软件

在众多dex文件中通过入口类进行筛选

实战 逆向最新黄鸟抓包软件

脱壳完毕~~

核心代码定位与分析

两种思路:

  1. 从激活功能下手,修改成功逻辑

实战 逆向最新黄鸟抓包软件

  1. 从vip功能下手,定位身份判断关键点

实战 逆向最新黄鸟抓包软件

对比两种思路,第二种思路感觉更加的简单和直接,当然第一种也是可以做的,只不过会比想想中的更加复杂,我这里直接给出第一种思路的frida版本,但它是不完善的,重启软件会失效,有兴趣的可以研究一下

function pojie() {
    // remove app detect expression
    Java.choose("com.guoshi.httpcanary.ui.premium.PremiumActivateActivity", {
        onMatch: function (instance) {
            console.log("f7834 before value is " + instance.\uFC82.value)
            instance.\uFC82.value = 1
        },
        onComplete: function () {

        }
    })

    // break vip step1
    let C2217 = Java.use("com.guoshi.\uFC70.\uFC71.\uFC72");
    C2217["\uFC70"].implementation = function () {
        let ret = this.\uFC70.apply(this, arguments);
        var CodeActivateResBody = Java.use("com.guoshi.httpcanary.model.CodeActivateResBody")
        var obj = CodeActivateResBody.$new()
        obj.status.value = 1;
        obj.encryptToken.value = "mdcg";
        obj.token.value = "mdcg";
        console.log("Create obj --> " + obj)
        console.log("status --> " + obj.status.value)
        console.log("encryptToken --> " + obj.encryptToken.value)
        console.log("token --> " + obj.token.value)

        return obj;
    };

    // break vip step2
    let PremiumActivateActivity = Java.use("com.guoshi.httpcanary.ui.premium.PremiumActivateActivity");
    PremiumActivateActivity["\uFC71"].overload('java.lang.String', 'java.lang.String').implementation = function (arg1, arg2) {
        let ret = this.\uFC71(arg1, arg2);
        console.log('\uFC71 ret before value is ' + ret);
        ret = true
        console.log('\uFC71 ret after value is ' + ret);
        return ret;
    };
}

function main() {
    Java.perform(function () {
        pojie()
    })
}

setImmediate(main)

实战 逆向最新黄鸟抓包软件

下面主要对第二种思路进行分析,极速模式属于高级功能,由一个按钮进行控制,最迅速的定位方式为hook点击事件,并反推出核心判断。我使用r0ysue巨佬的hookEvent.js快速定位点击事件,代码不复杂,建议研究一下

var jclazz = null;
var jobj = null;
function getObjClassName(obj) {
	if (!jclazz) {
		var jclazz = Java.use("java.lang.Class");
	}
	if (!jobj) {
		var jobj = Java.use("java.lang.Object");
	}
	return jclazz.getName.call(jobj.getClass.call(obj));
}

function watch(obj, mtdName) {
	var listener_name = getObjClassName(obj);
	var target = Java.use(listener_name);
	if (!target || !mtdName in target) {
		return;
	}
	target[mtdName].overloads.forEach(function (overload) {
		overload.implementation = function () {
			console.log("[WatchEvent] " + mtdName + ": " + getObjClassName(this))
			return this[mtdName].apply(this, arguments);
		};
	})
}

function OnClickListener() {
	Java.perform(function () {
		Java.use("android.view.View").setOnClickListener.implementation = function (listener) {
			if (listener != null) {
				watch(listener, 'onClick');
			}
			return this.setOnClickListener(listener);
		};
		
		Java.choose("android.view.View$ListenerInfo", {
			onMatch: function (instance) {
				instance = instance.mOnClickListener.value;
				if (instance) {
					console.log("mOnClickListener name is :" + getObjClassName(instance));
					watch(instance, 'onClick');
				}
			},
			onComplete: function () {
			}
		})
	})
}
setImmediate(OnClickListener);

实战 逆向最新黄鸟抓包软件

注册点击事件的类是com.guoshi.httpcanary.ui.-$ L a m b d a Lambda LambdaHomeActivity$L0WEKAV1lAcNYjl4nGyTdnm61r8,在jadx中查看

实战 逆向最新黄鸟抓包软件

实战 逆向最新黄鸟抓包软件

后面的注释是我加上去的,下面从第一处判断开始分析

m6185函数传入了一串加密字符串,我们需要知道它代表了什么意思,可以看一下这个函数

实战 逆向最新黄鸟抓包软件

实战 逆向最新黄鸟抓包软件

可以确定是一个解密函数,但我们不需要逆向出解密的逻辑,因为可以直接hook获取返回值

function hook_1(){
    let C2146 = Java.use("com.guoshi.httpcanary.\uFC72");
    C2146["\uFC70"].implementation = function (str) {
        console.log('input str: ' + str);
        let ret = this.\uFC70(str);
        console.log('ret value is ' + ret);
        return ret;
    };
}

function main(){
    Java.perform(function(){
        hook_1()
    })
}
setImmediate(main)

实战 逆向最新黄鸟抓包软件

解密的字符串是settings_turbo_mode,翻译成汉语就是设置极速模式,那m6317函数是什么呢?点进去看看

实战 逆向最新黄鸟抓包软件

懂了,m6317是从sharedPreferences中取出相应key的value,而settings_turbo_mode保存的是当前极速模式是打开还是关闭,如果返回值为true,那么表明当前属于开启的状态,这样就要进入判断成功的逻辑,把开启状态变成关闭状态。

下面分析第二处判断,该处判断取决于a函数和z函数的返回值,点开看一下

实战 逆向最新黄鸟抓包软件

有native关键字就意味着我们要分析so层了,那么第一步就是要确定这些函数在哪个so文件中,首先我们假设这些函数都是动态注册的,那么就可以使用yang神的hook_RegistNatives.js脚本迅速判断,注意要以spawn模式启动,脚本如下:

function find_RegisterNatives(params) {
    var symbols = Module.enumerateSymbolsSync("libart.so");
    var addrRegisterNatives = null;
    for (var i = 0; i < symbols.length; i++) {
        var symbol = symbols[i];
        
        //_ZN3art3JNI15RegisterNativesEP7_JNIEnvP7_jclassPK15JNINativeMethodi
        if (symbol.name.indexOf("art") >= 0 &&
                symbol.name.indexOf("JNI") >= 0 && 
                symbol.name.indexOf("RegisterNatives") >= 0 && 
                symbol.name.indexOf("CheckJNI") < 0) {
            addrRegisterNatives = symbol.address;
            console.log("RegisterNatives is at ", symbol.address, symbol.name);
            hook_RegisterNatives(addrRegisterNatives)
        }
    }

}

function hook_RegisterNatives(addrRegisterNatives) {

    if (addrRegisterNatives != null) {
        Interceptor.attach(addrRegisterNatives, {
            onEnter: function (args) {
                console.log("[RegisterNatives] method_count:", args[3]);
                var env = args[0];
                var java_class = args[1];
                var class_name = Java.vm.tryGetEnv().getClassName(java_class);
			   var methods_ptr = ptr(args[2]);
                var method_count = parseInt(args[3]);
                for (var i = 0; i < method_count; i++) {
                    var name_ptr = Memory.readPointer(methods_ptr.add(i * Process.pointerSize * 3));
                    var sig_ptr = Memory.readPointer(methods_ptr.add(i * Process.pointerSize * 3 + Process.pointerSize));
                    var fnPtr_ptr = Memory.readPointer(methods_ptr.add(i * Process.pointerSize * 3 + Process.pointerSize * 2));

                    var name = Memory.readCString(name_ptr);
                    var sig = Memory.readCString(sig_ptr);
                    var find_module = Process.findModuleByAddress(fnPtr_ptr);
                    console.log("[RegisterNatives] java_class:", class_name, "name:", name, "sig:", sig, "fnPtr:", fnPtr_ptr,  " fnOffset:", ptr(fnPtr_ptr).sub(find_module.base), " callee:", DebugSymbol.fromAddress(this.returnAddress));
                }
            }
        });
    }
}

setImmediate(find_RegisterNatives);

实战 逆向最新黄鸟抓包软件

确定了我们要分析的是libHttpCanary.so文件,并且函数的偏移地址也拿到了,把文件拖进ida中看一下,重新命名的过程就不展示了

实战 逆向最新黄鸟抓包软件

a方法调用了z方法和l方法,点进z方法看一下

实战 逆向最新黄鸟抓包软件

由上面的伪代码可以推出,z方法就是判断当前是否是高级模式,如果是高级模式则返回true,下面看看l方法是什么

实战 逆向最新黄鸟抓包软件

由伪代码可以看出l方法返回用户试用的剩余天数,如果为正数则表明用户的试用还没有到期,如果为负数则表明用户的试用到期了,现在重新看a方法应该清晰了很多

实战 逆向最新黄鸟抓包软件

这个逻辑表达式表示的是如果用户不是vip且试用还没有到期,那么结果为true。

那么两个核心函数就找到了,一个是a方法,一个是z方法,a方法判断是否是试用模式,z方法判断是否是vip模式,那么这两个方法只要有一个为真就能使用软件的高级功能了,下面使用frida简单测试一下

function hook_2(){
    let Cont = Java.use("com.guoshi.httpcanary.jni.Cont");
    Cont["a"].implementation = function (context) {
        let ret = this.a(context);
        ret = true
        console.log('a ret value is ' + ret);
        return ret;
    };

    Cont["z"].implementation = function (context) {
        let ret = this.z(context);
        ret = false
        console.log('z ret value is ' + ret);
        return ret;
    };
}

function main(){
    Java.perform(function(){
        // hook_1()
        hook_2()
    })
}
setImmediate(main)

使用脚本之前

实战 逆向最新黄鸟抓包软件

使用脚本之后

实战 逆向最新黄鸟抓包软件

结尾

这个软件整体的防护还是很到位的,java层的混淆也是很给力,但如果加一些frida的反调试并且在so层多加一点防护那么就更安全了。上面只是使用了frida脚本进行了功能的分析,我也把它写成了xposed模块,方便大家的使用,原包与模块都放在了下面的链接中,当然有能力的还是要支持下正版。因为新人创作不易,希望大家点个赞鼓励一下((′▽`〃))

HttpCanary_v3.3.5.apk

httpCanaryBreaker.apk文章来源地址https://www.toymoban.com/news/detail-455196.html

到了这里,关于实战 逆向最新黄鸟抓包软件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【k8s完整实战教程0】前言

    系列文章:这个系列已完结,如对您有帮助,求点赞收藏评论。 读者寄语: 再小的帆,也能远航! 【k8s完整实战教程0】前言 【k8s完整实战教程1】源码管理-Coding 【k8s完整实战教程2】腾讯云搭建k8s托管集群 【k8s完整实战教程3】k8s集群部署kubesphere 【k8s完整实战教程4】使用

    2023年04月24日
    浏览(40)
  • 安卓逆向学习及APK抓包(二)--Google Pixel一代手机的ROOT刷入面具

    在手机选择上,优先选择谷歌系列手机,Nexus和Pixel系列,刚好手头有Pixel一代,就直接root了,大家感兴趣可以某宝几百块钱入手一台。Pixel手机花了本人一天,中间踩坑无数,终于还是root成功,感触颇深,所以先记录一下Pixel手机的root之旅。 安卓逆向学习及APK抓包(一)【Ka

    2024年02月11日
    浏览(64)
  • 最新微信小程序抓包方法

    一、安装 fiddler 官网下载:https://www.telerik.com/download/fiddler 二、配置 打开fiddler tools- options,genneral: 全选 https: connections: 配置代理地址 gateway: 三、打开电脑端小程序 退出微信,登录微信时设置代理 打开小程序 抓包成功 如果没成功 打开小程序、打开任务管理器,找到小程序

    2024年02月11日
    浏览(56)
  • 微信小程序抓包-夜神模拟器结合BurpSuite抓包(可用于现在最新版本微信)

    2023年3月23日18.37.46:很多人说网络错误,目前我再次自己试过了,都没有出现这个问题,如果害怕出现网络异常等情况,就不要看下去了 之前总是通过电脑来抓包,时常失效,这里就用夜神模拟器配合Burp来抓包 也可以参考这位博主的文章 Fiddler+Proxifier进行PC端微信小程序抓包 通过Fi

    2024年02月09日
    浏览(94)
  • 2023年最新微信小程序抓包教程

    01 开门见山 隔一个月发一篇文章,不过分。 首先回顾一下《微信绑定手机号数据库被脱库事件》,我也是第一时间得知了这个消息,然后跟踪了整件事情的经过。下面是这起事件的相关截图以及近日流出的一万条数据样本: 个人认为这件事也没什么,还不如关注一下之前

    2023年04月20日
    浏览(41)
  • 最新PDD批发Anti-Content参数逆向分析与算法还原

    【🏠作者主页】: 吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python与爬虫领域研究与开发工作! 【🌟作者推荐】:对爬虫领域以及JS逆向分析感兴趣的朋友可以关

    2024年04月16日
    浏览(47)
  • Web逆向、软件逆向、安卓逆向、APP逆向,关于网络安全这些你必须懂

    逆向工程是网络安全行业里面一项很重要的技术。 逆向是一个相对正向而言的解释,相对正向来说,对一个程序来讲,正向就是开发的过程,从0到1。 就是在一个软件诞生的整个生命周期中的一个过程, 也就是按照需求通过编码把需求实现,产生一个程序,当然这个程序可

    2024年02月07日
    浏览(43)
  • 抖音最新版抓包方案,修改so绕过ssl

    dy过ssl charles抓包 及xposed的justtrustme安装到手机上只能过系统的ssl。 抖音写了一个非系统的ssl所以需要反编译so来处理。 第一步,charles 我用的是magisk手机,先重charles把证书下载到pc端 在通过adb push 传入到sdcard 通过手机安装证书[wifi 的高级选项中,安装证书] 把用户证书通过

    2024年02月03日
    浏览(54)
  • 【Android逆向】9年前的旧手机任性安装最新app?可以的,方法很简单

    目录 前言 二、执行步骤 1.反编译apk 2.修改apktool.yml中的minSdkVersion 3.保存、回编译、签名 4.重新安装 9年前的旧手机任性安装最新的app?可以的,方法很简单 智能手机更新换代太快,用户的换机周期也越来越短,7年以上的手机一般就会被厂家认定为过时产品,不再提供技术支

    2024年02月11日
    浏览(40)
  • 2023最新版Android逆向教程——第1天:Android Studio的安装与配置

    通常情况下,为了提高开发效率,需要使用相应的开发工具。在 Android 发布初期,推荐使用的开发工具是 Eclipse,随着 2015 年 Android Studio 正式版推出,标志着 Google 公司推荐的 Android 开发工具已从 Eclipse 更改为 Android Studio。而且在 Android 的官方网站中,也提供了集成 Android 开

    2024年02月07日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包