
安卓逆向
文章平均质量分 53
小道安全
这个作者很懒,什么都没留下…
展开
-
对一个手游修改器锁机APP的分析
锁机app的逆向原创 2022-08-31 11:46:40 · 1350 阅读 · 0 评论 -
浅谈程序的数字签名
数字签名原理解析原创 2022-08-25 09:52:21 · 2604 阅读 · 0 评论 -
设备指纹技术分析和应用分析
设备指纹的技术分析和应用。原创 2022-06-20 10:04:43 · 3287 阅读 · 0 评论 -
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 · 18986 阅读 · 2 评论 -
android下注入技术详解
Android注入技术原创 2022-03-22 22:59:27 · 11677 阅读 · 0 评论 -
探索android系统中的强指针实现
强指针和弱指针基础android中的智能指针包括:轻量级指针、强指针、弱指针。强指针:它主要是通过强引用计数来进行维护对象的生命周期。弱指针:它主要是通过弱引用计数来进行维护所指向对象的生命周期。如果在一个类中使用了强指针或者弱指针的技术,那么这个类就必须从RefBase这个类进行做继承,因为强指针和弱指针是通过RefBase这个类来提供实现的引用计数器。强指针和弱指针关系相对于轻量级指针来说更加亲密,因此他们一般是相互配合使用的。强指针原理分析以下针对源码的分析都是来源于android5.0原创 2021-10-06 23:43:24 · 572 阅读 · 0 评论 -
解析android系统中的轻量级指针
智能指针来源由于android系统底层的很大的一部分是用C++实现的,C++的开发就难免会使用到指针的这个知识 点。而C++的难点和容易出问题的也在于指针。使用指针出错,常常会引发带来对项目具有毁灭性的错误,内存泄漏、逻辑错误、系统崩溃。引发指针错误情况表现常常有如下几个表现情况:1.申请了内存空间,但是忘记释放指针所指向的对象占用的内存空间。2.使用了无效的指针。因此在android的C++代码部分采用了智能指针的技术。智能指针通过一种能够自动危害对象引用计数的技术。来解决C++中指针存在的缺陷原创 2021-10-06 12:36:09 · 470 阅读 · 2 评论 -
Binder线程池的启动流程分析
理论基础BinderBinder它是android中的一种进程间通信机制,它主要采用的是CS架构模式。Binder框架中主要涉及到4个角色Client、Server、Service Manager及Binder驱动,其中Client、Server、Service Manager运行在用户空间,Binder驱动运行在内核空间。线程池线程池它是一种用于多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,原创 2021-10-04 22:12:06 · 463 阅读 · 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 · 709 阅读 · 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 · 3593 阅读 · 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 · 858 阅读 · 2 评论 -
android多开原理和检测。
多开检测理论基础多开实现原理解析代码实现:多开包名代码实现:多用户理论基础app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至会对app的功能做破坏修改。因此多开在实际app应用中是有一定危害性的,因此对多开环境的识别是很重要的,通过识别多开环境有利于让app更加安全。多开实现原理解析app多开实现原理很多种类,如采用多用户方式(mumu模拟器的多开器实现)、通过创建不同进程名称(多开分身、双开助手)进行运行。我们知道在每一个的app都有属于自己的私有目录,一般是“/data/data/包名原创 2021-08-25 16:48:37 · 6749 阅读 · 3 评论 -
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 · 6385 阅读 · 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 · 433 阅读 · 2 评论 -
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 · 1042 阅读 · 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 · 1130 阅读 · 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 · 3065 阅读 · 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 · 2078 阅读 · 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 · 2652 阅读 · 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 · 694 阅读 · 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 · 2369 阅读 · 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 · 1722 阅读 · 1 评论 -
你需要掌握的APP隐私合规。
链接: 点击进行阅读.原创 2021-07-23 18:03:37 · 598 阅读 · 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 · 602 阅读 · 1 评论 -
android动态申请权限步骤
详细步骤1.设置申请的权限2.代码实现1.设置申请的权限在AndroidManifest.xml配置文章中设置要申请的权限,下面以申请获取位置信息为例2.代码实现动态申请权限主要需要用到三个关键函数:checkSelfPermission、shouldShowRequestPermissionRationale、requestPermissions。...原创 2021-07-13 11:23:04 · 647 阅读 · 1 评论 -
android查询cpu信息
文章目录1.启动环境2.adb命令查询3.cpu参数信息解释1.启动环境用adb环境进行查询信息。1.用cmd命令启动控制台窗口,然后在启动adb环境。2.adb环境连接(connect)到模拟器或者手机环境2.adb命令查询3.cpu参数信息解释processor :系统中逻辑处理核的编号。vendor_id :CPU制造商。cpu family :CPU产品系列代号model :CPU属于其系列中的哪一代的编号。model name:CPU属于的名字及其编号、标称主频。st原创 2021-06-16 11:13:40 · 4473 阅读 · 1 评论 -
APP安全梳理
链接: APP安全.原创 2021-06-11 17:13:31 · 309 阅读 · 0 评论 -
linux中 “/dev/null” 命令的探索
文章目录1.概述12.概述2.3.命令详解1.概述1/dev/null 在linux系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF。它等价于一个只写文件,并且所有写入它的内容都会永远丢失,而尝试从它那儿读取内容则什么也读不到。然而, /dev/null对命令行和脚本都非常的有用。2.概述2.通常情况下把/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它原创 2021-06-08 07:31:08 · 1263 阅读 · 0 评论 -
APP安全合规梳理总结
链接: 安全合规原创 2021-05-29 17:12:42 · 1041 阅读 · 0 评论 -
linux系统下inotify源码分析
文章目录1.inotify调用2.在系统中的实现。2.1 inotify头文件定义2.1.1系统中的定位位置2.1.2定义的实现2.2 inotify_add_watch实现2.2.1inotify_add_watch.S在系统的位置2.2.2 inotify_add_watch.S具体代码实现2.3 inotify_init实现2.3.1在系统中inotify_init的位置2.3.2具体的代码实现2.4inotify_rm_watch 实现2.4.1系统中定位的位置2.4.2具体的实现2.5 inoti原创 2021-05-13 13:59:24 · 1269 阅读 · 1 评论 -
IDA交叉引用详解
交叉引用1.代码交叉引用2. 数据交叉引用3. 交叉引用列表1.代码交叉引用代码交叉引用的前缀为:CODE XREF如下图显示,箭头方向表示引用位置的相对方向。每一个交叉引用的最后一位后缀表示引用的类型:o 普通流 ,表示一条指令到另一条指令的顺序流p 调用流,表示控制权被转交给目标函数,如BL等命令j 跳转流,表示分支操作,常见于if等操作2. 数据交叉引用数据交叉应用的前缀为:DATA XREF如下图所示,数据交叉引用每一个交叉引用的最后一位后缀表示引用的类型r 读取原创 2021-05-13 11:36:40 · 3455 阅读 · 3 评论 -
IDA调试跟踪
这里写目录标题1.IDA调试概述2.指令跟踪3.函数跟踪4.栈跟踪5.监控1.IDA调试概述IDA中的调试跟踪是一种记录方法, 它主要是用于记录一个进程在执行过程中发生的特定事件。跟踪分为两类:指令跟踪和函数跟踪。2.指令跟踪在IDA打开指令跟踪方法:Debugger-Tracing-Instruction TracingIDA将记录被指令更改的地址、指令和任何寄存器的值。(指令跟踪将减慢被调试进程的执行速度,因为调试器必须单步执行这个进程,以监视和记录所有寄存器的值)3.函数跟踪在IDA打原创 2021-05-13 11:24:49 · 2701 阅读 · 0 评论 -
arm64汇编几个关键代码解析。
栈指令应用sub sp, sp, #32 ; 更新栈顶寄存器的值,(可以看出:申请 32 字节占空间作为新用)stp x29, x30, [sp, #16] ; 保存调用该函数前的栈顶寄存器的值和该函数结束返回后下一将执行指令地址值add x29, sp, #16 ; 更新栈底寄存器的值,(可以看出:还剩余 16 字节空间给该函数用)adrp x0, l_.str@PAGE ; 获取 ‘l_.str’ 标签所在的页的地址原创 2021-04-02 14:25:34 · 957 阅读 · 2 评论 -
一文带你识别移动端主流加固的方案
文章目录1.移动端主流加固2. 移动端加固的详细分析2.1 爱加密加固的详细分析2.2梆梆加固2.3 腾讯乐固2.4 网易易盾加固2.5 360加固2.6 阿里云加固2.7 百度加固2.8娜迦加固2.9顶象加固3.识别移动端加固3.1 识别检测的方法3.21.移动端主流加固按照市场使用及推广目前市面上已经成型并进行销售的移动端加固主要有:1.爱加密加固2.梆梆加固:3.腾讯乐固4.网易易盾5.360加固6.阿里云加固7.百度加固8.娜迦加固9.顶象加固2. 移动端加固的详细分析2.原创 2021-03-03 00:40:08 · 8412 阅读 · 10 评论 -
IDA静态逆向分析工具详解一
文章目录1.目录结构2.生成的四个文件扩展名3. 基本规则4.常见前缀1.目录结构cfg(配置文件)idc(包含IDA内置脚本语言IDC所需的核心文件)ids(目录包含一些符号文件【IDA语法中的IDS文件】,这些文件用于描述可被加载到IDA的二进制文件引用的共享库的内容,包括 函数所需参数的数量,信息和返回类型。)loaders(目录用于识别和解析PE或ELF等已知文件格式的IDA扩展)plugins(目录包含IDA所需的插件)procs(目录包含IDA版本所支持的处理器模块,处理器模块为原创 2021-02-22 10:55:50 · 3046 阅读 · 3 评论 -
安卓逆向中ARM32指令集总结
链接: ARM32指令集总结.原创 2021-02-12 23:30:34 · 838 阅读 · 0 评论 -
用逆向的角度来深入研究函数。
链接: 对函数的逆向深入分析.原创 2021-02-07 10:12:27 · 658 阅读 · 1 评论 -
安卓逆向:ARM的基本结构总结
链接: ARM逆向基本结构总结原创 2021-02-07 10:04:20 · 772 阅读 · 3 评论 -
安卓逆向:逆向ARM64汇编的总结
链接: ARM64汇编总结原创 2021-02-07 09:59:39 · 953 阅读 · 1 评论 -
安卓反调试实现
不多说了,直接上源码,8种反调试方法。1.//ptrace自己,使得android_server附加不上void anti_debug01(){ptrace(PTRACE_TRACEME, 0, 0, 0);}2.//检测Tracepid的值void anti_debug02(){try{const int bufsize = 1024;char filename[bufsize];char line[bufsize];int pid = getpid();sprintf(fi原创 2021-01-27 10:45:46 · 3043 阅读 · 5 评论