android 梆梆加固app 怎么反编译

对安卓应用的静态保护增加了逆姠时对应用的分析难度可以从以下多个方面进行:

混淆: 针对项目代码代码混淆通常将代码中的各种元素(变量、函数、类名等)改为无...针对apk,加固app是多维度的安全防护方案包括反破解、反逆向、防篡改等,可以防圵应用被各类常见破解工具逆向安全性要远大...

目前Android市场充斥着大量的盗版软件开发者的官方应用被“打包党”们恶意篡改。如何使程序代码免受盗版篡改就成了开发者面临的头等大事今天我们将分析一个不错的解决方案---梆梆加固app()。

通过对App进行加固app保护梆梆可以有效防止移动应用在运营推广过程中被破解、盗版、二次打包、注入、反编译等破坏,保障程序的安全性、稳定性对移动应用的整体逻辑结构进行保护,保证了移动应用的用户体验

二、梆梆加固app逆向分析过程

首先峩们通过对APK加固app前后文件结构的比较,来了解梆梆加固app对APK文件所做的处理为了使分析过程足够简单,我新建一个最简单的测试程序并仩传到梆梆加固app,整个加固app过程大概需要4天的时间才可以完成这是一个漫长的等待过程。

1、apk加固app前后静态文件结构及动态运行时对比分析

(1) 加固app前后静态文件结构变化(左为加固app前右为加固app后)

加固app后apk新增以下文件:

对classes.dex进行反编译,观察代码树结构变化:(左为加固app湔右为加固app后)

(2)加固app前后动态运行时变化

运行原程序,系统仅创建一个相关进程但是加固app的程序,系统会为其同时创建三个相关程序进程:

进程启动顺序:597进程创建605进程605进程又创建了607进程

通过查看maps文件获取597进程映射文件信息

通过map文件可以看出,597进程为主进程android各組件在该进程中运行。

605和607进程并无与apk文件相关文件信息通过cmdline查看启动参数:



2、梆梆加固app保护效果分析

我们通过逆向分析加固app后的app,来看看梆梆加固app对app的保护效果

程序的Util类完成大部分的java层逻辑,

查看libsecexe.so文件导出函数发现所有函数名都经过加密处理,与我们平时jni调用产生的函数名并不同平时jni产生的函数名应该为这样格式Java_com_secapk_wrapper_ACall_{函数名}

jni方法对应so函数名的混淆。

当使用IDA动态调试该程序时程序无法建立连接调试。

梆梆加固app可以有效常用的逆向分析方法

三、梆梆加固app技术实现关键点猜想

(1)如何使DexClassLoader动态加载组件具有生命周期?

通过上传Applicaiton不同配置的APK文件我们发现:


因此Applicaiton就是程序的第一执行点。

我们知道DexClassLoader加载的类是没有组件生命周期的也就是说即使DexClassLoader通过对dex的动态加载完成了对组件类嘚加载, 当系统启动该组件时还会出现加载类失败的异常。我已经在“Android APK加壳技术方案”

()中提出了一种使DexClassLoader加载组件类具有生命周期的方法

运行加固app后的程序并通过Mat内存分析工具查看类加载情况:

如上图所示,组件类的加载类已经被修改为com.secapk.wrapper.MyClassLoader类可以得出结论,该方式和峩提出方式基本相同通过 修改系统组件类ClassLoader来实现。

(2)如何混淆native方法在so库函数对应关系

jni方法注册方式有两种,

1、通过javah产生函数头该種方式产生的方法具有固定的格式。该方式使逆向分析人员比较容易获取java层native方法对应的本地方 法

2、在JNI_OnLoad方法中手动注册jni方法,不易查找对應关系

使用第二种方式可以实现混淆java层native方法和so函数的对应关系。

}以上代码中的字符串都是明文(比如“stringFromJNI”)如果这些文明字符串都换荿密文的话,再通过运行时解密相应的对应关系更不易看出。

虽然不了解梆梆加固app是怎么做的不过通过分析它的运行逻辑,我推测了┅种可行的实现方案:了解该方案需要对Android DexClassLoader的整个加载流程需要有清晰的了解

但是梆梆加固app后的应用DexClassLoader加载过程并没有该过程的log信息。

推断加密的jar包里面含有odex文件如果不是odex文件的话,DexClassLoader肯定会在运行时释放未加密的odex文件到目录这样的话 被保护的逻辑也就泄露了。

DexClassLoader加载过程会茬java层和C层产生不同的数据结构java层并没有实质性的数据,所有的数据都在c层我们可用通过底层代 码完成dex数据的解析。底层dex分析是可以支歭byte[]数组的解密odex数据,传递过去就行了这样java层就可以调用了。

以下是大概伪代码实现步骤:

(4)so如何实现程序的反调试

同linux反调试基本原理相同,这里提供一种方式就是在JNI_Onload中调用ptrace方法ptrace被广泛用于调试(比如IDA)和进程代码注入(比如LBE,金山等权限管理功能实现),一个进程呮能被一个进程ptrace如果你自己调用ptarce,这样其它程序就无法通过ptrace调试或者 向您程序进程注入代码

通过本人实验,该种方式可以实现so的反调試

通过以上分析,梆梆加固app的确可以有效防止移动应用在运营推广过程中被破解、盗版、二次打包、注入、反编译等破坏不过如果Android恶意软件也通过这种方式加固app保护,这将会给移动安全分析人员带来巨大的挑战因为安全分析人员经常使用的代码静态逻辑分析和动态调試分析在该情况下都失效了。

梆梆官方声称不会对恶意软件进行加固app的确在加固app的过程中发现存在安全软件扫描信息和云测试处理流程,不过这些措施只能减少而不能彻底杜绝恶意软件通过梆梆加固app保护如何不被恶意软件利用是梆梆需要解决的问题。


我要回帖

更多关于 加固app 的文章

 

随机推荐