发布于 

Android逆向目录

逆向工程

来自维基百科的定义:https://zh.wikipedia.org/zh-hans/逆向工程

逆向工程(又称反向工程),是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在不能轻易获得必要的生产信息下,直接从成品的分析,推导出产品的设计原理。逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来寻找证据。

对最终程序的二进制代码所进行的逆向工程被称为“代码反向工程”,或简称RCE(Reverse Code Engineering)。

逆向技术常见的应用场景

app安全审查

系统漏洞挖掘

恶意代码杀查

同行业竞品技术原理分析

移除安全机制

知识点

Java基础(JCA、JSSE)

文件格式(DEX、OAT、ELF、Smali、resources.arsc)

Smali阅读、arm反汇编阅读

Apktool、smali/baksmali、enjarify、android-classyshark、jadx、JD-GUI、BytecodeViewer、Android Killer的使用

JEB、jdb、Android Studio/Intellij IDEA、gdb、IDA Pro的使用

需要掌握的技能表

操作系统的安全架构

操作系统中可执行文件格式

反汇编工具的使用

反汇编代码的阅读理解

调试器的使用

网络抓包工具的使用

加解密知识

逆向工具使用

1.反编译工具
Apktool/Shakaapktoolsmali/baksmalidex2jarenjarify

2.静态分析工具
android-classysharkjadxJD-GUIBytecodeViewerAndroid Killer的使用

3.动态调试工具
JEBjdbAndroid Studio/Intellij IDEAgdbIDA Pro的使用

4.Hook框架
Cydia SubstrateXposedadbiFrida等。

5.沙盒环境
DroidBox

反编译工具

Apktool https://bitbucket.org/iBotPeaches/apktool/
Shakaapktool http://www.rover12421.com/shakaapktool/

为什么选择Shakaapktool?

Shaka(沙加,黄金圣斗士之一)
处女座沙加(SHAKA):被誉为最接近神的圣斗士,平时闭著双眼,但当他张开眼睛时,其力量会大为增加,并使出天舞宝轮,夺去敌人的五感。

Shakaapktool http://www.rover12421.com/shakaapktool/

增强功能:

image20

对抗反反编译:

image21

修正官方Bug:

image22

smali/baksmali https://bitbucket.org/JesusFreke/smali

安卓反汇编的基石
Smali反汇编
Smali->Dex/Dex->Smali/Odex->Dex
Smali动态调试->smalidea

smali/baksmali https://bitbucket.org/JesusFreke/smali

Dex字节码https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html
Dex文件格式:https://source.android.com/devices/tech/dalvik/dex-format.html
Smali寄存器与参数传递:https://github.com/JesusFreke/smali/wiki/Registers
Smali动态调试:https://github.com/JesusFreke/smali/wiki/smalidea

反编译工具

Dex2jar https://github.com/pxb1988/dex2jar
Enjarify https://github.com/google/enjarify
image23

image24
VS
image25

AndroidCrackTool http://www.pd521.com/thread-1194-1-1.html
Android逆向助手 http://weibo.com/kgdiwss
image27
image26

JD-GUI http://jd.benow.ca/
image28

静态分析工具

android-classyshark https://github.com/google/android-classyshark
image30

jadx https://github.com/skylot/jadx
image31

BytecodeViewer https://github.com/Konloch/bytecode-viewer
image32

Android Killer
image33

Dalvik Debugger
jdb

adb shell am start -D -n com.droider.crackme0201/.MainActivity
monitor
jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=127.0.0.1
methods com.tencent.crackme0201.MainActivity
stop in com.droider.crackme0201.MainActivity.checkSN(java.lang.String, java.lang.String)
where
step
step
step
locals
dump this

动态调试工具

Dalvik Debugger
Android Studio/Intellij IDEA + smalidea
https://github.com/JesusFreke/smali/wiki/smalidea

Native Debugger

gdb
gdb: ~/Library/Android/android-ndk-r12b/prebuilt/darwin-x86_64/bin/gdb
gdbserver: ~/Library/Android/android-ndk-r12b/prebuilt/android-arm/gdbserver

