上篇文章介绍了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...

用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增加...

在IDA动态调试so库这篇文章中讲了基本的动态调试方法,但是这种方法有一个缺点,就是只能在进程运行起来之后才能attach上,也就是说这时进程已经将so库加载进内存并且已经执行完JNI_OnLoad,所以只需要在JNI_OnLoad函数中完成一些反调试措施,就无法使用上篇文章所介绍的方法来动态调试。这篇文章就介绍动态调试的另一种方法:直接在JNI_OnLoad函数上下断点。 另外,上...

最近在逆向apk的时候发现关键的加密算法被放进了so库里,毕竟直接用java写这种代码太容易被破了,放在so里面更安全些。既然这样,那也只好动态调so了,查资料研究了几个小时终于搞定了,现记录如下: 1.基本配置 IDA,adb,android_server,模拟器。这里用的是IDA6.5。 android_server在IDA的目录下面,需要用adb push至模拟器: adb push androi...

1.Dex文件格式 在上篇Dex文件解析文章中大致介绍了Dex文件的格式,回顾点这里:Android 文件解析之Dex文件头 这一节主要介绍string字符串是如何保存在Dex文件中的。 下面这张图很清晰的表示了string字符串在Dex文件中的存储方式: 在Dex的header中string_ids_size和string_ids_off分别表示了字符串的个数和string table的偏移,而string table中又存储着每个string数据的真实偏移...

1.工具准备 动态调试Smali代码需要的工具有:apktool,netbeans,signapk.jar,ddms 2.apktool反编译 apktool d -d xxx.apk -o out 1 apktool d -d xxx.apk -o out 不加-d选项时生成的smali代码是.class结尾的,不能用于动态调试,加上-d选项后生成的smali代码是.java 结尾的,并且...

判断手机是否root只需判断su文件是否在特定的目录下(适用于大部分情况),代码如下: /** * * 判断手机是否ROOT * */ public boolean isRoot() { boolean root = false; try { if ((!new File("/system/bin/su").exists()) && (!new File("/system/xbi...

+
跳转到评论