android逆向安全
文章平均质量分 87
不知世事
日拱一卒,功不唐捐。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Virbox深思考盾So文件保护
第一:入口点:`第二:执行完对应的init_array以后进入linker执行第三:解密出对应的字节码:可能其中会有混淆的操作,没发现,猜测也是跟二进制的操作相关,处理好混淆前后的对应关系。总结:1.没有在init_array处完全的解密完;2.解密函数静态不好发现,难以进行静态解密;3.从正向的角度怎么实现?...原创 2020-11-19 19:39:22 · 1562 阅读 · 0 评论 -
Android IDA So的动态调试大法
今天已是国庆的第五天,白天去武馆训练过后,晚上回来品一杯西湖龙井,更一篇博客,一来帮助需要之人,二来加深自己的理解。下面就说关于在IDA中Android so的动态调试的问题以及在so的三个层次下断点的操作。问题篇:1.动态调试的作用以及与我们常说的脱壳区别之处?2.IDA的下断点调试的原理?3.有无反调试的步骤区别?以及原理?4.反调试与反附加的区别?5.I...原创 2016-10-05 19:48:38 · 40749 阅读 · 17 评论 -
Android SO文件保护加固——混淆篇(一)
继上次基于源码级别和二进制级别的SO文件的核心函数保护后,没看的网友可以点击:点击打开链接;这篇是针对我们在JNI开发过程中利用javah生成本地层对应的函数名类似于java_com_XX这种形式,很容易被逆向者在逆向so的时候在IDA的Exports列表中找到这样一个问题,我们的目的就是让IDA在反汇编过程显示不出来,以及就算找到函数实现也是乱码的形式接下来开始搞;有问题欢迎大家批评指正和讨论。原创 2016-09-26 11:18:57 · 31341 阅读 · 11 评论 -
Android SO文件保护OLLVM混淆加固——混淆篇(二)
国庆假期,别人都玩的玩,回家的回家,我索性无聊,品一杯香茶,记一篇博客,望能够对这方面的网友有所帮助。。。。。*************************************************************************记上一次对JNI接口函数的混淆有一段时间了,没看的网友可以看这里:点击打开链接;今天我们分析最近在移动端比较火的源码级别的编译混淆OLLVM,除了各大论坛的压轴题用到了此技术,包括各移动加固厂商也相继用到了此技术,说明此技术的重要性,下面开搞。。原创 2016-10-03 19:33:30 · 11682 阅读 · 3 评论 -
顶象加固分析和一点还原
一:首先dump出核心函数的so参考:https://bbs.pediy.com/thread-221270.htm可以从上面看到的是内存地址是不连续的,并且走到.init_array处以后就会消失code区域。可能是中间存在一些解壳的数据或者是IDA没有读出来。先不管这些,往应用级函数走。在应用级函数oncreate处按照在.init处的libx3g.so在内原创 2017-11-29 17:23:47 · 8147 阅读 · 4 评论 -
Dex的优化验证和类加载
参考:1.Android源码2.http://www.wjdiankong.cn/android%E4%B8%ADapk%E5%8A%A0%E5%9B%BA%E5%AE%8C%E5%96%84%E7%AF%87%E4%B9%8B%E5%86%85%E5%AD%98%E5%8A%A0%E8%BD%BDdex%E6%96%B9%E6%A1%88%E5%AE%9E%E7%8E%B0%E5%8E%原创 2017-12-31 16:52:46 · 1119 阅读 · 0 评论 -
根据”so劫持”过360加固详细分析
参考:https://bbs.pediy.com/thread-223699.htmhttp://blog.youkuaiyun.com/luoshengyang/article/details/8923483一:思路分析: 一个经过360加固的APK的运行过程应该为图中左边所示,在以上这种so劫持的思路为:第一步通过hook loadlibrary方法先加载自己的so,即:libh原创 2018-01-06 10:33:59 · 4067 阅读 · 4 评论 -
顶象企业版加固逆向分析
首先看一下顶象对于这种自身的虚拟源码保护是怎么说明的? 结合免费版分析可以猜测是这样的加固流程:1. 首先进行免费版转换把dex中对应的方法通过JNI反射转换为cpp文件(当然这里企业版比免费版转换的方法要多,免费版中的内部类MainActivity$1就没有进行转换);2. 然后就是独有工具链的编译,猜测很有可能是基于LLVM的自定义编译;3. 进行虚拟化保护...原创 2018-03-03 16:36:08 · 3497 阅读 · 0 评论 -
JW加固简单分析
一、 猜想加固的几维Demo,这里简单的分析一下它的强度,Java2c主要是借助于JNI反射技术对java层的方法全部的反射为本地层,增大分析难度。Java2cpp以后再借助于编译混淆或者编译虚拟的技术来增大分析难度。接着对编译以后的So文件进行加壳保护。这里主要是对demo中的onCreate方法进行了java2c,并且对于保护以后的so没有做任何的破坏、加壳保护,因此直接在IDA中打原创 2018-04-12 16:21:31 · 1274 阅读 · 1 评论 -
突破Android P(Preview 1)对调用隐藏API限制的方法
原文:https://juejin.im/post/5acf3be5f265da23a40534f4?from=timeline感谢原作者的idea,加固又开始愉快的玩耍了!特别是如今流行的java2c。一.概要本文基于对Android P(Preview 1)的源码分析,实现了三种绕过对调用隐藏API限制的方法,有效性均已得到验证,能够成功调用系统隐藏API。二.限制原理首先转载 2018-04-12 23:03:04 · 712 阅读 · 0 评论 -
小密盾简单逆向分析
前几天出了个小密盾,针对插件加固的,好奇的简单分析了一下,写了个样本简单的加固了一下,以下是分析过程。小密盾简单逆向分析一:静态分析 静态分析发现,根据这些函数参数很多函数进行了加密,并且新加了几个节,接下来动态分析。二:动态分析由于JNI_Onload经过了加密,因此可以猜测在.init/.init_array处经过了加密处理,不需要仔细分析这些加密算法,在JNI_...原创 2018-05-21 21:06:52 · 5017 阅读 · 2 评论 -
编译与代码安全之认识(一)
好久没有更新博客了,今天周末索性喝杯茶,静下心来把最近一段时间自己所理解和思考的关于软件代码保护的东西写下来。帮助所需之人,多有不对,望批评指正。正确的运用编译知识可以在我们代码保护中达到事半功倍的效果。 一提到编译,大家很多人觉得不就是词法分析、语法分析然后产生一个针对特定机器的文件。感觉这是一个很成熟,有规则,本身就是很有章法的东西,好像不需要我们本身去理会...原创 2018-11-04 13:45:13 · 1078 阅读 · 0 评论 -
几维so文件加壳初步分析
这是早期分析的一点点几维中的so文件加壳,没分析完,好像也现在很少看到他们用了,也没时间看,以下是之前分析的:一、分析篇:首先看到核心的函数全部变成了以下这种形式:So加壳的话,首先定位到.init_proc这个导出函数中,去分析:通过静态分析可知道:加固完以后几个So文件的主要功能如下:libkwscr.so:主要是程序crash记录函数;libkwscmm.so:加...原创 2018-11-04 19:34:26 · 4536 阅读 · 3 评论 -
几维KVM虚拟机分析(一)
由于虚拟机运行的runtime,几维混淆的实在是太凶了,可能是怕被人分析吧!在关键函数中出现有个cmp R0,5,感觉可能会影响后面程序的运行流程,因此关注运行的第五次结果。大量的伪造控制流使得分析起来的难度很大;由于控制流中大量的这种操作,简直分析起来太美妙。 接下来不知道做了什么操作:F7进去如下:这个函数为真正的Hand...原创 2018-12-23 13:11:11 · 649 阅读 · 0 评论 -
IDA出现不能进行F5,”F1EC:positive sp value has been found!!!!!“的解决方法
IDA出现不能进行F5,”F1EC:positive sp value has been found!!!!!“的解决方法一、在用IDA分析So文件,F5的时候经常会出现以上这种情况,这个时候可能是以下导致的:1.栈sp不平衡:比如360加固中的libjiagu.so中的虚拟机解释函数。首先打开栈指针选项,在options--------->General--------...原创 2018-12-24 20:36:22 · 8508 阅读 · 0 评论 -
用Golang来保护Java程序
#反编译带来的困扰对于一个开发给自己组织内部用的程序,我们是不怎么需要考虑程序被反编译的事情的,但是对于商业软件来说,这又显得有必要,毕竟国内软件行业的竞争还是非常的激烈,大家可以把竞争对手的程序搞过来反编译一下(至于怎么拿别人的程序我相信大家都已经很老手了),轻易的知道对手基于什么软件来做,或者能够比较容易知道实现原理,然后。。抄抄抄,换个名字,完事,一个全新的产品就出来了。对于 Java ...转载 2019-01-06 21:40:12 · 2473 阅读 · 6 评论 -
聚安全libsgmain.so、libsgavmp.so初步分析
版本:libsgmainso-5.4.2010.so一、静态分析:1.IDA分析:Binary data 16 is incorrect, maximum possible value is 0. Do you want to continue with the new value?经过简单的修复以后可以打开:发现有这种JNI API函数的导出;并且别的导出函数名...原创 2019-02-15 15:28:52 · 9818 阅读 · 7 评论 -
腾讯御安全加固保护简单分析
腾讯本身除了乐固安全以外还有一个叫御安全:官网:https://yaq.qq.com/强度分析:加固前后文件结构对比:字符串完全的暴漏,比较容易的进行定位: 从以上加固可以看出属于二代加固。...原创 2019-02-20 10:22:38 · 7549 阅读 · 0 评论 -
Android反调试方法总结(二)
反调试防御网机制一、介绍:反调试对于逆向安全工作者再熟悉不过了,一般是配合壳的形式出现,我认为反调试在某些时候还是能起到一定作用的,特别是在Android应用程序的逆向过程中,由于其一Android动态调试建立过程相对于其他比较麻烦点,其二即使在通过一定的脚本可以过掉调试一半的前面的反调试,但是如果这种反调试本身是随机的且随着样本的不同是呈现多样性的,那么这种就起不到好的效果了。...原创 2019-04-12 09:48:14 · 2852 阅读 · 0 评论 -
Frida 学习(一)
Frida一个轻量级的HOOK 注入神器,能够满足我们对一切搞事情的要求:无论是内核插桩,还有到上层的HOOK ,以及演变的脱壳等等都可以使用,佩服国外这些大佬。在去看原理的时候,首先先体验一下效果:一.安装:1.PC端:保障自己电脑上Python以及pip环境;安装frida 模块以及frida-tools模块pip install fridapip install...原创 2019-04-13 17:26:17 · 4260 阅读 · 2 评论 -
Android中常见的HOOK框架收集
Android中常见的各类Java HOOK框架,先收集起来,因为好多的基础原理差不多,后面有时间会归类以及对于原理进行重点分析。1.Xposed:Java层的HOOK框架,由于要修改Zgote进程,需要Root;2.CydiaSubstrator:本地层的HOOK框架,本质上是一个inline Hook3.dexposed框架:随着阿里的热修复的框架:原理上跟Xpo...原创 2019-04-27 19:23:31 · 17329 阅读 · 1 评论 -
编译与代码安全之认识(二):Source2Source源码混淆方法
一、说明: 针对源码混淆其实在代码保护中应用很多,大部分是应用在像JS这种脚本语言中,因为很多时候JS是以源码的形式出现,网上有很多关于JS保护的工具,比较出名的是JSugly和javascript obfuscator。当然最近发现了一个做JS VM保护的,https://www.v2ex.com/t/552383#reply33,很感兴趣,之前研究过这种...原创 2019-05-15 20:21:36 · 1947 阅读 · 1 评论 -
爱加密so VMP浅析
一、静态分析:如图是函数入口和vmp的整体器部分:可以大致看到整个的dispatcher部分如下所示:虚拟数据表如下所示,根据这些去调用对应的Handler;二、动态分析:这里分析简单列出几个比较重要的handler:case 16:对于参数赋值操作;case 76: 得到函数头信息;case 77: 也是重点函数,从“mov pc r1”可以看出...原创 2019-07-28 13:02:57 · 4608 阅读 · 0 评论 -
nshc加固浅析
一、dex保护:1.1反回编译:按照上面的提示找到对应的位置,把那个函数删掉。由于这个函数别的地方也没有调用,应该不影响结果。总结:可以把这个函数改造。构造一个能够去调用它参与逻辑的,增强反回编的难度。1.2.对于dex中重要信息字符串的解密:反编译的时候看到大量的这种加密字符串解决办法:由于这个解密函数是java层面的,且不是很复杂。因...原创 2019-08-28 19:56:55 · 856 阅读 · 0 评论 -
Android 加载ELF可执行文件
Android通过调用shell脚本加载执行ELF可执行文件,废话不多说。附件是一个加载执行“Hello World”可执行文件的Demo。后期可以通过调用一个脱壳机的可执行文件进行脱壳。原创 2017-05-08 12:23:14 · 2884 阅读 · 0 评论 -
NDK开发入门篇
自从google引入了JNI技术,不论是android正向开发还是逆向,对于本地层更加的关注,因为越来越多的重要代码都会放到本地层,这次就简单的介绍一下一个入门的NDK开发。首先对于NDK的下载以及环境变量配置网上都有,也很简单,自己百度一下就ok了。下面进入正题:NDK开发步骤:1. 新建一个Android工程:2. 新建一个.java文件原创 2016-05-03 19:39:07 · 1131 阅读 · 1 评论 -
ELF Linker学习篇(四)——初始化
在上几篇中总结了ELF的加载、链接之后,最后一篇我们继续关于初始化的过程。正文篇:首先我们看到源码为:soinfo* do_dlopen(const char* name, int flags) { if ((flags & ~(RTLD_NOW|RTLD_LAZY|RTLD_LOCAL|RTLD_GLOBAL)) != 0) { DL_ERR("invalid flags原创 2016-11-07 08:57:30 · 2014 阅读 · 0 评论 -
对于Android代码保护过后软件的评估
前言篇:我们知道对于一篇论文来说,评估是很重要的,即使保护再好的方法,如果评估不到位总会显得那么苍白无力,这几天偶然看到一篇论文,关于一篇Android传统代码保护的,关于论文具体内容不多说了,价值含量一般般吧,但是对于文章最后的评估还是很赞的,在次小记,一来帮助需要之人,二来有利于自己理解。内容篇:两部分的评估:第一部分:成本评估;第二部分:安全评估;似乎大部分的评估都是原创 2016-10-19 10:24:21 · 1261 阅读 · 0 评论 -
Android Studio JNI 的静动态注册开发以及C/C++ JNIEnv的理解
看到这个题目似乎有点啰嗦,分两块:一是关于JNI开发的静动态注册,因为涉及到一点逆向上的安全问题,因此有必要进行细细的琢磨和加以区别;二是在关于JNI的开发过程中对于用.c与.cpp不同文件时注意的一系列问题和原理。由于也没有太多的原理可讲,我们直接拿例子说事,直接从实现篇说起比较好,这块我不会选择像网上那些简单的输出字符串的这种例子,因为起不到一定的理解作用。实现篇:Andr原创 2016-09-30 10:10:12 · 2039 阅读 · 0 评论 -
Android 逆向调用so(一)
今天读一篇论文中提到“盗版应用可在未读取SO库实现源码的情况下,对其中的方法进行调用”,既然这样今天就小小的实现一发,不知道怎么取名?就索性暂时取名为“Android 逆向调用so(一)”,可能到后来脑洞一开实现一个进阶篇,这谁说的来呢是吧原理篇:前提:先写一个简单的Demo,比如实现一个最简单针对IDA反附加的反调试,在移动端这一块反调试还算不是很多吧相对PC,我到后面肯定会专门写一原创 2016-09-28 19:38:25 · 9357 阅读 · 4 评论 -
那些年使用IDA的事——防止F5错误优化
我们做逆向的知道IDA这一神器,但是神器也会犯错,使用神器进阶的时候这时候就需要人工来辅助,下面就IDA F5中一个问题做记录。。问题篇:什么问题呢?我们就拿鬼哥之前那个等级破解那个样本,我们放在IDA中看核心.so文件,看汇编代码:然而用F5看到的伪C代码是:显然是不对的,没有对语句分析出来,接下来我们就系问题解决。。原理篇:由于Java_com_gg原创 2016-10-04 11:55:48 · 11291 阅读 · 0 评论 -
ELF Linker学习篇(一)关于ELF文件装载进内存
学习Linker也有一段时日了,但是还是不太清楚,对于Linker的重要性不多说,无论是对于加固还是对于脱壳都有至关重要的作用,我们作为一名安全爱好者,不需要细细了解源码的每句意思,但是大致的框架理清还是很有必要的,接下来几篇围绕这这个进行展开研究,一来帮助需要之人,二来加深自己的理解。整体框架篇: 每每研究这个的时候,我都特别喜欢拿一张图来进行看:可以看到这里面的重点函数为:原创 2016-10-31 20:38:44 · 4974 阅读 · 0 评论 -
ELF Linker学习篇(二)关于分配soinfo结构
继续上一篇说到的,在load_library()函数中,在so文件加载完以后,接着就会调用soinfo_alloc函数为so分配soinfo,Linker 为 每个 SO 维护了一个soinfo结构,调用 dlopen时,返回的句柄其实就是一个指向该 SO 的 soinfo 指针。soinfo 保存了 SO 加载链接以及运行期间所需的各类信息.接下来就看soinfo_alloc这个函数:sta原创 2016-11-01 09:31:33 · 4162 阅读 · 1 评论 -
Android逆向中常用的ARM汇编指令基础知识
一 ARM寄存器1.通用寄存器1).未分组寄存器:R0~R72).分组寄存器:R8~812R13:SP,常用作堆栈指针,始终指向堆栈的顶部,当一个数据(32位)推入堆栈时,SP(R13的值减4)向下浮动指向下一个地址,即新的栈顶,当数据从堆栈中弹出时,SP(R13的值加4)向上浮动指向新的栈顶。R14:连接寄存器(LR),当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份,其他情况下,R14用作通用寄存器。R15:程序计数器(PC):用于控制程序中指令的执行顺序。正常运行转载 2017-03-20 15:02:20 · 3885 阅读 · 0 评论 -
Nexus 5X 刷 Android 7.0
针对Nexus 5x刷7.0:7.0固件官方:https://pan.baidu.com/s/1cMICGm步骤:1.1 下载adb工具并解压 https://pan.baidu.com/s/1bK08CQ1.2 打开文件夹,将 adb.exe、fastboot.exe 复制到 c:/windows/system32下1.3 再将 adb.exe、AdbWinApi.dll、A原创 2017-03-30 20:50:15 · 3539 阅读 · 0 评论 -
怎么让adb shell直接进入root?
怎么样让adb shell 直接进入root???转载 2016-05-06 21:05:29 · 8311 阅读 · 6 评论 -
通过Android JNI编程来学习三大结构的ARM汇编
有一段时间不更新了,不得不佩服人的惰性的强大,最怕水平底还比较懒得人,譬如我,哎,废话不说了,开始学习目标:这篇文章主要是学习ARM汇编,通过JNI开发技术,编译出对应的SO文件,然后通过IDA分析,既能够稳固JNI开发,也能够学习ARM汇编:一.首先第一个for循环结构:1.首先按照之前一篇JNI开发技术,写一个简答的应用,把关键点代码段写在JNI里面,这里就是把for循环这个写原创 2016-05-18 16:43:50 · 2272 阅读 · 0 评论 -
Android ARM指令比较难以理解问题总结
我们知道在Android逆向中,最后的实质都会回归到对于so文件的分析无论是静态还是动态分析都会看到一堆的ARM返汇编的指令,今天就专门对这个里面遇到的一些不好理解的点进行总结,一来帮助需要之人,二来加深自己的理解,从而夯实基础。这些东西很枯燥,我不会讲那些长篇大论,每个点要结合实际例子来展开,这样便于理解。一、 ARM中的重要指令:1.跳转指令:在 ARM 中有两种方式可以实原创 2017-07-04 10:24:52 · 1307 阅读 · 2 评论 -
乐固加壳的原理分析
乐固壳的大致运行流程: 具体的加固流程分析: 总结: 总的来说乐固还停留在二代不落地方式的加固水平,主要还是通过参考在不同Android源码模式下,对一些关键的系统函数的重写,比如说对于dex字节的加载函数,Dalvik下的openDexFile和ART下的OpenFile函数进行重写,加上一些原创 2017-07-22 14:57:25 · 3768 阅读 · 1 评论 -
梆梆加固原理分析
壳的运行流程:加固流程分析:总结篇:梆梆加固将整个Dex文件加密,并重写了原来的Application类,并将程序的入口重定向到“Loader”--secData0.jar上。系统会在初始化的时候执行loader内的stubApplication,subApplication完成对原始Dex文件(Playload)的解密并动态加载,然后执行原Application类原创 2017-07-26 07:32:02 · 9370 阅读 · 2 评论
分享