![](https://img-blog.csdnimg.cn/20190226122804827.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android 代码保护与逆向
文章平均质量分 92
分析分享最新的关于代码保护的机制,享受在矛与盾的世界中。。。
不知世事
日拱一卒,功不唐捐。
展开
-
几维KVM虚拟机分析(一)
由于虚拟机运行的runtime,几维混淆的实在是太凶了,可能是怕被人分析吧!在关键函数中出现有个cmp R0,5,感觉可能会影响后面程序的运行流程,因此关注运行的第五次结果。大量的伪造控制流使得分析起来的难度很大;由于控制流中大量的这种操作,简直分析起来太美妙。 接下来不知道做了什么操作:F7进去如下:这个函数为真正的Hand...原创 2018-12-23 13:11:11 · 522 阅读 · 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 评论 -
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 评论 -
ELF Linker学习篇(一)关于ELF文件装载进内存
学习Linker也有一段时日了,但是还是不太清楚,对于Linker的重要性不多说,无论是对于加固还是对于脱壳都有至关重要的作用,我们作为一名安全爱好者,不需要细细了解源码的每句意思,但是大致的框架理清还是很有必要的,接下来几篇围绕这这个进行展开研究,一来帮助需要之人,二来加深自己的理解。整体框架篇: 每每研究这个的时候,我都特别喜欢拿一张图来进行看:可以看到这里面的重点函数为:原创 2016-10-31 20:38:44 · 4561 阅读 · 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 评论 -
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 评论 -
几维so文件加壳初步分析
这是早期分析的一点点几维中的so文件加壳,没分析完,好像也现在很少看到他们用了,也没时间看,以下是之前分析的:一、分析篇:首先看到核心的函数全部变成了以下这种形式:So加壳的话,首先定位到.init_proc这个导出函数中,去分析:通过静态分析可知道:加固完以后几个So文件的主要功能如下:libkwscr.so:主要是程序crash记录函数;libkwscmm.so:加...原创 2018-11-04 19:34:26 · 4116 阅读 · 3 评论 -
编译与代码安全之认识(一)
好久没有更新博客了,今天周末索性喝杯茶,静下心来把最近一段时间自己所理解和思考的关于软件代码保护的东西写下来。帮助所需之人,多有不对,望批评指正。正确的运用编译知识可以在我们代码保护中达到事半功倍的效果。 一提到编译,大家很多人觉得不就是词法分析、语法分析然后产生一个针对特定机器的文件。感觉这是一个很成熟,有规则,本身就是很有章法的东西,好像不需要我们本身去理会...原创 2018-11-04 13:45:13 · 907 阅读 · 0 评论 -
小密盾简单逆向分析
前几天出了个小密盾,针对插件加固的,好奇的简单分析了一下,写了个样本简单的加固了一下,以下是分析过程。小密盾简单逆向分析一:静态分析 静态分析发现,根据这些函数参数很多函数进行了加密,并且新加了几个节,接下来动态分析。二:动态分析由于JNI_Onload经过了加密,因此可以猜测在.init/.init_array处经过了加密处理,不需要仔细分析这些加密算法,在JNI_...原创 2018-05-21 21:06:52 · 3830 阅读 · 2 评论 -
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 评论 -
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 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 评论 -
360一代加固脱壳方法总结
首先我觉得脱壳是逆向水平的一个综合考察,不仅要对Android中系统源码和加载流程有熟悉的认识,还要对在脱壳中的反调试又敏锐的察觉,当然锲而不舍的精神也是很关键的,很多同学上来就脱最新的壳,或者找脱壳机,脱壳机也是那些高手在分析清了每个厂家的加固原理后自己写出来的,手动脱半天脱不下来,被各种卡,各种反调试折腾,就放弃了,那何不从一代开始慢慢研究,找出里面的原理方法,这样一来认识里面的原理结构,同时又能建立自信。。。。方法1:手动脱,在mmap处下断点,同时过以检测/proc/pid/status中的Tra原创 2017-05-26 21:17:17 · 6421 阅读 · 1 评论 -
360二代加固脱壳方法总结
二代加固的难度有所增加,最明显的地方就是qihoo下面增加了一个Configuration.smali文件。由以前的一个增加为两个。脱壳时有几个关键的so:1.libc.so(主要是提供一些系统函数,比如open、fopen、fget等等);2.libdvm.so/libart.so(主要是Android中的系统so,也是重要的Android虚拟机中的重要的so,由于Android有java层面要跟本地层进行交互时,因此这里面的很多系统函数很重要,比如libdvm.so中的dvmdexfileopen原创 2017-05-29 20:24:36 · 18471 阅读 · 3 评论 -
Android so文件保护——使用upx加壳
最近有人问我关于UPX加壳的问题,关于UPX如何加壳以及脱壳,网上说的很清楚了,这里不细说了,附件是很早之前我配置UPX加壳环境的一些资料和配置包以及成功的实例,有需要的小伙伴可以下下来玩。原创 2017-07-08 11:32:28 · 4601 阅读 · 3 评论 -
Android dex的加载流程以及加固脱壳时机点简单总结
1.Dex文件优化与验证: 把dex文件转化为odex的过程,填补一些加载依赖的类。这里存在一代脱壳时机点,比如早期的爱加密在dvmdexfileopen函数下断点。 2.Dex文件解析:将优化后得dex文件(也就是odex文件)通过mmap映射到内存中,并通过mprotect修改它的映射内存为只读权限,映射为只读的这块dex数据中的内容全部提取到DexFile这个数据结构中去,然原创 2017-08-14 15:01:54 · 2479 阅读 · 0 评论 -
梆梆加固原理分析
壳的运行流程:加固流程分析:总结篇:梆梆加固将整个Dex文件加密,并重写了原来的Application类,并将程序的入口重定向到“Loader”--secData0.jar上。系统会在初始化的时候执行loader内的stubApplication,subApplication完成对原始Dex文件(Playload)的解密并动态加载,然后执行原Application类原创 2017-07-26 07:32:02 · 8320 阅读 · 2 评论 -
乐固加壳的原理分析
乐固壳的大致运行流程: 具体的加固流程分析: 总结: 总的来说乐固还停留在二代不落地方式的加固水平,主要还是通过参考在不同Android源码模式下,对一些关键的系统函数的重写,比如说对于dex字节的加载函数,Dalvik下的openDexFile和ART下的OpenFile函数进行重写,加上一些原创 2017-07-22 14:57:25 · 3550 阅读 · 1 评论 -
Android ARM指令比较难以理解问题总结
我们知道在Android逆向中,最后的实质都会回归到对于so文件的分析无论是静态还是动态分析都会看到一堆的ARM返汇编的指令,今天就专门对这个里面遇到的一些不好理解的点进行总结,一来帮助需要之人,二来加深自己的理解,从而夯实基础。这些东西很枯燥,我不会讲那些长篇大论,每个点要结合实际例子来展开,这样便于理解。一、 ARM中的重要指令:1.跳转指令:在 ARM 中有两种方式可以实原创 2017-07-04 10:24:52 · 1170 阅读 · 2 评论 -
Android 加载ELF可执行文件
Android通过调用shell脚本加载执行ELF可执行文件,废话不多说。附件是一个加载执行“Hello World”可执行文件的Demo。后期可以通过调用一个脱壳机的可执行文件进行脱壳。原创 2017-05-08 12:23:14 · 2685 阅读 · 0 评论 -
对于Android代码保护过后软件的评估
前言篇:我们知道对于一篇论文来说,评估是很重要的,即使保护再好的方法,如果评估不到位总会显得那么苍白无力,这几天偶然看到一篇论文,关于一篇Android传统代码保护的,关于论文具体内容不多说了,价值含量一般般吧,但是对于文章最后的评估还是很赞的,在次小记,一来帮助需要之人,二来有利于自己理解。内容篇:两部分的评估:第一部分:成本评估;第二部分:安全评估;似乎大部分的评估都是原创 2016-10-19 10:24:21 · 1132 阅读 · 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 评论 -
nshc加固浅析
一、dex保护:1.1反回编译:按照上面的提示找到对应的位置,把那个函数删掉。由于这个函数别的地方也没有调用,应该不影响结果。总结:可以把这个函数改造。构造一个能够去调用它参与逻辑的,增强反回编的难度。1.2.对于dex中重要信息字符串的解密:反编译的时候看到大量的这种加密字符串解决办法:由于这个解密函数是java层面的,且不是很复杂。因...原创 2019-08-28 19:56:55 · 626 阅读 · 0 评论