image35
Native Debugger
gdb

gdbserver :3333 --attach pid
or
gdbserver :3333 /data/local/tmp/xxx
/* android_gdb
#!/bin/sh
~/Library/Android/android-ndk-r12b/prebuilt/darwin-x86_64/bin/gdb "$@”
*/
adb forward tcp:3333 tcp:3333
android_gdb /xxx
(gdb) target remote :3333
(gdb) set disassemble-next on
(gdb) break *xxx
(gdb) layout asm
(gdb) layout regs
(gdb) c

Native Debugger
gdb + Affinic Debugger
image36

Native Debugger
lldb + ds2 https://github.com/facebook/ds2
image37

Dalvik Debugger + Native Debugger
JEB2 https://www.pnfsoftware.com
image39

Dalvik Debugger + Native Debugger
IDA Pro
image40

Hook 框架

JEB2 https://www.pnfsoftware.com
image41
image42
Cydia Substrate http://www.cydiasubstrate.com
DumpDex: https://github.com/WooyunDota/DumpDex
image44

最为强大的安卓Java层Hook框架

1.Apk方法Hook

2.系统方法Hook

3.系统资源修改

4.系统增强补丁

Xposed https://github.com/rovo89/Xposed
最为强大的安卓Java层Hook框架 微信抢红包?

1.Apk方法Hook 聊天消息防撤回?
https://github.com/fkzhang/WechatUnrecalled


public void hookMethod(ClassLoader classLoader) {    
    try {		
        XposedBridge.log("now hook crypt...");		
        Class<?> clzAC = XposedHelpers.findClass("com.cxx.b.ac", classLoader);
        XposedBridge.hookAllMethods(clzAC, "h",  new HookedMD5Method());	
    } catch (Throwable t) {			
        XposedBridge.log(t);	
    }
}
public static class HookedMD5Method extends XC_MethodHook {    
    @Override	
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {		
        CommLog.e(TAG, "after " + param.method.getName() + "...");		
        String r0 = (String) param.args[0];
        String ret = (String) param.getResult();		
        String pre = param.method.getName();
        CommLog.e(TAG, pre + " data:" + r0);
        CommLog.e(TAG, pre + " ret:" + ret);
        super.afterHookedMethod(param);	
    }
}

Xposed https://github.com/rovo89/Xposed
最为强大的安卓Java层Hook框架
https://github.com/AndroidKnife/XposedDebug
https://github.com/rovo89/XposedInstaller

2.系统方法Hook
image45

Xposed https://github.com/rovo89/Xposed
最为强大的安卓Java层Hook框架
http://repo.xposed.info/module-overview

3.系统资源修改
image46
Xposed https://github.com/rovo89/Xposed
最为强大的安卓Java层Hook框架

4.系统增强补丁
App Settings: https://github.com/rovo89/XposedAppSettings
Xprivacy https://github.com/M66B/XPrivacy
NekoSMS https://github.com/apsun/NekoSMS
……

Hook框架
adbi https://github.com/crmulliner/adbi
鹰眼 https://github.com/MindMac/AndroidEagleEye

Frida https://github.com/frida/frida
Hook Native,打印调用参数
image48
Hook Java:
image49

加解密基础

1.安卓中的JCA与JSSE

2.对称加密

3.非对称加密

4.数字证书

5.算法工具

安卓中的JCA与JSSE

JCA( Java Cryptography Architecture)

设计原则:
1.实现的独立性与互用性
2.算法的独立性与扩展性

实现的独立性-使用密码学服务( cryptographic services ),加密解密、数字
签名、数据摘要等算法的实现都基于这些概念。
算法的独立性-使用基于provider的架构,Cryptographic Service Provider (CSP) 
必须实现一个或多个密码学服务。
实现的互用性-每个实现能够协同合作,如密钥的使用、签名的验证,对于同一
个算法而言, providerA生成的密钥要能被providerB使用,
providerA生成的签名要能被providerB验证。
算法的扩展性-新算法要易于添加。

CSP( Cryptographic Service Providers)

