我是靠谱客的博主 懦弱盼望,最近开发中收集的这篇文章主要介绍简单解读拼多多t.gif、tne.gif接口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

介绍

最近在对拼多多进行作业时发现,会产生大量t.git以及tne.gif接口,本以为是图片,结果看到其实是post数据,并且粗略看过全都是一些设备信息相关数据,这究竟是何用意,我们简单对一些数据进行逆向追踪分析试试看。

tne.gif解读

我们先来看一下tne.gif的数据如下:

{
	"error_code": "44400",
	"dns_ip": "unknown",
	"system": "aosp_angler-eng 7.1.2 N2G48B eng.root.20200221.205546 test-keys",
	"module": "30057",
	"payload": "{"system_version":"7.1.2","package_type":"Main","ssid":"\"xiaojun\"","process":"com.xunmeng.pinduoduo","HttpManagerErrorType":"20","url":"https:\/\/meta.yangkeduo.com\/","network_operator":"","thread_count":"18875","net":"","manufacture":"Huawei","mem_info":"maxMemory 512.00 MB  totalMemory 24.53 MB  freeMemory 0 bytes","disk":"79.0 24.00 GB","exceptionStr":"javax.net.ssl.SSLPeerUnverifiedException: Certificate pinning failure!\n  Peer certificate chain:\n    sha256\/b1b54697cb57877f039a80522adfdaa768126f3dd587f42946e9a440db2ddaa0: CNu003d*.yangkeduo.com,OUu003d技术部,Ou003d上海寻梦信息技术有限公司,STu003d上海市,Cu003dCN\n    sha256\/daa05e6bb0de440f00219c8607ee1180d65b3c416cc7ff57824dc9fee25f68c9: Cu003dNZ,STu003dAuckland,Lu003dAuckland,Ou003dXK72 Ltd,OUu003dhttps:\/\/charlesproxy.com\/ssl,CNu003dCharles Proxy CA (20 Jul 2021\\, DESKTOP-PLGJBD3)\n  Pinned certificates for meta.yangkeduo.com:\n    sha256\/3e9099b5015e8f486c00bcea9d111ee721faba355a89bcf1df69561e3dc6325c\n    sha256\/7d05ebb682339f8c9451ee094eebfefa7953a114edb2f44949452fab7d2fc185\n    sha256\/7e37cb8b4c47090cab36551ba6f45db840680fba166a952db100717f43053fc2\n    sha256\/4348a0e9444c78cb265e058d5e8944b4d84f9662bd26db257f8934a443c70161\n    sha256\/cb3ccbb76031e5e0138f8dd39a23f9de47ffc35e43c1144cea27d46a5ab1cb5f\n    sha256\/31ad6648f8104138c738f39ea4320133393e3a18cc02296ef97c2ac9ef6731d0\n    sha256\/7431e5f4c3c1ce4690774f0b61e05440883ba9a01ed00ba6abd7806ed3b118cf\n    sha256\/552f7bdcf1a7af9e6ce672017f4f12abf77240c78e761ac203d1d9d20ac89988\n    sha256\/cbb522d7b7f127ad6a0113865bdf1cd4102e7d0759af635a7cf4720dc963c53b\n    sha256\/bec94911c2955676db6c0a550986d76e3ba005667c442c9762b4fbb773de228c\n    sha256\/179fbc148a3dd00fd24ea13458cc43bfa7f59c8182d783a513f6ebec100c8924\n    sha256\/ca42dd41745fd0b81eb902362cf9d8bf719da1bd1b1efc946f5b4c99f42c1b9e\n    sha256\/ebd41040e4bb3ec742c9e381d31ef2a41a48b6685c96e7cef3c1df6cd4331c99\n\tat okhttp3.h.a(CertificatePinner.java:212)\n\tat okhttp3.h.a(CertificatePinner.java:157)\n\tat com.xunmeng.pinduoduo.basekit.http.c.a.a(PDDCertificatePinner.java:83)\n\tat okhttp3.internal.connection.c.a(RealConnection.java:323)\n\tat okhttp3.internal.connection.c.a(RealConnection.java:263)\n\tat okhttp3.internal.connection.c.a(RealConnection.java:155)\n\tat okhttp3.internal.connection.e.a(StreamAllocation.java:195)\n\tat okhttp3.internal.connection.e.a(StreamAllocation.java:130)\n\tat okhttp3.internal.connection.e.a(StreamAllocation.java:109)\n\tat okhttp3.internal.connection.a.a(ConnectInterceptor.java:42)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat okhttp3.internal.a.a.a(CacheInterceptor.java:93)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat okhttp3.internal.b.a.a(BridgeInterceptor.java:93)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.j.a(RetryAndFollowUpInterceptor.java:127)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.aimi.android.common.http.unity.internal.interceptor.b.a(CmtInterceptor.java:121)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.aimi.android.common.http.unity.internal.interceptor.e.a(GzipInterceptor.java:28)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.aimi.android.common.http.unity.internal.interceptor.g.a(RetryInterceptor.java:34)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.aimi.android.common.http.unity.internal.interceptor.f.a(LongLinkInterceptor.java:265)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.xunmeng.pinduoduo.arch.config.g$c.a(RemoteConfig.java:258)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.xunmeng.pinduoduo.basekit.http.manager.c$4.a(HttpManager.java:182)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.aimi.android.common.http.unity.internal.interceptor.c.a(CompletionInterceptor.java:95)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat com.aimi.android.common.http.unity.internal.interceptor.a.a(CircuitAPIInterceptor.java:35)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:111)\n\tat okhttp3.internal.b.g.a(RealInterceptorChain.java:77)\n\tat okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:202)\n\tat okhttp3.RealCall.execute(RealCall.java:75)\n\tat com.aimi.android.common.http.unity.a$a.execute(UnityCallFactory.java:181)\n\tat com.xunmeng.pinduoduo.arch.a.a.b.a.a(CallFactoryInterceptor.java:38)\n\tat com.xunmeng.pinduoduo.arch.a.a.a.a.a(RealInterceptorChain.java:41)\n\tat com.xunmeng.pinduoduo.arch.a.a.b.b.a(NormalizeInterceptor.java:19)\n\tat com.xunmeng.pinduoduo.arch.a.a.a.a.a(RealInterceptorChain.java:41)\n\tat com.xunmeng.pinduoduo.arch.a.f.d(VirtualCall.java:159)\n\tat com.xunmeng.pinduoduo.arch.a.f$a.b(VirtualCall.java:117)\n\tat com.xunmeng.pinduoduo.arch.a.a.a.run(NamedRunnable.java:20)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)\n\tat java.lang.Thread.run(Thread.java:761)\n","ram":"31.0 2.00 GB","longlink_local_port":"45697","longlink_local_ip":"192.168.101.98","rooted":"yes","battery":""}",
	"pdd_id": "",
	"platform": "Android",
	"network": "1",
	"app_version": "4.80.0",
	"user_agent": "android Mozilla/5.0 (Linux; Android 7.1.2; AOSP on angler Build/N2G48B; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.100 Mobile Safari/537.36  phh_android_version/4.80.0 phh_android_build/ca003764fa4071d744febe019128f06c22706ee1 phh_android_channel/sm pversion/0",
	"log_version": "1.0.0",
	"user_id": "",
	"android_id": "cf35bec7444f530a",
	"model": "AOSP on angler"
}

