自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

深耕安全技术研究

欢迎关注公众号【小道安全】 一起交流,一起进步。

  • 博客(102)
  • 资源 (4)
  • 收藏
  • 关注

原创 android下注入技术详解

Android注入技术

2022-03-22 22:59:27 10411

原创 端口扫描的CS木马样本的分析

CS拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,服务扫描,自动化溢出,多模式端口监听,木马生成,木马捆绑,socket代理,office攻击,文件捆绑,钓鱼等多种功能。下图是本次分析样本的基本属性,这个样本的图标通过伪装成中国移动的图标,通过上文的理论基础,我们可以直接猜测出它是采用不分段的摸索,这个样本就是一个loader,它直接执行shellcode的功能。通过下图可以看出这个样了里面主要由pyc文件、pyd文件、dll文件、zip文件构成的,其中高危端口检测.pyc就是样本的主程序。

2023-05-18 10:47:10 1625

原创 APP的污点分析

污点源中的函数在获取污点数据之后,可能会依次通过不同的变量将污点数据传递到污点库函数中,在此过程中,所有存储了该污点数据的变量都应该被标记为污点状态,这样就可以追踪过程,即追踪标记为污点状态的变量的数据流过程。APP静态污点分析它是在静态分析的基础上加入污点分析原理,使其结果为该分析方法所期望的可疑数据流。APP静态污点分析:通过解析dex 文件并根据 APP的生命周期建立函数调用的模型,使用静态数据流分析的方法,静态模拟代码数据的传播,实现静态数据的跟踪,以达到精准定位漏洞的目的。

2023-05-18 10:40:35 650

原创 android中Cleartext HTTP错误解决方案

anroid错误

2023-05-18 10:23:19 533

原创 arm汇编中mov、movs、movw、movl、movb解析

arm汇编 mov

2023-04-18 10:28:18 6391 2

原创 对一个手游修改器锁机APP的分析

锁机app的逆向

2022-08-31 11:46:40 822

原创 网络钓鱼技术

对网络钓鱼技术的解析

2022-08-31 11:41:31 1443

原创 浅谈程序的数字签名

数字签名原理解析

2022-08-25 09:52:21 2469

原创 API安全的应用和分析

API安全攻防应用

2022-08-24 15:01:07 1373

原创 软件开发过程中常见漏洞的解析

软件漏洞的解析

2022-07-19 18:44:38 1868

原创 实战化场景下的容器安全攻防之道

容器已经成为黑客重要的攻击目标,但是目前非常缺乏有效的安全手段。 不管是在真实网络实战中,还是在相关的攻防演习中,以容器为代表云原生基础设施都将是攻防双方必争之地。

2022-06-24 14:58:57 328

原创 恶意软件实现原理解析

恶意软件实现

2022-06-22 16:52:35 860

原创 设备指纹技术分析和应用分析

设备指纹的技术分析和应用。

2022-06-20 10:04:43 3024

原创 arm汇编中DCB、DCW、DCD、DCQ指令

背景在ida中进行分析so文件,就是elf文件,它所对应的arm汇编,在汇编中会时常碰到一些下面的汇编指令。DCB是arm汇编中的伪指令,下面就针对这个指令相关做下小记录。伪指令及DC系列指令ARM 伪指令它不是ARM 指令集中的指令,只是为了方便编译器编程而定义的指令,使用时可以像其他ARM 指令一样使用,但在编译时这些指令将被等效的ARM指令代替。DCB它关联的伪指令有DCB、DCW、DCD、DCQ指令。它们都是用于分配一段内存单元,并对其进行做初始化工作。不过它们分配的内存空间大小不同

2022-05-12 10:02:40 14800 1

原创 攻防演练梳理总结

攻防演练详谈

2022-05-09 10:04:42 2788

原创 代码宏定义中使用循环语句

背景今天无意间在看某开源的代码,看到了下面的一段比较有趣的代码。它有趣的地方在于使用do{ …}while(0)循环语句,并且使用的在于defind的宏定义函数中。/** * Assert that err matches expect */#define uc_assert_err(expect, err) \do {

2022-04-20 14:55:32 1589

原创 几个容易搞混的指针类型

指针类型

2022-03-23 16:48:03 130

原创 对中病毒微信样本的逆向分析

https://mp.weixin.qq.com/s/243hAp8rGcjHXkoWSG6xgQ

2022-02-10 23:50:47 1820