MessageDigest md = MessageDigest.getInstance(“MD5”);
MessageDigest md = MessageDigest.getInstance(“MD5”, “ProviderC”);

CSP( Cryptographic Service Providers)

Android中的Provider

Provider[] providers = java.security.Security.getProviders();
for (Provider p : providers) {
    System.out.printf("%s/%s/%f\n", p.getName(), p.getInfo(), p.getVersion());
    Set<Provider.Service> services = p.getServices();
    for (Provider.Service s : services) {
        System.out.printf("\t%s/%s/%s\n", s.getType(),
        s.getAlgorithm(), s.getClassName());
    }
}

CSP( Cryptographic Service Providers)

Android中的Provider
Android 4.4:
AndroidOpenSSL/Android’s OpenSSL-backed security provider/1.000000
DRLCertFactory/ASN.1, DER, PkiPath, PKCS7/1.000000
BC/BouncyCastle Security Provider v1.49/1.490000
Crypto/HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)/1.000000
HarmonyJSSE/Harmony JSSE Provider/1.000000
AndroidKeyStore/Android KeyStore security provider/1.000000

Android 6.0.1:
AndroidOpenSSL/Android’s OpenSSL-backed security provider/1.000000
AndroidKeyStoreBCWorkaround/Android KeyStore security provider to work around BC/1.000000
BC/BouncyCastle Security Provider v1.52/1.520000
Crypto/HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature)/1.000000
HarmonyJSSE/Harmony JSSE Provider/1.000000
AndroidKeyStore/Android KeyStore security provider/1.000000

Android N: Deprecated?
http://android-developers.blogspot.com/2016/06/security-crypto-provider-deprecated-in.html

SPI(Service Provider Interface)

Providers中的接口通过SPI定义。 Signature -> SignatureSpi Cipher -> CipherSpi

JCA主要的API:
引擎类与算法:
加解密操作、密钥与算法参数转换、对象高层表示
image51

JCA主要的API:
核心类与接口:
image52

SPI Service Provider Interface
安全相关的API:
java.security
javax.crypto
java.security.cert
java.security.spec
javax.crypto.spec
java.security.interfaces
javax.crypto.interfaces

import javax.crypto.*;
Cipher c = Cipher.getInstance("AES");
c.init(ENCRYPT_MODE, key);

KeyStore 密钥存储

KeyStore类型:
1.jks。SunJCE Provider提供,安卓中无法使用。
2.bks。BC Provider提供,安卓默认支持。
3.pkcs12。JDKPKCS12KeyStore, BC Provider提供,安卓默认支持。
4.dks。Domain KeyStore。不常用。

bks

image54

pkcs12
image55

JSSE(Java Secure Socket Extension)

JSSE的用途:为Java版本的SSL(Secure Sockets Layer )与
TLS(Transport Layer Security )提供框架实现

JSSE标准API:

  1. ServerSocketFactorySocketFactory
    2.非阻塞引擎用于处理SSL/TLS数据流(SSLEngine)
    3.创建套接字、服务套接字、SSL服务套接字以及使用的类
    4.套接字的类表示:安全套接字上下文类、安全工厂类与引擎类
    5.密钥与信任管理器接口(X509KeyManager、X509TrustManager)

安卓JSSE中的Provider:
HarmonyJSSE Provider:旧版本使用,代码基于Java实现。
OpenSSL Provider:新版本使用,代码基于JNI Native调用。

安卓中的证书绑定(Cert Pinning)
https://developer.android.com/training/articles/security-ssl.html
image56

绕过证书绑定!!!(Breaking Cert Pinning)
Hook绕过

基于Xposed:JustTrustMe
https://github.com/Fuzion24/JustTrustMe
image57
基于Substrate:Android-SSL-TrustKiller
https://github.com/iSECPartners/Android-SSL-TrustKiller
image58

Cipher类

algorithm/mode/padding
image59
image61
algorithm:算法。AES、DES、DESede等。
mode:分组模式。ECB、CBC、CFB、OFB、CTR等。
padding:填充模式。PKCS5Padding、PKCS7Padding、NoPadding、ZeroPadding

常见的对称加密算法