如上面数据所示,大部分都是手机设备的基本信息以及APP版本号,基本没什么可解读的,都是读取了手机的设备属性,也没有进行其它加密,而payload字段里面又包含了一个json。

module 是一它的常量值,类型与接口类型,这也是个人猜测,因为这个值是每个不一样的tne.gif接口都会变,并且是在APP源码内的,如下图所示:
在这里插入图片描述
也就是说,猜测服务器是根据module来区分这个接口是什么接口。

payload该字段我们特别查看一下exceptionStr字段,翻译过来是抛出异常的信息,根据内容查看,里面记录了证书信息以及调用堆栈,并且细心的可以发现,这里因为我是用charles抓包,连charles的证书信息也被它所记录,也就是服务器是知道你在抓包的(如果它想)
在这里插入图片描述
在这里插入图片描述
这里相对t.gif记录的数据更全面,包含你的设备RAM信息,DISK信息

rooted该字段是判断你的设备是否root,我们可以通过源码来分析下它的判断方式
在这里插入图片描述
上图我们看到他通过h(),i(),j() 3种方式进行判断,我们逐一查看他的判断方式

第一种判断方式如下图:判断你的手机包是否是test-keys(调试机),因为笔者的机器正式该类型,所以被记录了yes
在这里插入图片描述
第二种判断方式如下图:它是通过文件进行判断。
在这里插入图片描述

第三种判断方式:由于代码没有完全还原,但是也不难看出是通过/system/xbin/which判断的
在这里插入图片描述

thread_count该字段因为是一个数字,也对它进行了查找,发现是读取的系统文件/proc/sys/kernel/threads-max获取到的值。

以上是tne.gif的部分数据解读,其它大部分数据都是明文的设备信息,至于为什么服务器会记录这么多次,并且触发条件是如何的,目前不得而知,但是这也可能是风控的一个重要要点之一,可能很多小伙伴觉得那我直接不触发这个接口不就好了,傻瓜,拼多多的账号肯定是跟设备关联的,如果服务器判断你目前用的账号没有上报服务器信息,那他就知道你是直接调用接口,直接ban你很正常的。

t.gif解读

log_id=b2c411c9acf14e5094bcb0154f460b43
uin=
local_ip=192.168.101.98
page_sn=10002
internal_version=1573041766242
ssid=%22xiaojun%22
page_id=10002_1637757085176_1872686415
pid=16051
time=1637757085026
lite_mode=0
network_operator=
page_el_sn=402871
op=impr
install_token=d7900863-3701-47ec-ad98-bbc4cefd379a
page_name=index
manufacture=Huawei
ack_id=10002-lo_platform_login_benefit_wd-307-1%7Clm%3A0-id%3AdEG1637757085-
seq=1637757084189
network=1
platform=Android
app_version=4.80.0
module_id=lo_platform_login_benefit_wd
local_port=45697
global_id=307
user_id=
model=AOSP+on+angler
rctk=vxnLLiokfT97BWpRDY7Iqttol44En6nS3wTHvazejXs%3D0mXjt9nur3KYW2MYIwjFPIqkojGZZjuvL

t.gif目前根据个人猜想,貌似是一个行为记录接口,根据op作为接口类型区分。
由于它的格式是x-www-form-urlencoded,该接口分2部分数据都混在了一起,一个是它的固有数据,也就是设备信息,第二个则是它额外的数据,根据op类型来变。

具体封装定义在:com.aimi.android.common.stat.i 处
在这里插入图片描述
在这里插入图片描述
log_id 该字段是直接随机uuid,并且把字符-给替换成空的。
install_token 同样也是uuid随机

最后

以上就是懦弱盼望为你收集整理的简单解读拼多多t.gif、tne.gif接口的全部内容,希望文章能够帮你解决简单解读拼多多t.gif、tne.gif接口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部