![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android逆向安全
文章平均质量分 87
不知世事
日拱一卒,功不唐捐。
展开
-
Virbox深思考盾So文件保护
第一:入口点:`第二:执行完对应的init_array以后进入linker执行第三:解密出对应的字节码:可能其中会有混淆的操作,没发现,猜测也是跟二进制的操作相关,处理好混淆前后的对应关系。总结:1.没有在init_array处完全的解密完;2.解密函数静态不好发现,难以进行静态解密;3.从正向的角度怎么实现?...原创 2020-11-19 19:39:22 · 902 阅读 · 0 评论 -
编译与代码安全之认识(一)
好久没有更新博客了,今天周末索性喝杯茶,静下心来把最近一段时间自己所理解和思考的关于软件代码保护的东西写下来。帮助所需之人,多有不对,望批评指正。正确的运用编译知识可以在我们代码保护中达到事半功倍的效果。 一提到编译,大家很多人觉得不就是词法分析、语法分析然后产生一个针对特定机器的文件。感觉这是一个很成熟,有规则,本身就是很有章法的东西,好像不需要我们本身去理会...原创 2018-11-04 13:45:13 · 907 阅读 · 0 评论 -
小密盾简单逆向分析
前几天出了个小密盾,针对插件加固的,好奇的简单分析了一下,写了个样本简单的加固了一下,以下是分析过程。小密盾简单逆向分析一:静态分析 静态分析发现,根据这些函数参数很多函数进行了加密,并且新加了几个节,接下来动态分析。二:动态分析由于JNI_Onload经过了加密,因此可以猜测在.init/.init_array处经过了加密处理,不需要仔细分析这些加密算法,在JNI_...原创 2018-05-21 21:06:52 · 3830 阅读 · 2 评论 -
突破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 · 619 阅读 · 0 评论 -
JW加固简单分析
一、 猜想加固的几维Demo,这里简单的分析一下它的强度,Java2c主要是借助于JNI反射技术对java层的方法全部的反射为本地层,增大分析难度。Java2cpp以后再借助于编译混淆或者编译虚拟的技术来增大分析难度。接着对编译以后的So文件进行加壳保护。这里主要是对demo中的onCreate方法进行了java2c,并且对于保护以后的so没有做任何的破坏、加壳保护,因此直接在IDA中打原创 2018-04-12 16:21:31 · 1119 阅读 · 1 评论 -
顶象企业版加固逆向分析
首先看一下顶象对于这种自身的虚拟源码保护是怎么说明的? 结合免费版分析可以猜测是这样的加固流程:1. 首先进行免费版转换把dex中对应的方法通过JNI反射转换为cpp文件(当然这里企业版比免费版转换的方法要多,免费版中的内部类MainActivity$1就没有进行转换);2. 然后就是独有工具链的编译,猜测很有可能是基于LLVM的自定义编译;3. 进行虚拟化保护...原创 2018-03-03 16:36:08 · 2937 阅读 · 0 评论 -
根据”so劫持”过360加固详细分析
参考:https://bbs.pediy.com/thread-223699.htmhttp://blog.csdn.net/luoshengyang/article/details/8923483一:思路分析: 一个经过360加固的APK的运行过程应该为图中左边所示,在以上这种so劫持的思路为:第一步通过hook loadlibrary方法先加载自己的so,即:libh原创 2018-01-06 10:33:59 · 3460 阅读 · 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 · 918 阅读 · 0 评论 -
顶象加固分析和一点还原
一:首先dump出核心函数的so参考:https://bbs.pediy.com/thread-221270.htm可以从上面看到的是内存地址是不连续的,并且走到.init_array处以后就会消失code区域。可能是中间存在一些解壳的数据或者是IDA没有读出来。先不管这些,往应用级函数走。在应用级函数oncreate处按照在.init处的libx3g.so在内原创 2017-11-29 17:23:47 · 7720 阅读 · 4 评论 -
Android SO文件保护OLLVM混淆加固——混淆篇(二)
国庆假期,别人都玩的玩,回家的回家,我索性无聊,品一杯香茶,记一篇博客,望能够对这方面的网友有所帮助。。。。。*************************************************************************记上一次对JNI接口函数的混淆有一段时间了,没看的网友可以看这里:点击打开链接;今天我们分析最近在移动端比较火的源码级别的编译混淆OLLVM,除了各大论坛的压轴题用到了此技术,包括各移动加固厂商也相继用到了此技术,说明此技术的重要性,下面开搞。。原创 2016-10-03 19:33:30 · 11230 阅读 · 3 评论 -
Android IDA So的动态调试大法
今天已是国庆的第五天,白天去武馆训练过后,晚上回来品一杯西湖龙井,更一篇博客,一来帮助需要之人,二来加深自己的理解。下面就说关于在IDA中Android so的动态调试的问题以及在so的三个层次下断点的操作。问题篇:1.动态调试的作用以及与我们常说的脱壳区别之处?2.IDA的下断点调试的原理?3.有无反调试的步骤区别?以及原理?4.反调试与反附加的区别?5.I...原创 2016-10-05 19:48:38 · 39575 阅读 · 17 评论 -
几维so文件加壳初步分析
这是早期分析的一点点几维中的so文件加壳,没分析完,好像也现在很少看到他们用了,也没时间看,以下是之前分析的:一、分析篇:首先看到核心的函数全部变成了以下这种形式:So加壳的话,首先定位到.init_proc这个导出函数中,去分析:通过静态分析可知道:加固完以后几个So文件的主要功能如下:libkwscr.so:主要是程序crash记录函数;libkwscmm.so:加...原创 2018-11-04 19:34:26 · 4116 阅读 · 3 评论 -
几维KVM虚拟机分析(一)
由于虚拟机运行的runtime,几维混淆的实在是太凶了,可能是怕被人分析吧!在关键函数中出现有个cmp R0,5,感觉可能会影响后面程序的运行流程,因此关注运行的第五次结果。大量的伪造控制流使得分析起来的难度很大;由于控制流中大量的这种操作,简直分析起来太美妙。 接下来不知道做了什么操作:F7进去如下:这个函数为真正的Hand...原创 2018-12-23 13:11:11 · 522 阅读 · 0 评论 -
nshc加固浅析
一、dex保护:1.1反回编译:按照上面的提示找到对应的位置,把那个函数删掉。由于这个函数别的地方也没有调用,应该不影响结果。总结:可以把这个函数改造。构造一个能够去调用它参与逻辑的,增强反回编的难度。1.2.对于dex中重要信息字符串的解密:反编译的时候看到大量的这种加密字符串解决办法:由于这个解密函数是java层面的,且不是很复杂。因...原创 2019-08-28 19:56:55 · 626 阅读 · 0 评论 -
爱加密so VMP浅析
一、静态分析:如图是函数入口和vmp的整体器部分:可以大致看到整个的dispatcher部分如下所示:虚拟数据表如下所示,根据这些去调用对应的Handler;二、动态分析:这里分析简单列出几个比较重要的handler:case 16:对于参数赋值操作;case 76: 得到函数头信息;case 77: 也是重点函数,从“mov pc r1”可以看出...原创 2019-07-28 13:02:57 · 3617 阅读 · 0 评论 -
编译与代码安全之认识(二):Source2Source源码混淆方法
一、说明: 针对源码混淆其实在代码保护中应用很多,大部分是应用在像JS这种脚本语言中,因为很多时候JS是以源码的形式出现,网上有很多关于JS保护的工具,比较出名的是JSugly和javascript obfuscator。当然最近发现了一个做JS VM保护的,https://www.v2ex.com/t/552383#reply33,很感兴趣,之前研究过这种...原创 2019-05-15 20:21:36 · 1506 阅读 · 1 评论 -
Android中常见的HOOK框架收集
Android中常见的各类Java HOOK框架,先收集起来,因为好多的基础原理差不多,后面有时间会归类以及对于原理进行重点分析。1.Xposed:Java层的HOOK框架,由于要修改Zgote进程,需要Root;2.CydiaSubstrator:本地层的HOOK框架,本质上是一个inline Hook3.dexposed框架:随着阿里的热修复的框架:原理上跟Xpo...原创 2019-04-27 19:23:31 · 16132 阅读 · 1 评论 -
Frida 学习(一)
Frida一个轻量级的HOOK 注入神器,能够满足我们对一切搞事情的要求:无论是内核插桩,还有到上层的HOOK ,以及演变的脱壳等等都可以使用,佩服国外这些大佬。在去看原理的时候,首先先体验一下效果:一.安装:1.PC端:保障自己电脑上Python以及pip环境;安装frida 模块以及frida-tools模块pip install fridapip install...原创 2019-04-13 17:26:17 · 3937 阅读 · 2 评论 -
Android反调试方法总结(二)
反调试防御网机制一、介绍:反调试对于逆向安全工作者再熟悉不过了,一般是配合壳的形式出现,我认为反调试在某些时候还是能起到一定作用的,特别是在Android应用程序的逆向过程中,由于其一Android动态调试建立过程相对于其他比较麻烦点,其二即使在通过一定的脚本可以过掉调试一半的前面的反调试,但是如果这种反调试本身是随机的且随着样本的不同是呈现多样性的,那么这种就起不到好的效果了。...原创 2019-04-12 09:48:14 · 2661 阅读 · 0 评论 -
腾讯御安全加固保护简单分析
腾讯本身除了乐固安全以外还有一个叫御安全:官网:https://yaq.qq.com/强度分析:加固前后文件结构对比:字符串完全的暴漏,比较容易的进行定位: 从以上加固可以看出属于二代加固。...原创 2019-02-20 10:22:38 · 6227 阅读 · 0 评论 -
聚安全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 · 8554 阅读 · 7 评论 -
用Golang来保护Java程序
#反编译带来的困扰对于一个开发给自己组织内部用的程序,我们是不怎么需要考虑程序被反编译的事情的,但是对于商业软件来说,这又显得有必要,毕竟国内软件行业的竞争还是非常的激烈,大家可以把竞争对手的程序搞过来反编译一下(至于怎么拿别人的程序我相信大家都已经很老手了),轻易的知道对手基于什么软件来做,或者能够比较容易知道实现原理,然后。。抄抄抄,换个名字,完事,一个全新的产品就出来了。对于 Java ...转载 2019-01-06 21:40:12 · 2101 阅读 · 6 评论 -
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 · 6619 阅读 · 0 评论 -
Android SO文件保护加固——混淆篇(一)
继上次基于源码级别和二进制级别的SO文件的核心函数保护后,没看的网友可以点击:点击打开链接;这篇是针对我们在JNI开发过程中利用javah生成本地层对应的函数名类似于java_com_XX这种形式,很容易被逆向者在逆向so的时候在IDA的Exports列表中找到这样一个问题,我们的目的就是让IDA在反汇编过程显示不出来,以及就算找到函数实现也是乱码的形式接下来开始搞;有问题欢迎大家批评指正和讨论。原创 2016-09-26 11:18:57 · 28290 阅读 · 11 评论 -
Android SO文件保护加固——加密篇(二)
已经很长一段时间没更新了,一方面本人技术一般,不知道能给技术网友分享点什么有价值的东西,一方面,有时候实验室事比较多,时间长了就分享的意识就单薄了,今天接着前面那个so文件重要函数段加密,接着更,接下来开始书写。一、原理篇 在很多时候我们对一个.so文件中重要的函数段加密时,是无法拿到源码的,当然并不排除可能在以后随着Android开发与安全结合,出现逆向开发者,在开发的时候就进原创 2016-09-23 19:58:51 · 11863 阅读 · 4 评论 -
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 · 3563 阅读 · 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 · 3536 阅读 · 1 评论 -
ELF Linker学习篇(一)关于ELF文件装载进内存
学习Linker也有一段时日了,但是还是不太清楚,对于Linker的重要性不多说,无论是对于加固还是对于脱壳都有至关重要的作用,我们作为一名安全爱好者,不需要细细了解源码的每句意思,但是大致的框架理清还是很有必要的,接下来几篇围绕这这个进行展开研究,一来帮助需要之人,二来加深自己的理解。整体框架篇: 每每研究这个的时候,我都特别喜欢拿一张图来进行看:可以看到这里面的重点函数为:原创 2016-10-31 20:38:44 · 4561 阅读 · 0 评论 -
那些年使用IDA的事——防止F5错误优化
我们做逆向的知道IDA这一神器,但是神器也会犯错,使用神器进阶的时候这时候就需要人工来辅助,下面就IDA F5中一个问题做记录。。问题篇:什么问题呢?我们就拿鬼哥之前那个等级破解那个样本,我们放在IDA中看核心.so文件,看汇编代码:然而用F5看到的伪C代码是:显然是不对的,没有对语句分析出来,接下来我们就系问题解决。。原理篇:由于Java_com_gg原创 2016-10-04 11:55:48 · 10554 阅读 · 0 评论 -
Android 逆向调用so(一)
今天读一篇论文中提到“盗版应用可在未读取SO库实现源码的情况下,对其中的方法进行调用”,既然这样今天就小小的实现一发,不知道怎么取名?就索性暂时取名为“Android 逆向调用so(一)”,可能到后来脑洞一开实现一个进阶篇,这谁说的来呢是吧原理篇:前提:先写一个简单的Demo,比如实现一个最简单针对IDA反附加的反调试,在移动端这一块反调试还算不是很多吧相对PC,我到后面肯定会专门写一原创 2016-09-28 19:38:25 · 9093 阅读 · 4 评论 -
Android Studio JNI 的静动态注册开发以及C/C++ JNIEnv的理解
看到这个题目似乎有点啰嗦,分两块:一是关于JNI开发的静动态注册,因为涉及到一点逆向上的安全问题,因此有必要进行细细的琢磨和加以区别;二是在关于JNI的开发过程中对于用.c与.cpp不同文件时注意的一系列问题和原理。由于也没有太多的原理可讲,我们直接拿例子说事,直接从实现篇说起比较好,这块我不会选择像网上那些简单的输出字符串的这种例子,因为起不到一定的理解作用。实现篇:Andr原创 2016-09-30 10:10:12 · 1907 阅读 · 0 评论 -
对于Android代码保护过后软件的评估
前言篇:我们知道对于一篇论文来说,评估是很重要的,即使保护再好的方法,如果评估不到位总会显得那么苍白无力,这几天偶然看到一篇论文,关于一篇Android传统代码保护的,关于论文具体内容不多说了,价值含量一般般吧,但是对于文章最后的评估还是很赞的,在次小记,一来帮助需要之人,二来有利于自己理解。内容篇:两部分的评估:第一部分:成本评估;第二部分:安全评估;似乎大部分的评估都是原创 2016-10-19 10:24:21 · 1132 阅读 · 0 评论 -
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 · 1822 阅读 · 0 评论 -
NDK开发入门篇
自从google引入了JNI技术,不论是android正向开发还是逆向,对于本地层更加的关注,因为越来越多的重要代码都会放到本地层,这次就简单的介绍一下一个入门的NDK开发。首先对于NDK的下载以及环境变量配置网上都有,也很简单,自己百度一下就ok了。下面进入正题:NDK开发步骤:1. 新建一个Android工程:2. 新建一个.java文件原创 2016-05-03 19:39:07 · 1031 阅读 · 1 评论 -
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 · 3292 阅读 · 0 评论 -
怎么让adb shell直接进入root?
怎么样让adb shell 直接进入root???转载 2016-05-06 21:05:29 · 8128 阅读 · 6 评论 -
Android 加载ELF可执行文件
Android通过调用shell脚本加载执行ELF可执行文件,废话不多说。附件是一个加载执行“Hello World”可执行文件的Demo。后期可以通过调用一个脱壳机的可执行文件进行脱壳。原创 2017-05-08 12:23:14 · 2685 阅读 · 0 评论 -
Android SO文件保护加固——加密篇(一)
这篇是一系列的关于SO文件保护的自我理解,SO文件保护分为加固,混淆以及最近炒的比较火的虚拟机,由于本人菜鸟,无力分析虚拟机,我相信以后会有机会。。。加固就是将真正的so代码保护起来,不让攻击者那么轻易的发现,至于混淆,由于ART机制的介入,使得O-LLVM越来越火,这以后有机会再分析,这次主要是基于有源码的so文件保护,下次介绍无源码的so文件保护,废话不多说,开搞。 在这之前首先对e原创 2016-05-25 14:42:17 · 27209 阅读 · 19 评论 -
Android So动态调试之反jdb附加的解决大法
今天国庆的第六天,西安淅淅沥沥小雨下个不停,索性卧在床上不如品一杯西湖龙井,更新一篇博客,一来帮助需要之人;二来加深自己的理解。问题篇:在上一篇中讲到了关于Android so的动态调试,没看的可以点这里:点击打开链接;我自认为写的还是挺全的,在上文中我们说到关于最后一步jdb附加调试时,很多时候都会出现附加不上的问题,使人很闹心。。。于是这一篇就是专门关于这个问题进行展开的。解决这个原创 2016-10-06 16:23:14 · 10046 阅读 · 4 评论 -
Android反调试方法总结以及源码实现之检测篇(一)
好久没有更新博客了,主要是忙项目的事,今日总结一下在Android中常遇到的反调试方法,一来帮助需要之人,二来加深自己的理解。反调试在代码保护中扮演着很重要的角色,虽然不能完全阻止攻击者,但是还是能加大攻击者的时间成本,一般与加壳结合使用,核心还是加壳部分。反调试可以分为两类:一类是检测,另一类是攻击,前者是去想各种办法去检测程序是否在被调试,如果正在被调试的话做出一些“反”的举措,比原创 2017-03-09 11:37:28 · 23789 阅读 · 12 评论