image60

公钥与私钥

存储格式:
DER(Distinguished Encoding Rules):区分编码规则。二进制格式,记录的第一个字段信息是一个
ASN.1(Abstract Syntax Notation One)对象。DER可用于编码公钥、私钥与证书。
PEM(Privacy Enhanced Mail):保密邮件的编码标准。信息转换为ASCII码或其他编码,使用BASE64对
加密后的信息进行编码。 DER可用于编码公钥、私钥与证书。
XML:一些密码学的库支持使用XML保存公钥与私钥信息。

存储规范:
PKCS#1: RSA Public/Private Key file。Java默认支持。
PKCS#8: Public/Private Key file。OpenSSL默认支持。

ASN.1 git://git.savannah.gnu.org/libtasn1.git

公钥与私钥

公钥与私钥-DER with PKCS#1

DER PrivateKey:
image62
->
image65
DER PublicKey:
image63
->
image64

公钥与私钥-DER with PKCS#8

DER PrivateKey:
image66
->
image69

DER PublicKey:
image67
image70
->
image68
image71

公钥与私钥-PEM with PKCS#8
PEM PrivateKey:
image72
PEM PublicKey:
image73

公钥与私钥-XML
XML PrivateKey:
image74

PEM PublicKey:
image75

数字证书

什么是数字证书?
数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书
包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时
间段内有效。
简单的说:在密码学领域,数字证书就是带有数字签名的公钥!

存储格式:
DER(Distinguished Encoding Rules):区分编码规则。二进制格式,记录的第一个字段信息是一个
ASN.1(Abstract Syntax Notation One)对象。DER可用于编码公钥、私钥与证书。
PEM(Privacy Enhanced Mail):保密邮件的编码标准。信息转换为ASCII码或其他编码,使用BASE64对
加密后的信息进行编码。 DER可用于编码公钥、私钥与证书。

存储规范:
X509:安卓系统大量使用的证书规范。目前使用v3版本。
PKCS#7: .p7c格式结尾。PEM存储的话,会以“-----BEGIN PKCS7-----” 和 “-----END PKCS7-----”
做头尾标记,存储证书链与单个证书。
PKCS#12: .pfx或.p12格式结尾。可存储证书、私钥及公钥。

X509 PEM证书

image76

image77

7D840D16-3DD7-4F86-B92E-C8C2B76450AA

算法工具

JCrypTool/CrypTool http://www.cryptool.org
image82

openssl https://github.com/openssl/openssl
image83

echo -n "hello" | openssl aes-128-cbc -a -e  -K e0e0e0e0f1f1f1f1e0e0e0e0f1f1f1f1 -iv e0e0e0e0f1f1f1f1e0e0e0e0f1f1f1f1
tv611lW0N+HKtQi+ysr2TQ==

RECalcTool
image84
image85

协议分析

1.网络抓包

2.数据包分析与识别

3.日志分析

4.代码分析与算法识别

5.Hook输出或动态调试

6.测试结果

抓包工具

Http/Socket抓包
tcpdump
adb shell tcpdump -p -vv -s 0 -w /sdcard/capture.pcap

tcpdump -> WireShark

Http/Https抓包:
Fiddler、Burpsuite、Charles

1.手机导入FakeCert.crt
2.抓包工具配置Https代理
3.手机设置代理服务器
4.手机Hook Breaking SSL Pinning
5.抓包测试

Http/Https抓包配置

C5ED5737-CBB4-4255-A3F9-133EF8F33203

通信协议

image93

数据格式

红色与绿色部分:
对应的部分是固定值,猜测
是协议的固定字段部分。

黑色部分:
应该是通信的真正数据,数据的长度为16字节的整数倍,猜测是使用对称或非对称加密,而通信传输一般使用对称加密,故猜测此处使用对称加密,接下来需要反编译代码,验证猜测,找到密钥与算法。

数据包分析与识别

通信协议

REST or SOAP
image94

数据格式

JSON
image95

application/octet-stream
image96

常见的压缩算法

1F 8B 08 -> gzip
image98

