自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小蓝人敌法的专栏

阅读改变人生厚度

  • 博客(37)
  • 资源 (1)
  • 收藏
  • 关注

原创 ollvm源码分析 - Pass之Flattening

概述承接上一篇Pass之SplitBasicBlock源码分析,这一篇文章继续分析ollvm的核心Pass Flattening, 也就是代码流程平坦化 为了描述的完整性,引用一段SplitBasicBlock分析文章中的一段话来说一下什么流程平坦化 平坦化一句话概括就是重组原始代码执行流程,把原本易于阅读的代码流程重组成一个switch case形式的代码执行流程,大大降低代码的直观...

2019-10-21 16:21:19 783 1

原创 ollvm源码分析 - Pass之Substitution

ollvm源码分析 - Pass之Substitution概述ollvm这个项目的Substitution这个Pass源码比较简单,功能也很明确,那就是进行操作符替换,那要替换哪些操作符呢?我直接抛出来吧,ollvm中替换了 加 减 与 或 异或这几种 那到底怎么替换的呢?直接抛出总结的结果吧 加法拆分 a = b + c => a = b - (-c) a =...

2019-10-18 16:14:46 769

原创 ollvm源码分析 - Pass之SplitBaiscBlocks

概述 SplitBasicBlocks是一个llvm体系下的标准Pass风格的代码处理组件,继承自FunctionPass。 根据llvm的官方文档描述,这种Pass只会作用于Function这种粒度,也就是llvm在编译流程里面,只有对单个Function应用Pass逻辑的时候, 才会调用继承自FunctionPass的各种Pass(包括llvm自带的Pass和普通开发人员自定义的Pass...

2019-10-17 19:19:41 1029

原创 LLVM代码混淆分析及逻辑还原

LLVM代码混淆分析及逻辑还原概述LLVM Obfuscator是一款工业级别的代码混淆器,在过去几年的CTF里我们经常会遇到经过代码经过它混淆的情况。这片博文记录了我们对混淆器原理的研究以及从中发现的有关混淆器的设计实现的脆弱之处。基于我们的研究结果,我们在Binary Ninja平台上写了一个插件,通过这个插件可以自动化的解决掉由于代码混淆带来的逆向分析困难。LLVM Obfuscator简

2018-02-04 18:33:32 3038

原创 让你的Android手机支持LKM

前言调试Android程序的时候不可避免的会遇到一些恶心的反调试,为了一劳永逸的解决这些反调试问题,使用LKM模块来制作一个调试沙箱是一个很不错的想法,就像当年Windows平台上盛行一时的reload kernel一样。所以LKM是个好东西,但是默认情况,Andriod的Kernel是没有打开LKM支持的,我们需要重新配置内核选项让它支持LKM,一个比较好的办法就是使用内核源码配置内核选项,编译

2018-01-03 12:12:33 1246

原创 [开源]Android逆向中So模块自动化修复工具+实战一发

前言Android加固方案经过这么长时间的发展,从开始的整体dex加密压缩方案逐步开始往native层发展,市面上知名的几款商业级加固方案中很容易发现这种方案的身影。这样看来,在今后相当长的一段时间内,Android逆向中不可避免的会频繁接触到与So加固的对抗了。[开源]Android逆向中So模块自动化修复工具+实战一发工具的初衷搜集常见So加固方案(主要是日常分析中遇到的)自动化对抗加固

2017-10-10 22:14:51 2081 1

原创 VMProtect1.09分析

前言有段时间没有写文章了,感觉快要断了线了,最近略有时间,闲暇又手痒抄起OllyDBG撸几发。这次把玩的对象是VMProtect的一个低级版本VMProtect1.09,只所以选择这个版本,还是因为想再回顾一遍VMProtect的核心脉络,减少高版本里夹带的各种垃圾指令干扰,也正好做一个记录,以前的分析都是随手分析完就算了,以后争取看过的东西都有个记录,方便自己和别人参考。环境准备VMProt

2017-09-25 21:42:43 976

原创 Jeb分析大型App报错OutOfMemoryError

首先描述下问题,在平时逆向分析的时候,发现JEB在打开比较大的App的时候,总是会报java.OutOfMemoryError这种错误,明明电脑的内存还是好多个G呢,怎么回事呢? 经过一番折腾之后(查资料+测试),发现需要指定一下JEB使用的Java内存相关的参数,总共需要修改2个地方: 第一个地方,Windows平台下,修改jeb_wincon.bat这个文件...

2019-11-25 13:53:42 2234 2

原创 给llvm添加自定义Pass

背景最近在看ollvm这个东西的源码,于是乎想搞个自定义Pass玩玩看,按照网上的教程一顿倒腾发现一个坑点,那就是你编写的Pass只能通过opt这个工具来运行 我想要的效果是,我的Pass集成进去之后,当我调用clang进行编译的时候,能够自动的调用我的Pass,不要让我再调用opt工具爬坑过程 环境准备 参照ollvm源码的目录结构,在lib/Transforms/ 目录下建立...

2019-10-22 15:49:14 1658 1

翻译 老外挑战360加固--实战分析(很详细)

老外挑战360加固–实战分析(很详细)概述移动安全经过近几年的发展,几乎已经赶上了桌面安全的水平,所以在分析一些移动端恶意样本的时候遇到一些磕磕绊绊是很正常的事了。在大多数情况下,我们遇到的样本只是简单的经过类名、变量名以及字符串的混淆,但是也有些样本使用了一些比较复杂的保护方案: 反调试: 反调试的目标有两个,一个是防止分析人员对程序进行调试附加,另一个是在检测到调试器的时候让程序执行异常流程

2018-03-30 09:41:38 9389

翻译 逆向平台Binary Ninja介绍

逆向平台Binary Ninja介绍概述我们经常会收到这样的问题,比如: Binary Ninja比xx软件好在哪里呢?Binary Ninja这个软件最主要的作用是什么呢?对于上面的两个问题,简要的回答起来是这样的: Binary Ninja相对于其他类似软件来说, 能够更快、更便捷的修改二进制文件Binary Ninja最主要的作用是提供了一个可供操作二进制文件的平台,你甚至还可以在

2018-01-17 20:01:22 3777

翻译 BlueBorne远程代码执行漏洞Poc实战(CVE-2017-0781)

BlueBorne远程代码执行漏洞Poc实战(CVE-2017-0781)前几天,一个名为Armis的公司发布了Android设备上的一个蓝牙远程代码执行漏洞(CVE-2017-0781)的Poc,漏洞命名为BlueBorne,尽管BlueBorne漏洞涉及到了8个漏洞点,但是这个Poc只用了其中的2个就达到了利用的目的。整个利用过程分为2个阶段,Poc先是使用了内存泄露漏洞(CVE-2017-

2017-12-12 11:48:28 2969

原创 IDAPython脚本分享 - 自动在.preinit_array .init .init_array下断点

自动在.preinit_array .init .init_array下断点脚本背景在Android逆向的过程中,一个很常见的场景就是我们需要分析So模块的init函数(很多加固方案初始化的地方),每次我们使用IDA进行调试的时候,都要手动的找一次 linker 中调用init函数的位置,重复又麻烦,于是就用脚本把这个相对固定的过程用IDA Python脚本固化下来,提高效率,顺便跟大家分享一下。

2017-11-28 14:45:14 851

原创 Frida官方手册 - JavaScript API(篇三)

JavaScript APIWeakRefWeakRef.bind(value, fn): 监控value对象,当被监控的对象即将被垃圾回收或者脚本即将被卸载的时候,调用回调函数fn,bind返回一个唯一ID,后续可以使用这个ID进行 WeakRef.unbind()调用来取消前面的监控。这个API还是很有用处的,比如你想要在JavaScript的某个对象销毁的时候跟着销毁一些本地资源,这种情况下

2017-11-03 19:38:14 4111

原创 Frida官方手册 - JavaScript API(篇二)

JavaScript APIInt64new Int64(v): 以v为参数,创建一个Int64对象,v可以是一个数值,也可以是一个字符串形式的数值表示,也可以使用 Int64(v) 这种简单的方式。add(rhs), sub(rhs), and(rhs), or(rhs), xor(rhs): Int64相关的加减乘除。shr(n), shl(n): Int64相关的左移、右移操作comp

2017-10-24 14:31:19 9974 2

原创 IDAPython脚本分享 - 自动在JNI_OnLoad下断点

自动在JNI_OnLoad下断点脚本背景在Android逆向的过程中,一个很常见的场景就是我们需要分析So模块的JNI_OnLoad函数,每次我们使用IDA进行调试的时候,都要手动的找一次 libart.so(ART虚拟机)中调用JNI_OnLoad函数的位置,重复又麻烦,于是就用脚本把这个相对固定的过程用IDA Python脚本固化下来,提高效率,顺便跟大家分享一下。脚本使用注意事项IDA载

2017-10-22 16:02:55 2896 2

原创 Frida官方手册 - Android上示例一则

Android上示例一则Android CTF例子在这个示例中,强烈建议大家使用Android4.4 x86的模拟器,这个示例工具脚本是基于 SECTION Quals CTF 2015 APK1的,APK下载地址可以参考原文(https://www.frida.re/docs/examples/android/)创建 ctf.py 然后执行如下命令python ctf.py:

2017-10-21 12:55:48 982

原创 Frida官方手册 - 在Android上使用Frida

在Android上使用Frida在这篇教程里面,我们来演示一下如何在Android设备上进行函数跟踪。设置你的Android设备在我们开始之前,请确保你的Android设备已经完成root操作。我们大部分的实验操作都是在Android4.4版本上进行的,但是Frida本身是支持从4.2到6.0的版本的,但是目前来说对Art的支持还是有限的,所以我们建议最后还是用使用Dalvik虚拟机的系统设备

2017-10-21 12:34:02 10738

原创 Frida官方手册 - 在iOS上使用Frida

在iOS上使用Frida在iOS设备上,Frida支持两种使用模式,具体使用哪种模式要看你的iOS设备是否已经越狱。使用场景已越狱机器未越狱机器已越狱机器在越狱的环境下,是用户权限最大的场景,在这样的环境下你可以很轻松的调用系统服务和基础组件。在这篇教程中,我们来看下如何在iOS设备上进行函数追踪。设置iOS设备启动 Cydia 然后通过 Manage

2017-10-20 20:49:22 17846 1

原创 Frida官方手册 - 函数Hook

函数Hook这一篇我们看下如何在目标进程中对程序中的函数进行调用监视、参数修改、以及函数的主动调用准备环境创建文件 hello.c,内容如下:使用如下命令进行编译:启动程序,然后记下函数 f() 的地址(在这个例子中,值是0x400544):函数Hook下面这个脚本中,对目标进程的函数 f() 进行了Hook,并把拦截到的函数的参数汇报出来,创建文件 hook.py 包含如下内容:使用上面记

2017-10-19 20:51:09 7686 1

原创 Frida官方手册 - 消息发送

消息发送在这篇教程里,我们来讲述如何从目标进程发送消息到主控端以及如何反向发消息。环境准备创建文件 hello.c使用如下命令编译:然后启动程序,并记录下函数 f() 的地址(在这个例子中是0x400544):从目标进程中发消息在下面的这个例子中,脚本从目标进程中给Python主控端发回了一条消息,理论上你可以发送任何可以序列化成JSON的任何JavaScript值。创建文件 send.p

2017-10-19 16:29:24 2296

原创 Frida官方手册 - 使用姿势

使用姿势Frida的动态代码执行功能,主要是在它的核心引擎Gum中用C语言来实现的。一般大家使用Frida进行开发的时候,只需要使用脚本就行了,使用脚本来开发就可以大大缩短开发周期了。比如说GumJS,只需要很少的几行C代码,就可以拉起一个包含JavaScript运行环境的执行环境,这个环境中,你可以访问Gum API,也可以Hook 函数、枚举模块、内存枚举,甚至是调用导出函数。本篇内容注入

2017-10-19 15:14:08 5696

原创 Frida官方手册 - 基础用法

基础用法Frida的Python API接口是一种底层接口的封装,而且功能也是相当的有限,你可以把这些接口当作是一种底层核心接口封装的示例代码来看待。强烈建议大家看下 frida/core.py 和 frida/tracer.py 的代码来学习下底层的具体细节。模块枚举enumerate_modules() 函数枚举当前进程中所有加载的模块。执行如下代码:应该会看到下面的输出结果:其中,ba

2017-10-19 12:33:43 5518

原创 Frida官方手册 - 安装Frida

安装Frida从零开始安装使用Frida大概只需要几分钟的时间就可以搞定。如果你安装的过程中发现什么问题,可以告诉我们(请参考原文链接https://www.frida.re/docs/installation),看看我们是否有比较好的解决方案。安装环境要求虽然安装Frida很简单,但是还是一点环境上的准备,开始安装之前请确认一下你的系统环境: Python - 建议使用最新的

2017-10-19 10:12:56 8750 1

原创 Frida官方手册 - 快速入门

快速入门对于急性子的朋友是不是想赶紧看下Frida怎么用呢?这里先给出一个例子吧:在这个例子中,Frida把自己注入到Twitter,然后枚举进程中已经加载的模块,查找函数名称能匹配到recv和read的所有函数,然后对这些函数进行Hook。Frida框架会自动生成Hook回调处理脚本。你可以在这个脚本上面随意修改以满足你对需求,修改保存之后,Frida会自动重新加载修改之后对脚本。Frida生成

2017-10-18 22:37:00 3377 1

原创 Frida官方手册 - 概述

欢迎使用这篇文章的主要目的是对Frida做一个概要的阐述。主要涵盖如下几个方面: 命令行模式下,交互式函数跟踪基于Frida API编写你自己的实用工具关于Frida开发的一些建议Frida到底是什么?通俗一点讲,Frida是为Native应用开发出来的一把瑞士军刀。从技术的角度讲,Frida是一个动态代码执行工具包。通过Frida你可以把一段JavaScript注入到一个进程中去,或者

2017-10-18 21:55:52 3106

原创 IDC:函数列表

IDC:函数列表IDA为IDC脚本提供了大量的内建支持函数,用来和IDA进行交流沟通,大大提升了IDA的威力,下面我们介绍一下IDA支持的函数列表。为了描述方便,我们规定几个简称'ea' - 代表一个线性地址'success' - 0代表失败,1代表成功'void' - 表示函数没有返回有意义的值( 可以认为返回的值为0 )'anyvalue' - 表示函数的返回值可能是任意一种类

2017-07-07 10:07:30 2744

原创 IDC:预定义符号

IDC:预定义符号下面的几个符号是内建预定义的:NT :表示IDA当前运行在Windows平台上LINUX:表示IDA当前运行在Linux平台上MAC:表示IDA当前运行在Mac平台上UNIX:表示IDA当前运行在Unix 平台上(包括linux mac)EA64:表示当前的IDA是64位版本的QT:表示IDA的界面库版本是QT的

2017-07-06 16:41:51 266

原创 IDC:表达式

IDC:表达式在IDC脚本中,除了 += 这个表达式之外,其他所有的C语言的表达式都可以直接使用常量的定义跟C语言很类似,但是也有一点点小区别,比如IDC支持以下四种数据转换操作:long(expr) 转换过程中,浮点会被截断,转换成long型char(expr)float(expr)_int64(expr)在大部分情况下,在

2017-07-06 16:41:01 344

原创 IDC:语句

IDC:语句在IDC脚本中,允许你使用如下几种类型的语句:普通语句和语句块 expression; 或者 { statements... }if语句 和 if else语句if (expression) statement或者if (expression) statement else statementfor语句for ( ex

2017-07-06 16:40:25 296

原创 IDC:函数

IDC:函数IDC脚本中的函数必须要有返回值。在IDC脚本中,支持两类函数:内建函数用户自定义函数用户自定义函数一般是像下面这样的方式写的:static func(arg1,arg2,arg3){ statements ...}需要注意的一点是,声明函数参数的时候,没必要指定函数参数的类型了,因为IDC会根据你传入的参数自动进行参数

2017-07-06 16:39:28 2212 1

原创 IDC : 变量

IDC : 变量在IDC脚本语言中,存在两种变量:局部变量:这类变量在函数开头的时候声明创建,在函数退出的时候销毁全局变量:这类变量在脚本编译期创建,在IDA分析数据库关闭的时候销毁(译者注:全局变量的创建和销毁原文描述的其实不是太清晰,经过我的测试,全局变量是在脚本加载进来的时候就被创建,然后当你关闭当前IDA分析的文件的时候,IDA也会清理你加载过的IDC脚

2017-07-06 16:38:35 469

原创 IDC脚本语言概述

IDC脚本语言概述IDC语言是一种跟C语言比较类似的脚本语言。IDC和C语言具有非常类似的语言标记:字符集,常量,标识符,关键词,等。然而,由于IDC是一种脚本语言,就无法包含指针这样的高级特性了,但是所有的变量类型,脚本解释器都是可以支持的。IDC中的变量是弱类型的,一个变量可以保存任何类型的数据,因此变量声明的时候是不需要指定变量类型的,比如你可以这样进行变量声明: auto my

2017-07-06 16:37:09 2486

原创 C++11 lambda表达式 原理

C++11之后引入了lambda表达式, 经过C++之前版本洗礼的同学们相信都会深感lamda的简便和强大吧, 那么lamda到底是个什么神奇物种呢, 我通过一个小例子再来从细胞级别来一次分析。分析环境:Windows + Visual Studio2013C++版本:C++11分析原理,用代码说话,先来一段demo代码:void main(){

2017-05-26 13:28:48 620

原创 C++ 静态变量单例模式的误会(线程安全)

今天很low逼的发现,一直以来以为在visual studio 编译器中, static定义的函数内变量是线程安全的, 今天项目中的一个单例测试问题给了我一课,也给大家分享一下,避免像我这样半桶水的再掉坑里。代码是这么写的:class testA{    public:       static testA *getInstance(){       

2017-05-26 13:15:31 2068 2

原创 怎样分析Windows dump

欢迎使用Markdown编辑器写博客dump文件从哪里来?项目工程 一般的项目都会有类似xxxProtect 这样的工程,专门负责项目crash文件的搜集,上传操作。其主要原理就是利用Windows API MiniDumpWriteDump 来生成dump文件, 触发dump抓取时机就是程序发生异常的时候, 当然也可以在任意一个线程中的任意时刻使用这个API进行抓取专业抓取工具 Windo

2017-05-18 22:33:53 4355

转载 Dalvik在x86下的编译及调试

原文地址:http://www.linuxidc.com/Linux/2011-02/32438.htmAndroid Source中默认的Dalvik编译目标是ARM平台,只能在模拟机或者真机上运行,不过如果想研究它我觉得还是在x86下方便点.1、如果使用Ubunut的话,把gcc版本换成4.3的。gcc -v可以查看当前版本。sudo apt-get install gcc

2016-11-04 07:48:32 768

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除