系统侠官网 - 最好的电脑系统下载网站!

当前位置:首页 > 安卓下载 > 游戏 > 角色扮演 > 详细页面
  • 应用介绍
  • 应用截图
  • 专题合集
  • 网友评论
一时间一款手机软件成功传播各大高校,成为学生之间的恶搞之物,这背后到底是怎么一回事呢,赶快一起看看吧!送给最好的TA是什么?这是一个整人APP,在往常一样的普通课堂上,一个不可描述的声音打破了原本的宁静,一场恶作剧正在个个高校上演。一款名为“送给最好的TA”的手机APP在安装后,会自动播一段不可描述的音频,无法调音量,并循环调节媒体音量维持最大值(从后台划掉/卸载/关机都可以停止该程序)。最终有同学为了保全名誉,只能当场掰断手机。因为事件发生在9月27日,因此这一些列事件被大家称之为“927事件”。有需要的朋友可以在多多软件站自行下载(各位用户如果有该软件的话,一定不要在课堂或者人多的地方使用,危险系数非常之大)。
注:网传所谓的截图、获取设备信息并上传等行为均不存在。反编译后(详见apk分析)看到的截图相关代码实际上并没有被调用,只是打包apk时封装进去的类,关键逻辑位于main.lua中。
送给最好的ta apk

相关资讯

原音频据说是桥本有菜的美脚女老师...
牛逼软件,凭借yin叫声攻破了北清复交浙大华科同济哈工大等诸多国内知名高校。
一举活跃了中国各大高校课堂气氛(尤其我们学校上思修近纲之类的水课),让下载好点开的勇士名垂青史。
注:头铁的各位,觉得床叫声满足不了的话,可以试试卢本伟sb的那个病毒软件,以及送给亲爱的她那个吓人软件。

apk分析

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

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

运行app后会自动播放这个音频文件,先对它进行替换。
这里使用AU对该mp3进行静音处理后,重打包并签名。
(其实也可以替换成自己想要播放的音频)
找到加载lua的关键函数
众所周知,lua脚本需要加载,而在加载之前肯定是要先解密的,所以只要找到解密函数,然后就可以把解密后的lua脚本dump出来。
使用IDA打开libluajava.so,经过分析找到函数luaL_loadbufferx
luaL_loadbufferx的第二个参数是加密的字节数组,第三个参数是大小,第四个参数是lua文件位置。
程序在这个函数中加载加密lua脚本,其中对脚本进行了解密操作。
根据第四个参数我们可以区分目前加载的lua脚本名称,从而选择性地dump
(即在函数开头下断点,查看第四个参数内容)
luaL_loadbufferx函数伪代码如下:

动态调试进行dump
IDA在第41行断下之后,运行python脚本dump即可

此处的0xf4daff00, 0x3000需要替换成解密后字节的起始地址和长度
长度写大一点也没事,可以再用010Editor删除(所以我这写的0x3000)
分析lua
由于dump出来的lua是字节码,并不是源码形式。所以还需要反编译后才能查看源码。(使用unluac_2015_06_13.jar进行反编译)
init.lua中进行包名、版本号、主题、权限等配置

主要功能在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
先把mp3读取到内存中,然后播放音频并循环调节媒体音量至最大值,同时拦截了返回键。主要功能其实跟以前那个叫目力的app差不多。(不过今天这个apk的音频就太那啥了...)
转自吾爱大神:XhyEax