apk改之理_一份礼物.apk-O泡果奶的逆向分析

事情起因是震惊全国大学生的1013事件!!!

6da9424798433b092be31592675e3ac3.png

刚好看到社团群里在讨论这个,于是就发挥专业特长分析一下

3dc689a74acc52dfa935401cea4657ee.png

拿到apk ,第一步肯定先放到虚拟机里跑一下看下效果

emmm这似曾相识的页面,这熟悉的音量,唯一变化的就是音乐变成了O泡果奶的魔性洗脑广告。

懂了,这不就是 "送给最好的ta.apk" 吗?

109b3be61218197d4cc6e1f681e5b040.png

使用Android killer或apk改之理分析一下,这里使用Android Killer:

25373242eb92f089bbf5b729fee6faea.png
8031e3e5c5ff66234f802eb4baa26723.png

通过对比送给最好的ta.apk发现:

多了一个layout.lua文件,不过从名字上看这就是个布局文件,影响不大,再就是mp3文件名字从原来的0.mp3改为了mc.mp3,其他的都没变,甚至软件图标都没变。这个mc.mp3就是播放的广告音频了。

c5499066f046b5705cfa244eceda6ba3.png

剩下的就简单了,虽然lua文件是加密过的,通过分析java代码,发现加密方式也没变,依旧使用/lib/armeabli-v7a/libluajava.so加密,因此使用ida7.0(x32)对这个文件逆向分析:

80b020597f4f2a599e72efc908b8aab8.png

查找到在luaL.loadbufferx里面有对文件解密的过程

这里直接拿pcat大佬写的解密脚本:

from ctypes import *import sysdef 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:        passdef foo():    print len(sys.argv)    if len(sys.argv) == 2:        filename = sys.argv[1]    else:        filename = 'main.lua'    decrypt(filename)if __name__ == '__main__':    foo()将得到的文件使用unluac.jar进行还原,最终得到三个lua文件分别为:init.lua:local L0, L1appname = "2301431462281871829.0"appver = "9.0"packagename = "com.ta.cnm"appcode = "9"appsdk = "15"theme = "Theme_DeviceDefault_Light_NoActionBar"L0 = {}L1 = "WRITE_EXTERNAL_STORAGE"L0[1] = L1user_permission = L0

main.lua:

local L0, L1, L2, L3L0 = requireL1 = "import"L0(L1)L0 = importL1 = "android.app.*"L0(L1)L0 = importL1 = "android.os.*"L0(L1)L0 = importL1 = "android.widget.*"L0(L1)L0 = importL1 = "android.view.*"L0(L1)L0 = importL1 = "android.view.View"L0(L1)L0 = importL1 = "android.content.Context"L0(L1)L0 = importL1 = "android.media.MediaPlayer"L0(L1)L0 = importL1 = "android.media.AudioManager"L0(L1)L0 = importL1 = "com.androlua.Ticker"L0(L1)L0 = activityL0 = L0.getSystemServiceL1 = ContextL1 = L1.AUDIO_SERVICEL0 = L0(L1)L0 = L0.setStreamVolumeL1 = AudioManagerL1 = L1.STREAM_MUSICL2 = 15L3 = AudioManagerL3 = L3.FLAG_SHOW_UIL0(L1, L2, L3)L0 = activityL0 = L0.getDecorViewL0 = L0()L0 = L0.setSystemUiVisibilityL1 = ViewL1 = L1.SYSTEM_UI_FLAG_HIDE_NAVIGATIONL2 = ViewL2 = L2.SYSTEM_UI_FLAG_IMMERSIVEL1 = L1 | L2L0(L1)L0 = MediaPlayerL0 = L0()m = L0L0 = mL0 = L0.resetL0()L0 = mL0 = L0.setDataSourceL1 = activityL1 = L1.getLuaDirL1 = L1()L2 = "/mc.mp3"L1 = L1 .. L2L0(L1)L0 = mL0 = L0.prepareL0()L0 = mL0 = L0.startL0()L0 = mL0 = L0.setLoopingL1 = trueL0(L1)L0 = TickerL0 = L0()ti = L0L0 = tiL0.Period = 10L0 = tifunction L1()  local L0, L1, L2, L3  L0 = activity  L0 = L0.getSystemService  L1 = Context  L1 = L1.AUDIO_SERVICE  L0 = L0(L1)  L0 = L0.setStreamVolume  L1 = AudioManager  L1 = L1.STREAM_MUSIC  L2 = 15  L3 = AudioManager  L3 = L3.FLAG_SHOW_UI  L0(L1, L2, L3)  L0 = activity  L0 = L0.getDecorView  L0 = L0()  L0 = L0.setSystemUiVisibility  L1 = View  L1 = L1.SYSTEM_UI_FLAG_HIDE_NAVIGATION  L2 = View  L2 = L2.SYSTEM_UI_FLAG_IMMERSIVE  L1 = L1 | L2  L0(L1)endL0.onTick = L1L0 = tiL0 = L0.startL0()function L0(A0, A1)  local L2, L3, L4, L5  L2 = string  L2 = L2.find  L3 = tostring  L4 = A1  L3 = L3(L4)  L4 = "KEYCODE_BACK"  L2 = L2(L3, L4)  if L2 ~= nil then    L2 = activity    L2 = L2.getSystemService    L3 = Context    L3 = L3.AUDIO_SERVICE    L2 = L2(L3)    L2 = L2.setStreamVolume    L3 = AudioManager    L3 = L3.STREAM_MUSIC    L4 = 15    L5 = AudioManager    L5 = L5.FLAG_SHOW_UI    L2(L3, L4, L5)  end  L2 = true  return L2endonKeyDown = L0

