吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25126|回复: 72
收起左侧

[Android 原创] 送给最好的TA app分析

  [复制链接]
XhyEax 发表于 2019-9-27 17:55
本帖最后由 XhyEax 于 2019-10-2 13:54 编辑

概述

今天群里有人传了个apk文件,名字叫送给最好的TA。这是一个整人app,安装并打开会播放一段音频,并循环调节媒体音量,维持最大值。从后台划掉/卸载/关机都可以停止该程序。
网传所谓的截图、获取设备信息并上传等行为均不存在。反编译后看到的截图相关代码实际上并没有被调用,只是打包apk时封装进去的类,关键逻辑位于main.lua中。

apk分析

拿到样本之后,别急着安装运行,先看看它的目录结构。

打开assets文件夹,看到有一个mp3文件以及两个加密后的lua脚本:

运行app后会自动播放这个音频文件,先对它进行替换。
这里使用AU对该mp3进行静音处理后,重打包并签名。
(其实也可以替换成自己想要播放的音频)

找到加载lua的关键函数

众所周知,lua脚本需要加载,而在加载之前肯定是要先解密的,所以只要找到解密函数,然后就可以把解密后的lua脚本dump出来。
使用IDA打开libluajava.so,经过分析找到函数luaL_loadbufferx
luaL_loadbufferx的第二个参数是加密的字节数组,第三个参数是大小,第四个参数是lua文件位置。
程序在这个函数中加载加密lua脚本,其中对脚本进行了解密操作。
根据第四个参数我们可以区分目前加载的lua脚本名称,从而选择性地dump
(即在函数开头下断点,查看第四个参数内容)
luaL_loadbufferx函数伪代码如下:

首先对输入的字节数组进行判断,如果以1B开头,且第二位不是0C,则进行解密操作,否则直接调用j_lua_load加载lua脚本
在第41行下断点即可获取到解密后的字节数组,从而dump

动态调试进行dump

具体步骤可以参考我之前写的文章
IDA在第41行断下之后,运行python脚本dump即可

import idaapi
data = idaapi.dbg_read_memory(0xf4daff00, 0x3000)
fp = open('d:\\dump.lua', 'wb')
fp.write(data)
fp.close()

此处的0xf4daff00, 0x3000需要替换成解密后字节的起始地址和长度
长度写大一点也没事,可以再用010Editor删除(所以我这写的0x3000

分析lua

由于dump出来的lua是字节码,并不是源码形式。所以还需要反编译后才能查看源码。(使用unluac_2015_06_13.jar进行反编译)

init.lua中进行包名、版本号、主题、权限等配置

local L0_0
appname = "送给最好的TA"
appver = "1.0"
appcode = "10"
appsdk = "15"
path_pattern = ""
packagename = "com.sgzh.dt"
theme = "Theme_DeviceDefault_Dialog_NoActionBar_MinWidth"
app_key = ""
app_channel = ""
developer = ""
description = ""
debugmode = false
L0_0 = {
  "INTERNET",
  "WRITE_EXTERNAL_STORAGE"
}
user_permission = L0_0

主要功能在main.lua中完成:

require("import")
import("android.app.*")
import("android.os.*")
import("android.widget.*")
import("android.view.*")
import("android.view.View")
import("android.content.Context")
import("android.media.MediaPlayer")
import("android.media.AudioManager")
import("com.androlua.Ticker")
activity.getSystemService(Context.AUDIO_SERVICE).setStreamVolume(AudioManager.STREAM_MUSIC, 15, AudioManager.FLAG_SHOW_UI)
activity.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE)
m = MediaPlayer()
m.reset()
m.setDataSource(activity.getLuaDir() .. "/0.mp3")
m.prepare()
m.start()
m.setLooping(true)
ti = Ticker()
ti.Period = 10
function ti.onTick()
  activity.getSystemService(Context.AUDIO_SERVICE).setStreamVolume(AudioManager.STREAM_MUSIC, 15, AudioManager.FLAG_SHOW_UI)
  activity.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE)
end
ti.start()
function onKeyDown(A0_0, A1_1)
  if string.find(tostring(A1_1), "KEYCODE_BACK") ~= nil then
    activity.getSystemService(Context.AUDIO_SERVICE).setStreamVolume(AudioManager.STREAM_MUSIC, 15, AudioManager.FLAG_SHOW_UI)
  end
  return true
end

首先设置音频源文件路径为0.mp3,使用单曲循环模式播放音频。然后使用Ticker循环调节媒体音量至最大值,同时拦截了返回键。
主要功能其实跟以前那个叫目力的app差不多。(不过今天这个apk的音频就太那啥了...)

静音样本下载

https://pan.baidu.com/s/1jTUcjknxr-fwETgtEVpQSg

dump出来的lua

https://pan.baidu.com/s/1X0un1jgVB6QAgPRqNu_3Wg