常见压缩算法数据头部:
gzip 1F 8B 08
zip 50 4B (PK)`` rar 52 61 72 21(Rar!)``
zlib 78 9c
lzma 6c 00
lz4 04 22 4D

日志分析

App日志输出

默认开启日志输出
image99

自带了日志输出但默认关闭
image100

过时的方法-Smali注入

针对日志输出语句被移除,但日志框架保留
image101

代码分析与算法识别

IDA Pro + FindCrypt2
AES Init
image102

Rijndael S-box
image103

AES_cbc_encrypt with PKCS5padding

image104
PKCS5Padding有如下特点:
1.填充的字节都是一个相同的字节。
2.该字节的值,就是要填充的字节的个数。
如果要填充8个字节,那么填充的字节的值就是0×8;
要填充7个字节,那么填入的值就是0×7;
如果只填充1个字节,那么填入的值就是0×1;

PKCS5PaddingPKCS7Padding的区别:
前者只作用于块大小为64字节的数据,后者没有此限制。

CBC(密码分组链接模式)

image105

CBC模式原理

image106

RSA/ECB/PKCS1Padding

image108

PKCS1Padding填充规则

image107

RSA 1024 自定义Padding长度12,默认11,数据长117字节

image109

Hook输出或动态调试

Hook:
image110

App壳

1.简述 脱壳前学习的知识、壳的历史、脱壳方法

2.第一代壳

3.第二代壳

4.第三代壳

5.第N代壳

简述

1.Apk文件结构

2.Dex文件结构

3.壳史

4.壳的识别

Apk文件结构

BB87900F-4C34-4CC2-B493-A359554DDF3B

Dex文件结构

image111

壳史

第一代壳 Dex加密
1.Dex字符串加密
2.资源加密
3.对抗反编译
4.反调试
5.自定义DexClassLoader

第二代壳 Dex抽取与So加固
1.对抗第一代壳常见的脱壳法
1.Dex Method代码抽取到外部(通常企业版)
2.Dex动态加载
3.So加密

第三代壳 Dex动态解密与So混淆
1.Dex Method代码动态解密
2.So代码膨胀混淆
3.对抗之前出现的所有脱壳法

第四代壳 arm vmp(未来)
1.vmp

壳的识别

常用加固厂商特征
娜迦: libchaosvmp.so , libddog.solibfdog.so

爱加密:libexec.so, libexecmain.so

梆梆: libsecexe.so, libsecmain.so , libDexHelper.so

360:libprotectClass.so, libjiagu.so

通付盾:libegis.so

网秦:libnqshield.so

百度:libbaiduprotect.so

基于特征的识别代码

image112

第一代壳

1.内存Dump法

2.文件监视法

3.Hook法

4.定制系统

5.动态调试法

内存Dump法

内存中寻找dex.035或者dex.036
/proc/xxx/maps中查找后,手动Dump

image113

内存中寻找dex.035或者dex.036
android-unpacker https://github.com/strazzere/android-unpacker
image114

升级版的android-unpackerreadlseek64代替pread,匹配dex代替匹配odex
image115

文件监视法

Dex优化生成odex

inotifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android

监视文件变化
image117

Dex优化生成odex
inotifywait-for-Android https://github.com/mkttanabe/inotifywait-for-Android
监视DexOpt输出
image119
image118

hook法

Hook dvmDexFileOpenPartial
http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp

image120

Hook dvmDexFileOpenPartial
image121

定制系统

修改安卓源码并刷机
image122

DumpApk https://github.com/CvvT/DumpApk
只针对部分壳
image123

IDA Pro
6927B02D-6D2E-465C-AA4C-7A81E2F5D8FE

动态调试法

gdb gcore法
.gdbserver :1234 –attach pid
.gdb
(gdb) target remote :1234
(gdb) gcore
coredump文件中搜索“dex.035”
image127

第二代壳

1.内存重组法

2.Hook法

3.动态调试

4.定制系统

5.静态脱壳机

内存重组法

Dex篇
ZjDroid http://bbs.pediy.com/showthread.php?t=190494
image128