原创 对吃鸡APP的逆向分析

对android逆向吃鸡APP的逆向分析

2022-01-26 07:15:06 3465 1

原创 探索android系统中的强指针实现

强指针和弱指针基础android中的智能指针包括:轻量级指针、强指针、弱指针。强指针:它主要是通过强引用计数来进行维护对象的生命周期。弱指针:它主要是通过弱引用计数来进行维护所指向对象的生命周期。如果在一个类中使用了强指针或者弱指针的技术,那么这个类就必须从RefBase这个类进行做继承,因为强指针和弱指针是通过RefBase这个类来提供实现的引用计数器。强指针和弱指针关系相对于轻量级指针来说更加亲密,因此他们一般是相互配合使用的。强指针原理分析以下针对源码的分析都是来源于android5.0

2021-10-06 23:43:24 525

原创 解析android系统中的轻量级指针

智能指针来源由于android系统底层的很大的一部分是用C++实现的,C++的开发就难免会使用到指针的这个知识 点。而C++的难点和容易出问题的也在于指针。使用指针出错,常常会引发带来对项目具有毁灭性的错误,内存泄漏、逻辑错误、系统崩溃。引发指针错误情况表现常常有如下几个表现情况:1.申请了内存空间,但是忘记释放指针所指向的对象占用的内存空间。2.使用了无效的指针。因此在android的C++代码部分采用了智能指针的技术。智能指针通过一种能够自动危害对象引用计数的技术。来解决C++中指针存在的缺陷

2021-10-06 12:36:09 409 2

原创 Binder线程池的启动流程分析

理论基础BinderBinder它是android中的一种进程间通信机制,它主要采用的是CS架构模式。Binder框架中主要涉及到4个角色Client、Server、Service Manager及Binder驱动,其中Client、Server、Service Manager运行在用户空间,Binder驱动运行在内核空间。线程池线程池它是一种用于多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,

2021-10-04 22:12:06 391 2

原创 android逆向面试几个问题点。

1.dex整体加固的脱壳方法dex加固算是第二代主流加固工,下面是常见脱壳方案。1.app运行后,直接在app内存中暴力搜索 dex\n035,然后进行dump数据。2.dvmDexFileOpenPartial通过hook这个函数解密。2.ptrace注入流程主要就是通过利用系统ptrace函数进行实现的,目前主流的frida注入框架也是这个原理实现的。1.attach到远程进程;2.保存寄存器环境3.远程调用mmap函数分配内存空间4.想远程进程写入加载模块名称和调用函数5.通过d

2021-09-17 14:59:49 567 1

原创 解析dex2oat的实现

简介在Android系统5.0及以上系统开始逐渐丢弃Dalvik虚拟机,由于ART虚拟机对内存分配和回收都做了算法优化,降低了内存碎片化程度,回收时间也得以缩短,所有android系统5.0及以上都在主推ART虚拟机。在ART虚拟机中ART则会将Dex通过dex2oat工具编译得到一个ELF文件,它是一个可执行的文件。所以下面我们就针对ART的dex2oat实现进行做分析。dex2oat介绍Dex2oat的全称是:dalvik excutable file to optimized art file,

2021-09-09 10:12:45 3312 1

原创 android的java层so加载解析

理论基础我们在android开发项目过程中都必然会更so加载打交道,那么so加载在系统中的顺序和流程是怎样的,我们就有必要对这个加载过程进行熟悉了解掌握。so的加载是一种解析式装载,这与dex有一定区别,dex是先加载进行优化验证生成odex,再去解析odex文件,而so更像边解析边装载,在加载过程中主要解析是load段。下面主要是以java层的so加载进行从源码上进行解析加载流程。java层的so加载流程分析System.loadLibrary入口点在java层我们知道加载so文件是通过Sys

2021-08-31 09:32:21 741 2

原创 android多开原理和检测。

多开检测理论基础多开实现原理解析代码实现:多开包名代码实现:多用户理论基础app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至会对app的功能做破坏修改。因此多开在实际app应用中是有一定危害性的,因此对多开环境的识别是很重要的,通过识别多开环境有利于让app更加安全。多开实现原理解析app多开实现原理很多种类,如采用多用户方式(mumu模拟器的多开器实现)、通过创建不同进程名称(多开分身、双开助手)进行运行。我们知道在每一个的app都有属于自己的私有目录,一般是“/data/data/包名