layout.lua:

local L0, L1, L2, L3L0 = {}L1 = LinearLayoutL0.layout_width = "fill"L0.layout_height = "fill"L2 = {}L3 = ButtonL2.textColor = "#D50000"L2.text = "230131138228184141230131138229150156 230132143228184141230132143229164150"L2.layout_height = "match_parent"L2.layout_width = "match_parent"L2.background = "#88888888"L2[1] = L3L0[1] = L1L0[2] = L2return L0

分析这三个文件:

init.lua: 定义了app的名字,版本(已经是9.0了吗),包名(有点暴躁啊这位老哥),sdk版本,使用的主题,需要的权限等数据

main.lua: 具体逻辑都在这里面,大概就是读取mc.mp3 播放 并一直把音量调整到15(最大),监听禁用返回按钮。

layout.lua: 设置页面布局

11c3483ee3aeaab19f60557a846bce19.png

恶搞一时爽,但是也要有度。

万一下一次是个带病毒的文件呢?

对了 解决方案-----------关掉进程或关机

810496d86b4b99f02de2ee96f58ad030.png

文章来源:齐鲁师院网络安全社团

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python彩色螺旋线_解决python彩色螺旋线绘制引发的问题

彩色螺旋线的绘制代码如下&#xff1a; import turtle import time turtle.pensize(2) turtle.bgcolor(black) colors [red, yellow, purple, blue] turtle.tracer(False) for x in range(400): turtle.forward(2*x) turtle.color(colors[x % 4]) turtle.left(91) turtle.trac…

ID3和C4.5分类决策树算法 - 数据挖掘算法(7)

&#xff08;2017-05-18 银河统计&#xff09;决策树(Decision Tree&#xff09;是在已知各种情况发生概率的基础上&#xff0c;通过构成决策树来判断其可行性的决策分析方法&#xff0c;是直观运用概率分析的一种图解法。由于这种决策分支画成图形很像一棵树的枝干&#xff0c…

mysql 聚簇索引和非聚簇索引_图文并茂,说说MySQL索引

点击上方 小伟后端笔记 &#xff0c;选择 星标 公众号重磅资讯、干货&#xff0c;第一时间送达作者&#xff1a;小小木的博客来源&#xff1a;cnblogs.com/wyc1994666/p/10831039.html序开门见山&#xff0c;直接上图&#xff0c;下面的思维导图即是现在要讲的内容&#xff0c;…

mysql数据库日志截断,MySQL基础(十一):查询截取分析

下面是小凰凰的简介&#xff0c;看下吧&#xff01;&#x1f497;人生态度&#xff1a;珍惜时间&#xff0c;渴望学习&#xff0c;热爱音乐&#xff0c;把握命运&#xff0c;享受生活&#x1f497;学习技能&#xff1a;网络 -> 云计算运维 -> python全栈( 当前正在学习中…

component是什么接口_阿里高级技术专家:整洁的应用架构“长”什么样?

很多同学不止一次和我反馈&#xff0c;我们的系统很混乱&#xff0c;主要表现在&#xff1a;应用的层次结构混乱&#xff1a;不知道应用应该如何分层、应该包含哪些组件、组件之间的关系是什么&#xff1b;缺少规范的指导和约束&#xff1a;新加一段业务逻辑不知道放在什么地方…

20155202 实验四 Android开发基础

20155202 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android、组件、布局管理器的使用&#xff1b; 3&#xff0e;掌握Android中事件处理机制。 实验要求 第24章&#xff1a;初识Android任务一&#xff1a;完成Hello World…

python的代码在哪写_python代码在哪里编写

编写python代码&#xff0c;可以在自带的ide中写&#xff0c;也可以使用第三方编辑器&#xff0c;下面介绍几款常见的python IDE 1. VimVim 可以说是 Python 最好的 IDE。Vim 是高级文本编辑器&#xff0c;旨在提供实际的 Unix 编辑器‘Vi’功能&#xff0c;支持更多更完善的特…

如果您在2015年编写过Java代码-这是您不容错过的趋势

