CN105956425A - 一种基于smali代码混淆的Android应用保护方法 - Google Patents

一种基于smali代码混淆的Android应用保护方法 Download PDF

Info

Publication number
CN105956425A
CN105956425A CN201610279693.1A CN201610279693A CN105956425A CN 105956425 A CN105956425 A CN 105956425A CN 201610279693 A CN201610279693 A CN 201610279693A CN 105956425 A CN105956425 A CN 105956425A
Authority
CN
China
Prior art keywords
smali
instruction
file
dex
executable file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610279693.1A
Other languages
English (en)
Other versions
CN105956425B (zh
Inventor
房鼎益
刘方圆
汤战勇
陈晓江
赵贝贝
李政桥
龚晓庆
刑天璋
陈�峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Northwest University
Original Assignee
Northwest University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Northwest University filed Critical Northwest University
Priority to CN201610279693.1A priority Critical patent/CN105956425B/zh
Publication of CN105956425A publication Critical patent/CN105956425A/zh
Application granted granted Critical
Publication of CN105956425B publication Critical patent/CN105956425B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种基于smali代码混淆的Android应用保护方法,针对Android中间语言smali进行混淆保护,不需要修改Android源码,不仅可以抵抗静态分析,而且反汇编之后的代码不正确,从而增加动态分析的难度。

Description

一种基于smali代码混淆的Android应用保护方法
技术领域
本发明属于Android应用程序保护安全领域,涉及一种基于smali代码混淆的Android应用保护方法。
背景技术
NetMarketShare数据网站刚刚公布了2015年9月份智能手机操作系统的市场份额排名,Android继续保持领先,市场份额为82.8%。但是同时根据“天下无贼”信息诈骗联盟的报告指出:2015年下半年至今,仿冒支付类APP诈骗案件猖獗。该类APP伪装成支付软件,通过后台拦截验证码获取私密信息,“敲诈”、盗刷用户资金。开发商的知识产权和用户隐私都遭受严重的威胁,这一问题产生最主要的原因就是Android apk很容易通过逆向工程进行反编译,从而使其代码逻辑完全暴露给攻击者,使apk面临破解,软件逻辑修改,插入恶意代码,替换广告商ID等风险。
为了分析任何软件或者理解可执行文件,首先要做的就是逆向工作,针对逆向工程的保护比较有效的方法是代码混淆。代码混淆是一种用来隐藏程序意图的技术,可以增加代码阅读的难度,就是通过选择复杂、模糊但相等的语义去表示原程序,这样就隐藏了原程序的真实语义,软件的行为并没有被改变,使攻击者难以全面掌握app内部实现逻辑,从而增加逆向工程和破解的难度,防止知识产权被窃取。
目前对于Android应用混淆工作面临很大的挑战。已有的混淆方法主要有两个方面:一是信息的隐藏;它们隐藏meta信息,例如标识符和字符串或者对于控制流进行混淆。但是一个攻击者如果具有动态分析的能力,应用程序运行时所有的字节码还是在内存中的,很容易被dump下来,然后逆向还原,因此现有混淆方法不能抵抗动态分析。二是针对Java源码混淆,例如现存的混淆工具Apkprotect、Proguard等,还有现有文献中利用控制流平展和插入不透明谓词方法进行代码混淆,但一般Android应用程序开发商不太会给应用的源代码,只是给一个.apk文件,因此这种方法有很大的局限性,不适合所有的应用。
发明内容
针对上述现有技术中存在的问题或缺陷,本发明的目的在于,提供一种基于smali代码混淆的Android应用保护方法,能够抵抗静态和动态的分析。
一种基于smali代码混淆的Android应用保护方法,包括以下步骤:
步骤1,反编译待保护的应用UnProtect.apk,得到smali文件,针对smali文件中的指令进行混淆,得到混淆后的smali文件,对混淆后的smali文件重新编译形成可执行文件classes1.dex;
步骤2,在可执行文件classes1.dex中,提取被混淆的指令所在方法中的所有字节码,并将所有字节码存储在存储结构newcode中,将可执行文件classes1.dex中被混淆的指令所在方法中的所有字节码用0填充,形成一个新的可执行文件classes2.dex;
步骤3,利用动态加载技术加载可执行文件classes2.dex,从Android系统中的DexFile系统类中获取可执行文件classes2.dex的加载地址,根据加载地址,解析可执行文件classes2.dex获取被混淆的指令所在方法的内存地址,然后将存储在存储结构newcode中的字节码填充到内存地址的空间中;形成一个保护后的应用Protected.apk。
具体地,所述步骤1中的smali文件中的指令,指的是smali文件中,将两个数值型变量存储在两个相邻的寄存器中的两条指令,以及关键函数调用指令。
具体地,所述步骤1中,针对smali文件中的指令进行混淆的方法包括:
将两个数值型变量存储在两个相邻的寄存器中的指令进行混淆的方法为:将存储在两个相邻的寄存器中的两个32位的数值型变量存储成一个64位的数值型变量;
对关键函数调用指令进行混淆的方法为:在关键函数调用指令和其下一条指令之间插入不透明谓词。
与现有技术相比,本发明具有以下技术效果:本发明的方法针对Android中间语言smali进行混淆保护,不需要修改Android源码,不仅可以抵抗静态分析,而且反汇编之后的代码不正确,从而增加动态分析的难度。
下面结合附图和具体实施方式对本发明的方法做进一步详细地解释和说明。
附图说明
图1为本发明的方法流程图;
图2为Android虚拟机执行流程;
图3为经过混淆之后的可执行文件经过反汇编工具反汇编之后的代码和原来的Java源码的对比结果;
图4是存储结构newcode的示意图。
具体实施方式
遵从上述技术方案,参加图1,本发明的基于smali代码混淆的Android应用保护方法,包括以下步骤:
步骤1,反编译待保护的应用UnProtect.apk,得到smali文件,针对smali文件中的指令进行混淆,得到混淆后的smali文件,对混淆后的smali文件重新编译形成可执行文件classes1.dex。
所述smali文件中的指令指的是:smali文件中,将两个数值型变量存储在两个相邻的寄存器中的两条指令,以及关键函数调用指令;
对上述将两个数值型变量存储在两个相邻的寄存器中的两条指令进行混淆的方法为:将存储在两个相邻的寄存器中的两个32位的数值型变量存储成一个64位的数值型变量;例如:
将const-int v0,0x2和const-int v1,0x3
存储成const-wide v0,0x0000000300000002L
经过上述对数值型变量进行混淆后,当反汇编工具在反汇编时会将两个数值型变量反汇编成一个数值型变量,即出现错误的汇编结果。图3为经过混淆之后的可执行文件经过反汇编工具dextojar和jeb反汇编之后的代码和原来的Java源码的对比结果。
对上述关键函数调用指令进行混淆的方法为:关键函数调用指令用来调用子函数,当子函数调用完成后,下一条执行的指令是将子函数的返回值存储到寄存器中,在关键函数调用指令和其下一条指令之间插入不透明谓词。当反汇编引擎进行反汇编时就有可能不会取得正确的返回值。
步骤2,在可执行文件classes1.dex中,提取被混淆的指令所在方法中的所有字节码,并将所有字节码存储在存储结构newcode中,存储结构newcode如图4所示,将可执行文件classes1.dex中被混淆的指令所在方法中的所有字节码用0填充,将可执行文件new1.apk重新打包成新的可执行文件classes2.dex,以防止静态分析。
步骤3,利用动态加载技术加载可执行文件classes2.dex,从Android系统中的DexFile系统类中获取可执行文件classes2.dex的加载地址,根据加载地址,解析可执行文件classes2.dex获取被混淆的指令所在方法的内存地址,此内存地址即为存储字节码的地址,然后将存储在存储结构newcode中的字节码填充到内存地址的空间中;得到保护后的应用Protected.apk。
其中,利用动态加载技术加载可执行文件classes2.dex,需要先建立一个新的应用,当执行完步骤3后,此新的应用就形成一个保护后的应用Protected.apk。
本发明步骤2中得到的可执行文件文件classes2.dex无法通过图2中的dvmVerifyCodeFlow()函数对于指令合法性的验证,因此本发明采用步骤3的加载过程得到的应用Protected.apk就能够通过dvmVerifyCodeFlow()函数对于指令合法性的验证。
本发明根据Android系统对于可执行文件加载和运行时的特点,提出一种基于smali代码混淆的Android应用保护方法,可以有效的抵抗静态分析和动态分析。即使攻击者在程序执行时动态dump到可执行文件,但是他们对可执行文件进行反汇编之后的代码也是错误的,这样就会影响攻击者对于程序逻辑的理解。

Claims (3)

1.一种基于smali代码混淆的Android应用保护方法,其特征在于,包括以下步骤:
步骤1,反编译待保护的应用UnProtect.apk,得到smali文件,针对smali文件中的指令进行混淆,得到混淆后的smali文件,对混淆后的smali文件重新编译形成可执行文件classes1.dex;
步骤2,在可执行文件classes1.dex中,提取被混淆的指令所在方法中的所有字节码,并将所有字节码存储在存储结构newcode中,将可执行文件classes1.dex中被混淆的指令所在方法中的所有字节码用0填充,形成一个新的可执行文件classes2.dex;
步骤3,利用动态加载技术加载可执行文件classes2.dex,从Android系统中的DexFile系统类中获取可执行文件classes2.dex的加载地址,根据加载地址,解析可执行文件classes2.dex获取被混淆的指令所在方法的内存地址,然后将存储在存储结构newcode中的字节码填充到内存地址的空间中;形成一个保护后的应用Protected.apk。
2.如权利要求1所述的基于smali代码混淆的Android应用保护方法,其特征在于,所述步骤1中的smali文件中的指令,指的是smali文件中,将两个数值型变量存储在两个相邻的寄存器中的两条指令,以及关键函数调用指令。
3.如权利要求2所述的基于smali代码混淆的Android应用保护方法,其特征在于,所述步骤1中,针对smali文件中的指令进行混淆的方法包括:
将两个数值型变量存储在两个相邻的寄存器中的指令进行混淆的方法为:将存储在两个相邻的寄存器中的两个32位的数值型变量存储成一个64位的数值型变量;
对关键函数调用指令进行混淆的方法为:在关键函数调用指令和其下一条指令之间插入不透明谓词。
CN201610279693.1A 2016-04-28 2016-04-28 一种基于smali代码混淆的Android应用保护方法 Expired - Fee Related CN105956425B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610279693.1A CN105956425B (zh) 2016-04-28 2016-04-28 一种基于smali代码混淆的Android应用保护方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610279693.1A CN105956425B (zh) 2016-04-28 2016-04-28 一种基于smali代码混淆的Android应用保护方法

Publications (2)

Publication Number Publication Date
CN105956425A true CN105956425A (zh) 2016-09-21
CN105956425B CN105956425B (zh) 2018-07-24

Family

ID=56916476

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610279693.1A Expired - Fee Related CN105956425B (zh) 2016-04-28 2016-04-28 一种基于smali代码混淆的Android应用保护方法

Country Status (1)

Country Link
CN (1) CN105956425B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107871065A (zh) * 2016-09-27 2018-04-03 武汉安天信息技术有限责任公司 一种Dalvik模式下dex文件的保护方法及装置
CN109687974A (zh) * 2018-12-26 2019-04-26 努比亚技术有限公司 Apk验证方法、装置、移动终端及可读存储介质
CN110457872A (zh) * 2019-07-19 2019-11-15 西安理工大学 一种Android App应用资源的隐藏加固方法
CN112528241A (zh) * 2020-11-27 2021-03-19 北京深思数盾科技股份有限公司 一种代码混淆方法、代码混淆器以及计算机可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103544414A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种Android系统应用的深度代码混淆方法
US20140082729A1 (en) * 2012-09-19 2014-03-20 Estsecurity Co., Ltd. System and method for analyzing repackaged application through risk calculation
CN104866734A (zh) * 2014-02-25 2015-08-26 北京娜迦信息科技发展有限公司 一种dex文件的保护方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140082729A1 (en) * 2012-09-19 2014-03-20 Estsecurity Co., Ltd. System and method for analyzing repackaged application through risk calculation
CN103544414A (zh) * 2013-10-25 2014-01-29 苏州通付盾信息技术有限公司 一种Android系统应用的深度代码混淆方法
CN104866734A (zh) * 2014-02-25 2015-08-26 北京娜迦信息科技发展有限公司 一种dex文件的保护方法及装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107871065A (zh) * 2016-09-27 2018-04-03 武汉安天信息技术有限责任公司 一种Dalvik模式下dex文件的保护方法及装置
CN107871065B (zh) * 2016-09-27 2019-12-20 武汉安天信息技术有限责任公司 一种Dalvik模式下dex文件的保护方法及装置
CN109687974A (zh) * 2018-12-26 2019-04-26 努比亚技术有限公司 Apk验证方法、装置、移动终端及可读存储介质
CN109687974B (zh) * 2018-12-26 2023-10-17 努比亚技术有限公司 Apk验证方法、装置、移动终端及可读存储介质
CN110457872A (zh) * 2019-07-19 2019-11-15 西安理工大学 一种Android App应用资源的隐藏加固方法
CN110457872B (zh) * 2019-07-19 2021-08-06 西安理工大学 一种Android App应用资源的隐藏加固方法
CN112528241A (zh) * 2020-11-27 2021-03-19 北京深思数盾科技股份有限公司 一种代码混淆方法、代码混淆器以及计算机可读存储介质

Also Published As

Publication number Publication date
CN105956425B (zh) 2018-07-24

Similar Documents

Publication Publication Date Title
CN101201883B (zh) 基于虚拟机的软件保护方法
CN103413073B (zh) 一种保护java可执行程序的方法及设备
CN105653905B (zh) 一种基于api安全属性隐藏与攻击威胁监控的软件保护方法
CN106462699A (zh) 软件保护
CN105956425A (zh) 一种基于smali代码混淆的Android应用保护方法
CN102667712A (zh) 用于同时定义和实行访问控制和完整性策略的系统、方法和装置
Yang et al. Deepmal: maliciousness-preserving adversarial instruction learning against static malware detection
CN108491235A (zh) 结合动态加载和函数Native化的DEX保护方法
Mergendahl et al. Cross-Language Attacks.
CN104881610B (zh) 一种针对虚函数表劫持攻击的防御方法
CN109313677A (zh) 用于动态可执行验证的方法和装置
CN106803040A (zh) 病毒特征码处理方法及装置
Bhansali et al. A first look at code obfuscation for webassembly
Muntean et al. Analyzing control flow integrity with LLVM-CFI
Lim et al. An anti-reverse engineering technique using native code and obfuscator-LLVM for android applications
CN108763924B (zh) 一种安卓应用程序中不可信第三方库访问权限控制方法
Ismail et al. Tightly Seal Your Sensitive Pointers with {PACTight}
Farhadi et al. Chronicle of a Java Card death
Braghin et al. Modeling and verification of smart contracts with Abstract State Machines
Lanet et al. Memory forensics of a java card dump
Hogenboom et al. Full memory attack on a Java Card
Mesbah et al. Reverse engineering a Java Card memory management algorithm
Karger et al. Lessons learned: Building the caernarvon high-assurance operating system
Kochberger et al. Evaluation Methodologies in Software Protection Research
Bouffard et al. Accessing secure information using export file fraudulence

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20180724

Termination date: 20200428