上篇文章介绍了so加壳(加密特定section)的原理,回顾点这。这篇文章将介绍如何使加壳的so正常运行。 1.动态解密原理 在上篇文章说的加壳原理中,将特定section的长度和偏移分别写入so头部的e_entry和e_shoff字段,那么在解密时只需读取这两个字段即可找到特定section的偏移。接下来还需解决以下几个问题: 如何找到so被加载的起始地址 什么时候进行解密 如何动态修改内存权限 问题一:...

上篇文章介绍了so加壳需要了解的elf文件格式回顾点我,这篇将介绍so加壳的原理,并且给出python版源码。 1.加壳原理 本加固方案实现对特定section进行整体加密。对特定section进行整体加密需要解决以下几个问题: 如何找到特定的section 使用什么方法加密 是否可以简化解密操作 读过上一篇blog的话,第一个问题就很简单了。只要读取每个section的名字与要被加密的section名比较即可;第...

1.SO加固系列 dex加壳是保护APK的一种方式,然而只有dex加壳会影响APK的加载速度,另外通过内存dump也能轻易还原出原dex,在专业的加固方案中除了dex加壳还能经常见到对SO的保护,本系列文章将介绍基本的SO加固方案。本文是SO加固系列的第一篇,主要介绍SO加固时所需要用到的ELF中Section的相关知识。 2.ELF中的Section ELF文件格式具体有三种类型: 可重定位...

1.修改AndroidManifest.xml 新建一个app(本次实例中使用包名:com.xposedhooktest2),在AndroidManifest.xml中的application标签内添加xposed相关的meta-data: <meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposedminversion" androi...

最近暂时比较闲,看到ISCC的CTF比赛(http://www.iscc.org.cn/challenges#),时间还挺长的,就玩了玩android的题,感觉学到了不少~ 1.没有题目的题目 出题的哥哥说,没有描述,想办法弄吧 =。= 题目放在云盘:http://pan.baidu.com/s/1o61J9Zs   key:cibh 2.解题步骤 解压完发现是一个损坏的apk包,用zip命令修复: zip -FF test1.apk --ou...

现在市面上一些加固产商在对apk进行加固时基本上都加入了inotify反调试,这篇文章就讲解inotify的原理及如何用inotify来反调试。 1.inotify linux下inotify可以实现监控文件系统事件(打开,读写删除等),inotify最常见的api有以下几个: inotify_init:用于创建一个 inotify 实例的系统调用,并返回一个指向该实例的文件描述符。 inotify_add_watch:增加对文件或者目录的监控,并指定...

本文通过ptrace和检测/proc/pid/status实现JNI层的基本反调试,实现详细步骤如下: 1.新建一个类 Java package com.example.jnitest; public class JNIClass { static { System.loadLibrary("security"); } public static native void AntiDebug(); public static native int getValue(); } 12...

android加载so库时会调用loadLibrary来完成加载操作。一般情况下,我们将JNI_OnLoad看作so库的入口,但是很多加壳过的so根本无法从JNI_OnLoad处开始分析,那JNI_OnLoad真的是so的入口吗,从android源码中找到答案如下: System.loadLibrary其实只是做了一个中转(System.loadLibrary): public static void loadLibrary(String lib...

手动脱壳步骤较多,时间久了容易忘记,遂将一次完整脱壳步骤记录于此。 1.工具准备 IDA6.6  android_server  adb jdb等 2.运行android_server 用adb连上真机,运行android_server。 ./android_server 1 ./android_server 打开android_server后,它会默认在手机端监听23946端口。...

在脱壳的时候经常见到在dvmDexFileOpenPartial这个函数下断点,但是为什么要在这里下断点呢,这篇文件就从源码的角度跟踪一下Dex的加载流程。 源码可以在这里查看:/dalvik/dexopt/OptMain.cpp OptMain中的main函数就是加载dex的最原始入口,是用c代码写成的native函数: int main(int argc, char* const argv[]) { set_process_name("dexo...

在上篇文章中(回顾点这)介绍了混淆的基本原理,但是那种方法实现的混淆Dex在安装的时候会报错: INSTALL_FAILED_DEXOPT 1 INSTALL_FAILED_DEXOPT 经过一段时间研究后在源码(/dalvik/libdex/DexSwapVerify.cpp)中找到答案: 在加载dex...

1.Dex混淆原理 Dex文件中以类为核心,方法字段等数据都需要归属于某个类,所以在混淆时主要针对3类数据: 类名 类中的方法名 类中的字段名 为了更好的理解Dex文件中的类,先让我们看看类数据之间的关系图: 对于每个类而言,都有一个class_def_item结构体,其中class_idx指明了这个类的类名,superclass_idx指明了这个类的父类,在这个class_def_item结构体中最重要的就是class_dat...

用tcpdump可以很方便的在手机上抓包,数据线连上pc后,过程如下: 1.上传tcpdump 修改/data/local目录权限为777,然后把tcpdump放在该目录下 Shell adb push /home/xxx/tcpdump /data/local/tcpdump 1 adb push /home/xxx/tcpdump  /data/local/tcpdump 然后给tcpdump增加...

这个解析器可以读取dex文件中的各个数据,比如string,field,method,class等。通过写这个解析器对dex文件格式有了比较清晰的认识,也算是为以后学习dex文件的混淆和加壳做准备把。 Python import struct import binascii import hashlib import zlib class DexFile: def __init__(self,filepath): self.dex = open(filepath,"r") ...

Dex文件中最重要的就是各个class了,method tale,field table,string table这些的存在都是为了class服务的,每个方法和字段最终都要归属与某个具体的类,它们之间的关系大致如下: header中的class_def_off指向了第一个类的class item,所有类的item都可以由class_def_off加上一个偏移获得,每个item中有8项,共32bytes,指明了这个类的名字,权限,类数据等,其中class_data_off指出...

Checksum Dex文件头中的checksum是用来校验文件的完整性,使用adler32算法。在python中的zlib库中有该算法: Python import zlib 1 import zlib checksum计算dex文件中checksum字段之后(12字节之后)的数据,主要代码如下: def CalChecksum...

+
跳转到评论