免费评分

参与人数 52威望 +2 吾爱币 +56 热心值 +44 收起 理由
qtds + 1 + 1 我很赞同!
ouyang6417 + 1 热心回复!
zqq_zqq + 1 + 1 我很赞同!
什么非主流名字 + 1 + 1 用心讨论,共获提升!
pumishuo + 1 + 1 这才是我当计算机人的理由!
SundaySnow + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Brownbear + 1 + 1 热心回复!
大叶公园 + 1 大佬牛逼!
Sound + 2 + 8 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
w731883875 + 1 + 1 大佬把音频改成,窝窝头一块钱四个,嘿嘿~
liphily + 3 + 1 我怀疑你有骗精华的嫌疑
zzzkc + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
晚空 + 1 + 1 哇,这个排版,太棒了
H.P + 1 + 1 用心讨论,共获提升!
17315044449 + 1 + 1 热心回复!
hugmail + 1 + 1 我很赞同!
新手小渣渣 + 1 + 1 用心讨论,共获提升!
crewloli + 1 + 1 谢谢@Thanks!
zx618 + 1 + 1 热心回复!
人群中的小黑 + 1 + 1 用心讨论,共获提升!
whc2001 + 1 给力
sky59998 + 1 + 1 热心回复!
skuld + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
笙若 + 1 + 1 谢谢@Thanks!
独行风云 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
wcosl123 + 1 + 1 大佬牛逼!!!!
mrsdz + 1 + 1 谢谢@Thanks!
strange233 + 1 谢谢@Thanks!
chocolate. + 1 我很赞同!
eihouwang001 + 1 + 1 用心讨论,共获提升!
风辰熙 + 1 + 1 谢谢@Thanks!
yaletao + 1 + 1 我很赞同!
40m41h42t + 1 热心回复!
dzj0821 + 1 + 1 谢谢@Thanks!
RZUI + 1 + 1 用心讨论,共获提升!
万丅冧 + 1 热心回复!
半生风雪 + 1 谢谢@Thanks!
skm123456 + 1 + 1 热心回复!
zslbinx + 1 + 1 我很赞同!
biong + 1 + 1 我很赞同!
世贤的疑问 + 1 谢谢@Thanks!
zxs1127 + 1 + 1 他好我也好
血大板 + 1 + 1 热心回复!
挑灯看花 + 1 用心讨论,共获提升!
5464465645 + 1 + 1 我很赞同!
初七的果子狸 + 1 + 1 谢谢@Thanks!
HaoChen + 1 + 1 谢谢@Thanks!
wencongwei1998 + 1 + 1 用心讨论,共获提升!
Colse + 1 + 1 用心讨论,共获提升!
王大木头 + 1 + 1 我很赞同!
Starry666 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
chenti + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

genghao 发表于 2019-11-1 13:13
支持一下大佬
涛之雨 发表于 2019-9-29 07:49
liphily 发表于 2019-9-29 07:27
那个截屏主要是为了冲突掉音量键,这样防止中招者关掉声音。

所以说是键盘侠蹭热度的嘛。。  。
他们分析出来的其实是dex里的类似于库的方法。。。
并没有调用
话说刚刚收到一个变种,iapp写的,类似的声音死循环调到最大,是一个尖叫(个人觉得比这个“叫*”声好点。。。)
 楼主| XhyEax 发表于 2019-9-28 09:11
kkk解 发表于 2019-9-27 23:22
怎么才能换成别的声音QAQ

使用mt管理器替换0.mp3,重新签名即可
zxy12400 发表于 2019-9-27 18:13
楼主你好,看到很多人传的这个app会窃取个人信息,而且会像病毒留在手机中,请问能具体分析下吗(比如什么截图

点评

网传所谓的截图、获取设备信息并上传等行为均不存在。反编译后看到的截图相关代码实际上并没有被调用,只是打包apk时封装进去的类,关键逻辑位于main.lua中。  发表于 2019-9-27 19:12
beibeihu 发表于 2019-9-27 18:13
感谢大神分析,学习到了
初七的果子狸 发表于 2019-9-27 18:15
非常感谢
ゞ颜 发表于 2019-9-27 18:16
非常感谢
子晗。 发表于 2019-9-27 18:18
看到有人说这个app会获取位置信息,但是我自己看了下并没有相关的请求
挑灯看花 发表于 2019-9-27 18:27
大神,这个软件不收集个人信息吧
低调丶骇小客 发表于 2019-9-27 18:38
感谢!各大高校已沦陷。
zg2600 发表于 2019-9-27 18:55
哈哈这个声音就那啥了
biong 发表于 2019-9-27 19:16
挑灯看花 发表于 2019-9-27 18:27
大神,这个软件不收集个人信息吧

没有手机,权限都没申请
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 13:22

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表