去年我们有机会遇到的最有趣趋势的实用概述 在这篇文章中&#xff0c;我们将回顾构成我们2015年对话的5个主题和新发展。与其他许多年终总结保持较高水平的不同&#xff0c;我们将做一个更实际的操作不用流行语 。 好吧&#xff0c;没有太多*流行语。 与往常一样&#xff0c;对…

mel滤波器组频率响应曲线_了解二阶滤波器的奈奎斯特图

在之前的文章中&#xff0c;我介绍了奈奎斯特图&#xff0c;然后我们通过检查奈奎斯特曲线和截止频率与一阶无源滤波器之间的关系&#xff0c;更详细地探索了这些类型的图。在本文中&#xff0c;我们将查看二阶滤波器的奈奎斯特图。二阶过滤器当我说“二阶”滤波器时&#xff0…

python爬取知乎标题_python爬虫 爬取知乎文章标题及评论

目的&#xff1a;学习笔记2.首先我们试着爬取下来一篇文章的评论&#xff0c;通过搜索发现在 response里面我们并没有匹配到评论&#xff0c;说明评论是动态加载的。3.此时我们清空请求&#xff0c;收起评论&#xff0c;再次打开评论 4.完成上面操作后&#xff0c;我们选择XHR&…

知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道

前两天家里电脑显示器的线坏了&#xff0c;火急火燎的买了根线&#xff0c;谁知道买回来之后接口不匹配&#xff0c;不能用。显示器为什么要有这么多接口呢&#xff1f;这些接口又有什么区别呢&#xff1f;必须把它搞清楚&#xff01;这不&#xff0c;经过我的不屑努力&#xf…

docker rabbitmq php扩展,Docker开启RabbitMQ延时消息队列

前言经常在开发中会遇到一些不需要同步执行的业务&#xff0c;那我们就需要用到消息队列来进行异步执行&#xff0c;但是对于某些业务就还需要用到延时的功能&#xff0c;比如订单支付超时关闭&#xff0c;那么这个时候我们就需要开启消息队列的延时功能&#xff0c;当然也有朋…

[转]Eclipse插件开发之基础篇(3) 插件的测试与调试

原文地址&#xff1a;http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JUnit对插件进行测试 Eclipse中已经嵌入了JUnit&#xff0c;我们可以使用JUnit为插件进行单体测试。一般的JUnit是不可以对插件部分(对Eclipse的API依赖的部分)进行测…

大整数乘法c语言代码_大整数乘法

大整数乘法和我们小学学过的乘法公式一样&#xff08;如下图&#xff09;&#xff0c;就是按位相乘&#xff0c;两个数中的每一位彼此相乘&#xff0c;然后将相同列的结果加起来&#xff0c;最后统一处理进位即可。#include <iostream> #include <cstring> using n…

primefaces_懒惰的JSF Primefaces数据表分页–第2部分

primefaces页面代码非常简单&#xff0c;没有复杂性。 检查“ index.xhtml”代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"…

龙芯2h芯片不能进入pmon_“龙芯”18年:这个团队,终结了中国计算机产业的“无芯”历史...

近期在第二届数字中国建设峰会上展出的国产芯片龙芯3号。芯片是信息产业的灵魂&#xff0c;通用CPU(中央处理器)可以说是芯片中的“珠峰”。自主研发CPU&#xff0c;难度很大。在这个故事的起点&#xff0c;2001年8月的一个清晨&#xff0c;当龙芯第一代产品龙芯1号成功启动操作…

帝国cms录入表单模板php,帝国cms7.5在线表单提交制作教程

最近春哥仿站团队接到很多仿站客户订单&#xff0c;这里面有一个这样的功能&#xff0c;表单提交。今天花时间写个教程给大家。另外我们春哥仿站团队推出低价仿站业务&#xff0c;市面上99%的企业站点都能制作出来&#xff0c;有需要的联系我们。今天春哥团队华哥给大家讲解一下…

golang linux安装

go在linux下的安装&#xff1a; [rootlocalhost src]# wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz 速度还挺快的 [rootlocalhost src]# tar -C /usr/local -xzf go1.8.1.linux-amd64.tar.gz 设置环境变量 [rootlocalhost src]# export PATH$PATH:…

java jsonobject 转对象_解析JSON中JSONObject的高级使用

文末会有读者福利简介:在程序开发过程中&#xff0c;在参数传递&#xff0c;函数返回值等方面&#xff0c;越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式&#xff0c;同时也易于机器解析和生成、易于理解、阅读和撰写&#xff0c;而且Json采…

xfs支持oracle,让linux内核支持xfs文件系统

作/译者&#xff1a;叶金荣(Email:)&#xff0c;来源&#xff1a;http://imysql.cn&#xff0c;转载请注明作/译者和出处&#xff0c;并且不能用于商业用途&#xff0c;违者必究。 XFS 简介XFS 最初是由 Silicon Graphics&#xff0c;Inc. 于 90 年代初开发的。那时&#xff0c…