2021-08-25 16:48:37 5627 2

原创 android反编译工具jadx卡死解决方案。

jadx卡死解决概述问题点解决方案概述在android的app中,由于dex部分是由java代码实现的,dex可以直接被apktool,androidkiller,jeb等工具进行反编译分析,那么jadx工具主要是用于将dex文件的代码还原为java代码。jadx支持直接将dex文件和jar文件拖拽到工具进行做解析。在使用jadx工具的时候会有卡死的情况出现,下面就针对这个问题进行分析和解决。问题点在使用jadx工具进行解析app中的dex文件或者jar包的时候,当dex或jar文件超过50M的

2021-08-24 10:53:57 5488 4

原创 初探android系统的input在java层实现

input实现理论背景关键代码实现解析:java层代码Input类定义sendKeyEvent 函数定义sendSwipe 函数定义injectKeyEvent 函数定义injectMotionEvent 函数定义sendMove 函数定义理论背景当我们在分析android的键盘记录的时候就不得不和input进行打交道,那么input在系统中是怎么进行实现的?Android手机中默认携带input子系统,并且开在机就会产生默认的mouse和keyboard事件,这样使得用户开机就可以触屏点击和使用按键

2021-08-21 11:40:27 341 2

原创 android匿名共享内存原理浅读

理论基础android系统在应用程序框架层中提供了两个C++类MemoryHeapBase和MemoryBase来创建和管理匿名共享内存。如果一个进程需要与其他进程共享一块完整的匿名共享内存,那么就可以通过使用MemoryHeapBase类类创建这块匿名共享内存。如果一个进程创建一块匿名共享内存后,只希望与其他进程共享其中的一部分,那么就可以通过MemoryBase类来创建这块匿名共享内存。IMemory.h:定义内存相关类的接口,表示堆内存的类IMemoryHeap和BnMemoryHeap,表示一

2021-08-18 22:23:10 1086 1

原创 android中dex文件的函数解析

dex理论基础dex文件作为android的的主要格式,它是可以直接在Dalvik虚拟机中加载运行的文件。dex 文件可以分为3个模块,头文件(header)、索引区(xxxx_ids)、数据区(data)。我们在进行对android加固和脱壳的时候都需要进行和dex文件格式打交道。它在系统的定义是定义在/art/runtime/dex_file文件中的。下面对dex文件格式的几个关键函数进行分析。CheckMagicAndVersion 函数//判断dex文件中魔法值dex后面所跟的版本

2021-08-17 23:00:39 950 1

原创 android的got表HOOK实现

