- 博客(331)
- 资源 (13)
- 收藏
- 关注
原创 Linux系统编程-fork
0x00 我们首先来最基本的fork使用,首先列代码,然后讲解。#include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(EXIT_FA
2016-08-06 15:51:15 724
原创 Python编程入门
0x00 python的两种编程形式: 1、交互式 2、脚本式,也分两种方式。 详见:http://www.runoob.com/python/python-basic-syntax.html。 0x01 Python有五个标准的数据类型:Numbers(数字)String(字符串)List(列表)Tuple(元组)Dictionary(字典)。 ...
2016-05-09 15:33:28 2607
原创 Android SO逆向-多重继承
0x00 这一节我们要讨论多重的汇编实现。 0x01 我们先直接看汇编代码:#include "com_example_ndkreverse7_Lesson7.h"#include #define LOG_TAG "lesson7"#define ALOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG, LOG_TA
2016-04-23 11:36:37 1911
原创 Android SO逆向-对象的继承和虚函数
0x00 这一节我们要讨论对象的继承和虚函数的汇编实现。 0x01 我们先直接看汇编代码:#include "com_example_ndkreverse6_Lesson6.h"#include #define LOG_TAG "lesson6"#define ALOGD(...) ((void)__android_log_print(ANDROID_LOG_DEBUG,
2016-04-22 14:19:07 4035
原创 Android SO逆向-对象的拷贝构造函数
0x00 这一节我们主要讨论对象的拷贝构造函数的汇编实现。 0x01 我们直接看C++代码: Test.h:#ifndef _TEST_H_#define _TEST_H_#include #define LOG_TAG "lesson5"#define ALOGD(...) ((void)__android_log_print(ANDROID_LOG_D
2016-04-21 09:45:17 3464
原创 Android SO逆向-对象的构造函数与析构函数
0x00 这一节我们主要讨论对象的构造函数和析构函数的汇编实现。 0x01 我们先直接看C++代码:#include "com_example_ndkreverse4_Lesson4.h"#include "Test.h"#include #define LOG_TAG "lesson4"#define ALOGD(...) ((void)__android_log_pr
2016-04-19 20:52:36 4132
原创 Android SO逆向-数组与指针
0x00 这一节主要分析一维数组、二维数组、数组指针和指针数组的汇编实现。 0x01 我们先直接看C++代码:#include "com_example_ndkreverse3_Lesson3.h"#include #define LOG_TAG "lesson3"#define ALOGD(...) ((void)__android_log_print(ANDROID_L
2016-04-18 11:09:39 2790
原创 Android SO逆向-全局变量和静态局部变量
0x00 这一节比较简单,主要分析全局变量,全局静态变量,静态局部变量的实现。 0x01 我们直接看代码。#include "com_example_ndkreverse2_Lesson2.h"#include #define LOG_TAG "lesson2"#define ALOGD(...) ((void)__android_log_print(ANDROID_L
2016-04-17 11:57:22 3432
原创 Android SO逆向-流程控制语句及表达式运算
0x00 在前一篇文章Android SO逆向-基本数据类型及函数的工作原理中,我们介绍了ndk的使用,这篇文章直接列出C++源码及对应的汇编代码。 0x01 在java层主要是调用native方法,现在列出java层的代码: Lesson1.javapackage com.example.ndkreverse1;public class Lesson1 { sta
2016-04-17 10:02:34 2431
原创 Android SO逆向-基本数据类型及函数的工作原理
0x00 如果不熟悉ARM汇编的同学,请先阅读这两篇文章,常用ARM汇编指令,ARM子函数定义中的参数放入寄存器的规则。 0x01 这一节我们通过逆向Android SO文件,来理解C++基本数据类型,如int、float、bool、char、指针、引用、常量的ARM汇编形式。 还有理解C++函数调用,用ARM汇编是怎么实现的?参数如何传递,返回值怎么传?函数执行完毕后怎么
2016-04-16 10:40:06 3350 1
原创 关于Davlik解释器的一些思考
一直以来对Davlik虚拟机都有一些疑问: 1、最初被davlik解释执行的java代码是什么呢? 2、dalvik解释执行java代码时,如果遇到native代码(C/C++)怎么办呢? 3、如果native代码想调用java代码,davlik是怎么解释执行的呢? 4、Zygote进程fork出应用程序进程后,davlik是怎么解释执行ActivityThread类的ma
2016-03-25 18:24:56 1440
原创 一步一步学ROP之Android ARM 32位篇
0x00 本文仅解释说明蒸米大神一步一步学ROP之Android ARM 32位篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。 0x01 第一个问题:payload = 'A'*132 + p32(callsystemaddr),这个132是怎么来的? 要回答这个问题,我们需要把level6.c反汇编,level6.c代码如下: #include#include#i
2016-02-19 17:48:20 2697 1
原创 一步一步学ROP之linux_x86篇
0x00 本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。 阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈不可执行),ASLR(内存地址随机化),Stack Protector(栈保护),Memory Leak。 0x01 第一个问题:为什么要构造成”A”*140+ret字符串,这个140是怎么
2016-02-19 11:16:13 4592 2
原创 百度全系APP SDK漏洞–WormHole虫洞漏洞
0x00 我们以百度地图v8.7.0为例来分析百度蠕虫漏洞,apk下载地址为https://github.com/jltxgcy/AppVulnerability/Baidu_Maps_v8.7.0.apk。 使用Android Killer来打开这个apk,Android Killer下载地址为http://pan.baidu.com/s/1jGQUzwa。 我们先讲述如何在代
2016-02-18 18:26:46 9391 1
原创 Android 中间人攻击
0x00 Android中间人攻击的思路就是劫持局域网中被攻击机器和服务器间的对话。被攻击机器和服务器表面上工作正常,实际上已经被中间人劫持。可以从一张图来明白这个过程。 受攻击主机发送的数据,首先经过了攻击者,从服务器返回的数据也经过攻击者,再发送给受攻击主机。 0x01 Android开源中间人攻击例子,请参考https://github.com/ssun125/Lanm
2016-02-17 16:48:42 5122
原创 使用NanoHttpd实现简易WebServer
0x00 在介绍使用NanoHttpd实现简易WebServer之前,我们首先熟悉下局域网Socket通信。一个Client工程,代码地址为https://github.com/jltxgcy/AppVulnerability/tree/master/MyClient。一个Server工程,代码地址为https://github.com/jltxgcy/AppVulnerability/tr
2016-02-17 16:16:32 9562 4
原创 Android WebView File域同源策略绕过漏洞浅析
0x00 我们首先讲一个webView这个方法的作用:webView.getSettings().setAllowFileAccessFromFileURLs(false); 为了讲解这个方法,我们还是看一个实际的例子。代码地址还是参考https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo。
2016-02-17 10:53:27 7806 3
原创 Android WebView远程代码执行漏洞简析
0x00 本文参考Android WebView 远程代码执行漏洞简析。代码地址为,https://github.com/jltxgcy/AppVulnerability/tree/master/WebViewFileDemo。下面我们分析代码。 0x01 首先列出项目工程目录: MainActivity.java的代码如下:public class MainActi
2016-02-16 20:17:39 5910
原创 Android APP漏洞挖掘
0x00 1、组件公开安全漏洞 参考Android 组件安全。 2、Content Provider文件目录遍历漏洞 参考Content Provider文件目录遍历漏洞浅析。 3、AndroidManifest.xml中AllowBackup安全检测 参考两分钟窃取身边女神微博帐号?详解Android App AllowBackup配置带来的风险。 4
2016-02-16 19:06:46 5651
原创 通过smali注入log和函数调用堆栈
0x00 smali注入log,看本文前,请大家先看Android安全–加强版Smali Log注入。 有几点要说明: 1、在上文中,crack.smali,并不是作者直接写的smali文件,而是先写java代码然后编译成dex,再用apktool把dex反编译成smali得到的。我们也可以用这种方法来注入我们自己
2016-02-04 10:59:46 4440 1
原创 Android程序反破解技术
0x1 对抗反编译可以大概分为以下几点: 1、对抗反编译工具,例如apktool、dex2jar等 2、对抗静态编译,分为代码混淆技术、NDK保护、apk加壳保护。 3、对抗动态调试,分为检测调试器、检测模拟器。 4、防止重编译,分为检查签名,校验保护。 更多相关内容请参考《Android软件安全与逆向分析》。 0x02 对抗反编译工具,例如dex2ja
2016-02-04 09:31:28 3768
原创 IDA动态调试Android的DEX文件
0x00 我们以阿里比赛第一题为例,来动态调试dex文件。参考IDA动态调试Android的DEX文件一文,首先AndroidManifest.xml里面android:debuggable="true"。 0x01 下面详细说步骤。 1、将classes.dex拖入IDA中。 2、选择Debugger->Debugger options->Set specific
2016-01-28 14:44:26 7807 2
原创 Android native反调试方式及使用IDA绕过反调试
0x00 为了避免我们的so文件被动态分析,我们通常在so中加入一些反调试代码,常见的Android native反调试方法有以下几种。 1、直接调用ptrace(PTRACE_TRACEME, 0, 0, 0),参考Android Native反调试。 2、根据上面说的/proc/$pid/status中TracerPid行显示调试程序的pid的原理, 可以写一个方法检查
2016-01-28 11:36:49 18920 7
原创 ida动态调试so,在init_array和JNI_ONLOAD处下断点
0x00 如何在JNI_ONLOAD下断点,参考安卓逆向学习笔记(5) - 在JNI_Onload 函数处下断点避开针对IDA Pro的反调试。最好使用模拟器调试,确保 Attach to process后,对应进程在DDMS中出现小红蜘蛛。 下面将如何在init_array下断点,首先要找到so的init_array端,把so拖入ida,然后按Crtl+s,会出现该so的所有段。如下
2016-01-28 09:55:26 6992 1
原创 DexHunter脱壳神器分析
0x00 这篇文章我们分析Android脱壳神器DexHunter的源代码。DexHunter作者也写了一篇介绍它的文章从Android运行时出发,打造我们的脱壳神器。DexHunter源代码位于https://github.com/zyq8709/DexHunter。 0x01 DexHunter 实现中,只需要修改一处文件:dalvik\vm\native\dalvik_sy
2016-01-26 18:25:57 10388 7
原创 DexClassLoader和PathClassLoader类加载机制
0x00 在DexClassLoader和PathClassLoader加载Dex流程一文中,我们分析了dex文件如何形成了DexFile结构体。本文中讲解类加载机制,实际上就是生成ClassObject对象。 我们以DexClassLoader为例,讲解类加载机制,PathClassLoader是一样的。 我们在加载类时通常会调用loadClass,那么我们就从loadClas
2016-01-21 20:29:55 3735
原创 DexClassLoader和PathClassLoader加载Dex流程
0x00 在上一篇文章apk安装和优化原理,在最后我们分析了DexClassLoader和PathClassLoader的构造函数的不同。 PathClassLoader最后调用的是new DexFile(pathFile),而DexClassLoader调用的是DexFile.loadDex(dexPathList[i], outputName, 0)。 0x01
2016-01-21 12:52:05 8214 1
原创 apk安装和优化原理
0x00 apk安装的方式有: 1、开机启动时安装 2、通过adb install 或者在手机中点击apk,进行界面安装。 0x01 开机启动后在system_server中调用PackageManagerService.main,随着调用的深入,循环对每个apk都调用scanPackageLI方法,这个函数提取apk的AndroidManifest.xml里面的内容
2016-01-20 20:25:58 3991
原创 Android加壳native实现
本例仅在Android2.3虚拟机跑通过,如果要适配其他机型,请自行研究,这里只是抛砖引玉。 0x00 在Android中的Apk的加固(加壳)原理解析和实现,一文中脱壳代码都写在了java层很容易被识别出来,很多需求需要把脱壳的程序转移到native层,其实转移的思路也很简单,就是在native层通过JNI调用Java层代码。 0x01 public class Prox
2016-01-19 19:50:21 3851 2
原创 Android 静态分析smail
即前篇文章Android 静态分析 smali,我一直在思考以下几个问题: 1、子类使用的父类中的方法,那么对应的smail是invoke-super还是invoke-virtual呢?对应的类是父类还是子类呢? 解释:invoke-direct {p0}, Landroid/app/Activity;->()V,这里所说的父类还是子类指的是invoke参数后面跟着的类,在这个例子
2015-09-28 11:01:31 1869
原创 Android系统启动流程
我们先来看一张图,它清晰的说明了整个Android系统的启动流程,参考Android内核开发:图解Android系统的启动过程。 第一阶段:Android设备上电后,首先会从处理器片上ROM的启动引导代码开始执行,片上ROM会寻找Bootloader代码,并加载到内存。(这一步由“芯片厂商”负责设计和实现) 第二阶段:Bootloader开始执行,首先负责完成硬件的初始化
2015-09-22 18:46:51 2060 1
原创 Home界面的启动
继上篇文章Launcher进程的启动,我们继续分析Home界面的启动。public final class ActivityThread { ...... public static final void main(String[] args) { SamplingProfilerIntegration.start(); Process.setArgV0(""); Loope
2015-09-22 16:18:00 2326 2
原创 Launcher进程的启动
继System进程的启动流程第二部分之后,我们来分析Launcher进程的启动。public class Process { ...... public static final int start(final String processClass, final String niceName, int uid, int gid, int[] gids, int debugFl
2015-09-21 20:23:28 2858
原创 System进程的启动流程第二部分
继System进程的启动流程第一部分,我们接着分析com.android.server.SystemServer的main函数。如下:public class SystemServer { ...... native public static void init1(String[] args); ...... public static void main(St
2015-09-21 17:39:52 1735
原创 System进程的启动流程第一部分
承接上篇文章Zygote进程的启动流程,我们继续分析System进程的启动流程。 Zygote进程在启动的过程中,除了会创建一个Dalvik虚拟机实例之外,还会将Java运行时库加载到进程中来,以及注册一些Android核心类的JNI方法来前面创建的Dalvik虚拟机实例中去。注意,一个应用程序进程被Zygote进程孵化出来的时候,不仅会获得Zygote进程中的Dalvik虚拟机实例拷贝,
2015-09-17 15:28:06 2099
原创 Zygote进程的启动流程
Zygote进程时由Android系统的第一个进程init启动起来的。init进程时在内核加载完成之后就启动起来的,它在启动的过程中,会读取根目录下的一个脚本文件init.rc,以便可以将其他需要开机启动的进程也一起启动起来。 Zygote进程在脚本文件init.rc中的启动脚本如下:service zygote /system/bin/app_process -Xzygote /syst
2015-09-17 09:40:14 1941
原创 从头到尾详解Android Studio
1、下载Android Studio 如果你已经安装了eclipse,并且已经安装了Android SDK,那么请只下Android Studio IDE only,下载地址:http://tools.android.com/download/studio/canary/1-3-1。 方便大家下载,附上百度网盘的链接,是windows的版本,点击打开链接。 2、然后执行下载
2015-09-10 17:01:44 2973 2
原创 Android 组件安全
1、Activity、Service、BroadcastReceiver、ContentProvider是Android的四大组件,他们的安全性是非常重要的。四大组件的安全漏洞主要集中在是否可以被外部调用,外部调用是否存在风险。 四大组件是否可以被外部调用,决定因素是在AndroidManifest.xml里面定义的四大组件的标签export的布尔值。如下:<activity
2015-09-09 11:09:21 4466 5
原创 Android中的权限管理(基于Permission ProtectionLevel)
1、什么是protectionlevel呢? 我们经常在AndroidManifest中使用权限,如果我们想让应用程序可以发短信,那么应该这样写: 那么这个权限的定义是在哪里定义的呢?如下: frameworks/base/core/res/AndroidManifest.xml<permission android:name="android.permission
2015-09-08 16:53:21 23322 4
压缩SDK demo
2014-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人