Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >“送给最好的TA.apk”简单逆向分析

“送给最好的TA.apk”简单逆向分析

作者头像
ChaMd5安全团队
发布于 2019-10-03 05:38:51
发布于 2019-10-03 05:38:51
2.2K00
代码可运行
举报
文章被收录于专栏:ChaMd5安全团队ChaMd5安全团队
运行总次数:0
代码可运行

20190927收到一个apk,名字叫“送给最好的TA.apk”。文件哈希值如下:

逆向分析

用AndroidKiller对apk进行逆向分析。

发现一个0.mp3和2个lua文件。其中0.mp3就是罪魁祸首了。而lua文件打开是乱码也不是字节码。

通过分析java代码,发现调用了lib\armeabi-v7a\libluajava.so对lua进行解密,于是用IDA Pro 7.0 x86对so文件进行逆向。

在luaL.loadbufferx函数里,有解密过程,整个代码不复杂,编写解密脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf8 -*-
__author__='pcat@chamd5.org'
__blog__='http://pcat.cc'

from ctypes import *
import sys

def decrypt(filename):
    s=open(filename,'rb').read()
    outfile='out.lua'
    if s[0]==chr(0x1b) and 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字节码,可使用unluac进行反编译。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java -jar unluac.jar out.lua >raw.lua

解密后的init.lua:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
local L0_0
appname = "\233\128\129\231\187\153\230\156\128\229\165\189\231\154\132TA"
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:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

其中,定时器不断地设置音量为15(最大值)。

安全意识的感悟

科技发展日新月异,加强关注网络安全,提高网络安全意识刻不容缓。在网络安全意识上一定要多加注意,多了解一些网络安全常识和网络安全技术问题,可以使我们能保证自己的安全。

另外,程序员制作程序的初衷应当是为了让世界更方便快捷美好之类的,而做这些乱七八糟坑人的东西,根本没有任何意义。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ChaMd5安全团队 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
O泡果奶-APK反编译-Lua脚本
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/02
1.1K0
一份礼物.apk - o泡果奶-的逆向分析
emmm这似曾相识的页面,这熟悉的音量,唯一变化的就是音乐变成了O泡果奶的魔性洗脑广告。
重生信息安全
2020/10/15
1.4K0
Android:O泡果奶——来场恶作剧
我将背景音乐换成了周星驰经典的狂笑,图片也换得鬼畜了一些,下面放一下核心代码: activity_main.xml:
zstar
2022/06/14
6090
Android:O泡果奶——来场恶作剧
Android声音和亮度设置
另外,还有个public void adjustStreamVolume(int streamType, int direction, int flags)方法也可用来调整音量,
码客说
2019/10/22
2.1K0
Android开发笔记(五十八)铃声与震动
SeekBar继承自进度条ProcessBar,有关ProcessBar的介绍见《Android开发笔记(四十九)异步任务处理AsyncTask》。SeekBar与ProcessBar的不同之处在于,SeekBar是可以拖动的,因此SeekBar可用于媒体播放的进度条,在拖动进度条后,播放器可快进或者快退到指定位置开始播放媒体;SeekBar也可用于调节铃声的音量大小、调节屏幕的亮度、调节字体的大小等等。 下面是SeekBar新增加的几个方法与事件: setThumb : 设置当前进度位置的图标 setThumbOffset : 设置当前进度图标的偏移量 setKeyProgressIncrement : 设置使用方向键更改进度时每次的增加值 拖动条的拖动事件 监听器类名 : OnSeekBarChangeListener 设置监听器的方法 : setOnSeekBarChangeListener 监听器需要重写的方法 :  onProgressChanged : 拖动过程中触发 onStartTrackingTouch : 开始拖动时触发 onStopTrackingTouch : 停止拖动时触发,一般在该方法中加入业务逻辑
aqi00
2019/01/18
1.7K0
【Android】自制静音App,解决他人手机外放问题
看到一个粉丝留言,吐槽舍友深夜手机外放,打扰别人休息,想设计一款软件阻止舍友行径。于是我就来简单设计一下。
zstar
2022/11/02
1.5K0
【Android】自制静音App,解决他人手机外放问题
Android的Dialog弹出时隐藏导航栏效果,目前认为的最优解
原本Android的ProgressDialog用法很简单,两三行代码就搞定了。但是,但是,但是,用在无人值守的自助终端上,总是把之前隐藏掉的导航栏和状态栏显示出来。这是不可接受的。总不能让设备给用户随意摆弄吧,进入系统把你应用给搞没了都有可能。
杨永贞
2020/08/04
4.9K0
Android系统服务
本篇博文主要介绍的是Android中的Java服务。 这部分服务大部分都有一个Manager类,其实就是一个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到system_server进程中对应的xxxManagerService中对应的方法,并将结果再通过binder带回。
小小工匠
2021/08/16
1.9K0
使用VideoView做个实用的视频播放器
最终效果图 最终效果图 前言 这里用VideoView写一个播放器, 可以横竖屏, 可以选文件, 可以暂停, 可以快进后退, 可以进度条拖动, 可以触屏调节音量. 来看看怎么实现的吧! 布局文件
sean_yang
2018/09/04
1.4K0
使用VideoView做个实用的视频播放器
Android开发笔记(一百二十五)自定义视频播放器
在Android中播放视频的方式有两种: 1、使用MediaPlayer结合SurfaceView进行播放。其中通过SurfaceView显示视频的画面,通过MediaPlayer来设置播放参数、并控制视频的播放操作;该方式的具体说明参见《Android开发笔记(五十七)录像录音与播放》。 该方式的好处是灵活性强,可随意定制。缺点是编码复杂,连开始/暂停的按钮都要自己实现。 2、使用VideoView结合MediaController进行播放。VideoView其实是从SurfaceView扩展而来,并在内部集成了MediaPlayer,从而实现视频画面与视频操作的统一管理;而MediaController则是一个简单的播放控制条,它实现了基本的控制按钮,如开始/暂停按钮、上一个/下一个按钮、快进/快退按钮,以及进度条等控件;把VideoView与MediaController关联起来,便是一个类似于Window Media Player的精简版播放器。 该方式的好处是简单易用,编码容易。缺点是可定制差,难以扩展,想给按钮换个样式都不行。 但是不积跬步无以至千里,如果我们要定制一个好用好看的播放器,还是得先把笨拙的VideoView与MediaController搞清楚才行。就像穷国一开始没有汽车工业,那只能从研究拖拉机开始,没办法一蹴而就强行大跃进呀。
aqi00
2019/01/18
2.9K0
android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)
那么。就下来我将首先给大家分析分析怎样通过手势识别来调节音量、亮度、快键和后退需求!
全栈程序员站长
2022/07/11
2.6K0
android开发之GestureDetector手势识别(调节音量、亮度、快进和后退)
Android闹钟开发与展示Demo
  1、首先需要判断要查询的表是否存在,不存在则需要创建,判断表是否存在的方法如下:
JQ实验室
2022/02/09
1.5K0
实习杂记(22):仿照VideoView+MediaPlayerController做视频
主要是抽取出来,有些方法是hide,有些类是  internal层的,无法使用,所以需要自己去想办法弄,
wust小吴
2019/07/08
9180
【CTF】关于简单程序的简单逆向分析
本博文以两道题目为例,初步体验通过对程序的逆向分析来增强自身对代码的理解和运用,提高编译和汇编能力。
sidiot
2023/08/31
4700
【CTF】关于简单程序的简单逆向分析
Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
项目请在真机(自己的手机)上测试运行,因为我不喜欢用虚拟机。 为了不浪费您的时间,先看一下运行的效果图, 一进去先进行音乐扫描,然后列表展示出来,点击即可播放。
晨曦_LLW
2020/09/25
3.1K0
教你使用超简单的视频播放器JiaoZiVideoPlayer
在之前的项目中用到了视频播放的功能,在网上看了看使用了大家用的比较多的一个开源项目JiaoZiVideo让我迅速的实现了视频播放的相关功能。
程思扬
2022/01/11
5.3K0
教你使用超简单的视频播放器JiaoZiVideoPlayer
CTF逆向--安卓篇
题目(来源:Jarvis-OJ): Androideasy DD Android Easy DD - Android Normal FindPass Smali 爬楼梯 Androideasy 使用APKToolBOX中的jadx打开该apk文件找到MainActivity查看主函数,如下所示 package com.a.sample.androidtest; import android.content.Context; import android.os.Bundle; import android.s
安恒网络空间安全讲武堂
2018/02/23
2.7K0
CTF逆向--安卓篇
Android 照相机 camera 操作封装
项目中经常用到Android自带的camera拍照功能。于是做了个封装,CameraUtil.java类。
杨永贞
2020/12/01
1.2K0
Android 照相机 camera 操作封装
Android开发常用的知识点
因为横屏有两个方向的横法,而这个设置横屏的语句,如果不是默认的横屏方向,会把已经横屏的屏幕旋转180°。
码客说
2019/10/22
2.7K0
Android开发常用的知识点
【愚公系列】2021年12月 攻防世界-简单题-MOBILE-005(easy-apk)
文章目录 一、easy-apk 二、答题步骤 1.jadx反编译apk文件 2.base64 总结 一、easy-apk 题目链接:https://adworld.xctf.org.cn/task/t
愚公搬代码
2021/12/14
2160
【愚公系列】2021年12月 攻防世界-简单题-MOBILE-005(easy-apk)
推荐阅读
相关推荐
O泡果奶-APK反编译-Lua脚本
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验