概述对于android的so文件的hook根据ELF文件特性分为:Got表hook、Sym表hook和inline hook等。全局符号表(GOT表)hook,它是通过解析SO文件,将待hook函数在got表的地址替换为自己函数的入口地址,这样目标进程每次调用待hook函数时,实际上是执行了我们自己的函数。Androd so注入和函数Hook(基于got表)的步骤:1.ptrace附加目标pid进程;2.在目标pid进程中,查找内存空间(用于存放被注入的so文件的路径和so中被调用的函数的名称或者

2021-08-12 00:04:35 1034 5

原创 深入对android的smali的指令解析

1.普通字段读写操作iget-object vAA,vBB,filed_id: 表示读取vAA寄存器中的对象中的filed_id对象的引用值给VBB寄存器。iget_boolean vAA,vBB,filed_id: 表示读取vAA寄存器中的对象中的filed_id的值给vBB寄存器。iget_wide vAA,vBB,filed_id :表示读取vAA寄存器中对象中的filed_id的值给vBB寄存器。 iget vAA,vBB,filed_id:表示vAA寄存器中对象的filed_id值给vBB寄

2021-08-08 11:09:42 2667 4

原创 对apk反编译的smali应用梳理总结

1.反编译apk高频出现语句const/4 v1, #int 2 表示存入int型常量2到v1,目的寄存器在第二个自己的低4位,常量2在更高的4位。const/16 v0, #int 10 表示存入int型常量10到v0中。move-object/from16 v1, v21 表示将v21寄存器中的对象引用到v1上。check-cast v4 Test3 检查v4寄存器中的对象引用是否可以转换为Test3的实例。Instance-of v0, v4, Test3 检查V4寄存器中的对象引用是否是T

2021-08-08 11:06:10 1747 2

原创 监控android内存被dump实现

监控原理通常加固会在程序运行前完成对text的解密,所以脱壳可以通过/proc/pid/mem或/proc/pid/pagemap或/proc/pid/maps,获取到加固后解密的代码内容。可以通过Inotify系列api来监控mem或pagemap的打开或访问事件,一旦发生触发了事件就结束进程来阻止android的内存被dump。代码实现//监控内存是否被修改事件void thread_watchIntifyDump(){char dirName[NAME_MAX]={0};//用于监

2021-08-06 11:03:04 2446 6

原创 so中函数断点的的反调试检测

反调试简介在apk应用的so文件中函数的指令都是固定,但是如果被下了软件断点,指令就会发生改变(断点地址被改写为bkpt断点指令),可以计算内存中一段指令的hash值进行校验,检测函数是否被修改或被下断点。实现原理当我们程序中的函数被下软件断点,则断点地址会被改写为bkpt指令, 可以在函数体中搜索bkpt指令来检测软件断电。代码实现/*参数1:函数首地址 参数2:函数size*/typedef uint8_t u8;typedef uint32_t u32;int checkF

2021-08-05 14:43:23 613 1

原创 android的系统自带函数检测调试

简介通过android系统自带的函数android.os.Debug.isDebuggerConnected(),可以进行判断是否android的应用程序是否在被调试状态。原理分析分析android自带调试检测函数isDebuggerConnected()在native的实现;android系统有两中模式分别为dalvik模式和art模式,下面分别对这两种模式下进行做反调试检测做解析。1.dalvik模式下:通过获取到进程中libdvm.so中的dvmDbgIsDebuggerConnecte

2021-08-04 11:05:09 2095 4

原创 获取和检测android的父进程

简介每个App的用于程序都是通过父进程zygote进行fork出来的子进程,所以zygote也是所有app的父进程。那么对于zygote进程可以用于检测判断app应该是否处于被调试状态。检测父进程原理有的时候不使用apk附加调试的方法进行逆向,而是写一个.out可执行文件直接加载so进行调试,这样程序的父进程名和正常启动apk的父进程名是不一样的。实验测试1、正常启动的apk程序:父进程是zygote2、调试启动的apk程序:在AS中用LLDB调试发现父进程还是zygote3、附加调试的a

2021-08-04 10:40:02 1568 1

原创 从汇编角度看函数

函数1. 函数简介2. 从汇编中看函数1. 函数简介在代码开发过程中,函数是一个必然存在的,它是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带有一入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理,所谓出口,就是指函数的计算结果,也称为返回值,在计算机求得之后,由此口带回给调用它的程序。函数主要需要关注两个方向问题:函数参数,函数返回值2. 从汇编中看函数函数功能的实现部分PUSH EBP 提升堆栈

2021-07-29 10:58:04 477 1

原创 你需要掌握的APP隐私合规。

链接: 点击进行阅读.

2021-07-23 18:03:37 558 2

原创 arm汇编指令速记

这里写目录标题1.跳转指令2.数据交互指令3.数据传送指令1.跳转指令B 无条件跳转BL 带链接的无条件跳转BX 带状态切换的无条件跳转BLX 带链接和状态切换的无条件跳转B loc_地址BNE,BEQ2.数据交互指令存储器(主存,内存)寄存器中放的数据:可以是字符串,可以是数,也可以是一个地址,它可以放各种类型的数据 存储地址单元:地址(如0x00004000)与地址中存在的值LDR:从存储器中加载数据到寄存器 ← LoadLDR R8,[R9,#04] R8为待加载数据的寄

2021-07-20 10:59:14 533 1

当前最全安全资料汇总

漏洞及渗透练习平台 数据库注入练习平台 花式扫描器 信息搜集工具 WEB工具 windows域渗透工具 漏洞利用及攻击框架 漏洞POC&EXP; 中间人攻击及钓鱼 密码破解 二进制及代码分析工具 EXP编写框架及工具 隐写相关工具 各类安全资料 各类CTF资源 各类编程资源

2019-04-23

c++开发精华

是c++软件开发工程师必须掌握的知识,也是入门者必须要懂的知识点

2012-10-26

c++ 开发材料

c++软件工程师必须掌握的知识,也是用来提升能力的材料,更是菜鸟必须要懂的知识

2012-10-23

IT面试材料

中国IT行业精英所出的面试题,经过一年多的整理才完成的

2012-09-17

空空如也

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

TA关注的人

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