Dex篇
ZjDroid http://bbs.pediy.com/showthread.php?t=190494
对付一切内存中完整的dex,包括壳与动态加载的jar
A173471C-923E-42E5-A938-1AF0C42C0A6A

so篇
elfrebuild
image131
image132
image133
构造soinfo,然后对其进行重建
image134

hook法

针对无代码抽取且Hook dvmDexFileOpenPartial失败 Hook dexFileParse`
http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp
image135

针对无代码抽取且Hook dexFileParse失败
Hook memcmp
http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp
image136

针对无代码抽取且Hook dexFileParse失败
Hook memcmp
http://androidxref.com/4.4_r1/xref/dalvik/vm/DvmDex.cpp
image137

针对无代码抽取且Hook dexFileParse失败
Hook memcmp
image138

修改安卓源码并刷机-针对无抽取代码
https://github.com/bunnyblue/DexExtractor
0A32E171-4D4B-435C-A91E-1003FA02BE73
C89DCFED-3596-41FB-863E-E40587AD57D2

DexHunter-最强大的二代壳脱壳工具
https://github.com/zyq8709/DexHunter
DexHunter的工作流程
6B18BBDB-57CD-41A1-8DAB-8E32F9BDE99B

工作原理
FAB7DCC5-A036-4A12-B5C7-1D67BA8AE75A

动态调试

绕过三进程反调试
http://bbs.pediy.com/showthread.php?p=1439627
F1A42E71-D14B-4094-9200-2957FE5B6E45
gcore防Dump解决方案:
http://bbs.pediy.com/showthread.php?t=198995

断点mmap调试,针对Hook dexFileParse无效
原理:
dexopt优化时,dvmContinueOptimization()->mmap()

image149

分析壳so逻辑并还原加密算法
http://www.cnblogs.com/2014asm/p/4924342.html
C513B1AE-28F2-4F95-A46F-B068F7EF7063
自定义linker脱so壳
https://github.com/devilogic/udog

main() -> dump_file()

image151

第三代壳

dex2oat法
ART模式下,dex2oat生成oat时,内存中的DEX是完整的
http://bbs.pediy.com/showthread.php?t=210532
image152

Hook Dalvik_dalvik_system_DexFile_defineClassNative
枚举所有DexClassDef,对所有的class,调用dvmDefineClass进行强制加载
AB6131FF-1D90-4B09-B3D8-DE5121762893

第N代壳

so + vmp
动态调试 + 人肉还原

NOW AND FUTURE

安全防护

1.安全建议

2.其它安全技术

3.代码安全审计

4.安全测试框架

5.App加固

6.App测试平台

安全建议

Proguard混淆 proguard-android.txt

Log清除

so符号strip g++ -fvisibility=hidden –s

so ollvm https://github.com/obfuscator-llvm/obfuscator

使用未公开的安全技术

安全审计

其他安全技术

DEX自修改技术
selfmodify https://github.com/leonnewton/selfmodify
image154

so模块隐藏技术
Android_memLoader https://github.com/1683942030/Android_memLoader_src

image155

代码平台审计框架

安卓平台审计框架
drozer https://github.com/mwrlabs/drozer

安全测试框架
MobSF https://github.com/ajinabraham/Mobile-Security-Framework-MobSF

image158

App加固

加固平台
加固宝 http://jiagu.360.cn/

扫描平台

网址

360捉虫猎手

http://appscan.360.cn

阿里聚安全漏洞扫描

http://jaq.alibaba.com/

腾讯金刚审计系统

http://service.security.tencent.com/kingkong

百度移动云测试中心

http://mtc.baidu.com/startTest/safe

AppRisk Scanner

https://apprisk.newskysecurity.com

爱加密

http://www.ijiami.cn/

梆梆加固

https://www.bangcle.com/

AppTest掌测

http://www.appstest.cn/

TestIn测试平台

www.testin.cn/

腾讯优测

http://utest.qq.com/

爱内测

http://www.ineice.com/

AppScan

http://www-03.ibm.com/software/products/zh/appscan-mobile-analyzer

Fortify SCA

http://www8.hp.com/us/en/software-solutions/application-security/