![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
安全
文章平均质量分 50
小道安全
这个作者很懒,什么都没留下…
展开
-
对一个手游修改器锁机APP的分析
锁机app的逆向原创 2022-08-31 11:46:40 · 1019 阅读 · 0 评论 -
网络钓鱼技术
对网络钓鱼技术的解析原创 2022-08-31 11:41:31 · 1539 阅读 · 0 评论 -
浅谈程序的数字签名
数字签名原理解析原创 2022-08-25 09:52:21 · 2515 阅读 · 0 评论 -
API安全的应用和分析
API安全攻防应用原创 2022-08-24 15:01:07 · 1434 阅读 · 0 评论 -
软件开发过程中常见漏洞的解析
软件漏洞的解析原创 2022-07-19 18:44:38 · 1929 阅读 · 0 评论 -
实战化场景下的容器安全攻防之道
容器已经成为黑客重要的攻击目标,但是目前非常缺乏有效的安全手段。 不管是在真实网络实战中,还是在相关的攻防演习中,以容器为代表云原生基础设施都将是攻防双方必争之地。原创 2022-06-24 14:58:57 · 365 阅读 · 0 评论 -
设备指纹技术分析和应用分析
设备指纹的技术分析和应用。原创 2022-06-20 10:04:43 · 3076 阅读 · 0 评论 -
对中病毒微信样本的逆向分析
https://mp.weixin.qq.com/s/243hAp8rGcjHXkoWSG6xgQ原创 2022-02-10 23:50:47 · 1831 阅读 · 0 评论 -
探索android系统中的强指针实现
强指针和弱指针基础android中的智能指针包括:轻量级指针、强指针、弱指针。强指针:它主要是通过强引用计数来进行维护对象的生命周期。弱指针:它主要是通过弱引用计数来进行维护所指向对象的生命周期。如果在一个类中使用了强指针或者弱指针的技术,那么这个类就必须从RefBase这个类进行做继承,因为强指针和弱指针是通过RefBase这个类来提供实现的引用计数器。强指针和弱指针关系相对于轻量级指针来说更加亲密,因此他们一般是相互配合使用的。强指针原理分析以下针对源码的分析都是来源于android5.0原创 2021-10-06 23:43:24 · 536 阅读 · 0 评论 -
解析android系统中的轻量级指针
智能指针来源由于android系统底层的很大的一部分是用C++实现的,C++的开发就难免会使用到指针的这个知识 点。而C++的难点和容易出问题的也在于指针。使用指针出错,常常会引发带来对项目具有毁灭性的错误,内存泄漏、逻辑错误、系统崩溃。引发指针错误情况表现常常有如下几个表现情况:1.申请了内存空间,但是忘记释放指针所指向的对象占用的内存空间。2.使用了无效的指针。因此在android的C++代码部分采用了智能指针的技术。智能指针通过一种能够自动危害对象引用计数的技术。来解决C++中指针存在的缺陷原创 2021-10-06 12:36:09 · 418 阅读 · 2 评论 -
Binder线程池的启动流程分析
理论基础BinderBinder它是android中的一种进程间通信机制,它主要采用的是CS架构模式。Binder框架中主要涉及到4个角色Client、Server、Service Manager及Binder驱动,其中Client、Server、Service Manager运行在用户空间,Binder驱动运行在内核空间。线程池线程池它是一种用于多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,原创 2021-10-04 22:12:06 · 408 阅读 · 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 · 600 阅读 · 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 · 3413 阅读 · 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 · 787 阅读 · 2 评论 -
android多开原理和检测。
多开检测理论基础多开实现原理解析代码实现:多开包名代码实现:多用户理论基础app多开常用于做一些不合法的事情,如高羊毛,黑灰产,甚至会对app的功能做破坏修改。因此多开在实际app应用中是有一定危害性的,因此对多开环境的识别是很重要的,通过识别多开环境有利于让app更加安全。多开实现原理解析app多开实现原理很多种类,如采用多用户方式(mumu模拟器的多开器实现)、通过创建不同进程名称(多开分身、双开助手)进行运行。我们知道在每一个的app都有属于自己的私有目录,一般是“/data/data/包名原创 2021-08-25 16:48:37 · 5907 阅读 · 3 评论 -
初探android系统的input在java层实现
input实现理论背景关键代码实现解析:java层代码Input类定义sendKeyEvent 函数定义sendSwipe 函数定义injectKeyEvent 函数定义injectMotionEvent 函数定义sendMove 函数定义理论背景当我们在分析android的键盘记录的时候就不得不和input进行打交道,那么input在系统中是怎么进行实现的?Android手机中默认携带input子系统,并且开在机就会产生默认的mouse和keyboard事件,这样使得用户开机就可以触屏点击和使用按键原创 2021-08-21 11:40:27 · 382 阅读 · 2 评论 -
android匿名共享内存原理浅读
理论基础android系统在应用程序框架层中提供了两个C++类MemoryHeapBase和MemoryBase来创建和管理匿名共享内存。如果一个进程需要与其他进程共享一块完整的匿名共享内存,那么就可以通过使用MemoryHeapBase类类创建这块匿名共享内存。如果一个进程创建一块匿名共享内存后,只希望与其他进程共享其中的一部分,那么就可以通过MemoryBase类来创建这块匿名共享内存。IMemory.h:定义内存相关类的接口,表示堆内存的类IMemoryHeap和BnMemoryHeap,表示一原创 2021-08-18 22:23:10 · 1143 阅读 · 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 · 964 阅读 · 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 · 1050 阅读 · 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 · 2835 阅读 · 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 · 1833 阅读 · 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 · 2486 阅读 · 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 · 634 阅读 · 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 · 2169 阅读 · 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 · 1606 阅读 · 1 评论 -
从汇编角度看函数
函数1. 函数简介2. 从汇编中看函数1. 函数简介在代码开发过程中,函数是一个必然存在的,它是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带有一入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,供计算机处理,所谓出口,就是指函数的计算结果,也称为返回值,在计算机求得之后,由此口带回给调用它的程序。函数主要需要关注两个方向问题:函数参数,函数返回值2. 从汇编中看函数函数功能的实现部分PUSH EBP 提升堆栈原创 2021-07-29 10:58:04 · 490 阅读 · 1 评论 -
你需要掌握的APP隐私合规。
链接: 点击进行阅读.原创 2021-07-23 18:03:37 · 566 阅读 · 2 评论 -
对勒索样本的逆向实践。
链接: 对勒索病毒样本分析.原创 2021-07-09 18:00:17 · 350 阅读 · 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 · 4149 阅读 · 1 评论 -
APP安全梳理
链接: APP安全.原创 2021-06-11 17:13:31 · 273 阅读 · 0 评论 -
APP安全合规梳理总结
链接: 安全合规原创 2021-05-29 17:12:42 · 955 阅读 · 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 · 909 阅读 · 1 评论 -
IDA交叉引用详解
交叉引用1.代码交叉引用2. 数据交叉引用3. 交叉引用列表1.代码交叉引用代码交叉引用的前缀为:CODE XREF如下图显示,箭头方向表示引用位置的相对方向。每一个交叉引用的最后一位后缀表示引用的类型:o 普通流 ,表示一条指令到另一条指令的顺序流p 调用流,表示控制权被转交给目标函数,如BL等命令j 跳转流,表示分支操作,常见于if等操作2. 数据交叉引用数据交叉应用的前缀为:DATA XREF如下图所示,数据交叉引用每一个交叉引用的最后一位后缀表示引用的类型r 读取原创 2021-05-13 11:36:40 · 3118 阅读 · 3 评论 -
系统装机软件的一次分析
链接: [大白菜](https://mp.weixin.qq.com/s?__biz=MzUxODkyODE0Mg==&mid=2247484862&idx=1&sn=f1b731312d68df49c2232f8c897cda16&chksm=f98027dfcef7aec99ef1162b4673773a8163d07a374b29509a6e068c1afc2f10c1bade9b2f48&mpshare=1&scene=1&srcid=0506原创 2021-05-08 10:41:11 · 270 阅读 · 2 评论 -
网站被入侵的分析排查思路
文章目录1.行为分析2.流量行为3.日志文件1.行为分析 通过动态检测系统上进行执行的行为来进行判断是否为恶意行为,网站是否被入侵攻击。例如通过 hook 方案进行, hookjava/php 底层的命令执行函数,判断当前是否执行到命令执行函数,如果出现这个情况,就说明网站很有可能已经被入侵攻击。2.流量行为通过进行收集网站后台服务器的网络流量进行大数据分析,排查黑客攻击者发送的 payload 攻击特征,特别是 Webshell 特征进行检测和告警,用于预警信息手机及应急方案的处理。3.日志文原创 2021-05-08 10:37:09 · 1290 阅读 · 10 评论 -
对病毒样本的完整功能分析
链接: 对伪装docx病毒做分析.原创 2021-04-02 10:11:28 · 425 阅读 · 0 评论 -
VC实现将网址解析出所有ip地址
通过调用gethostbyname 系统函数进行解析void GetHostNamebyIp(char* hostName){ if(NULL == hostName) { return; } int WSA_return = 0; WSADATA WSAData; HOSTENT *host_entry; char szIP[1024] = {0}; AfxMessageBox(hostName); WSA_return=WSAStartup(0x0202,&WS原创 2021-03-31 10:56:32 · 3219 阅读 · 8 评论 -
教你如何写更安全的代码
文章目录1.技术背景2.字符串的安全方案1.直接使用字符串2.字符串赋值到数组使用3.调用系统函数安全方案1.直接调用系统的函数2.自定义实现函数再调用函数4.总结1.技术背景作为程序开发人员,我们害怕,听到开发的代码,被测试出bug;我们更害怕,听到我们所开发出来的产品上线了,被新手安全研究员给反汇编逆向破解,代码功能直接被人给盗取了。下面根据我自己的一些项目经验,跟大家分享两点如何能开发出相对安全的代码。以下方案不局限于任何语言代码开发,是一个相对通用的安全编码方案。2.字符串的安全方案1.直接原创 2021-03-23 10:25:59 · 1638 阅读 · 5 评论 -
如何提高自己代码的安全性?
编码安全技巧: 请点击链接.原创 2021-03-20 23:53:10 · 1058 阅读 · 0 评论 -
夺取应用程序 “制空权“:内存数据
文章目录1.技术背景2.效果展示3.代码实现4. 知识清单PE结构概述PEB结构概述调用系统未导出函数方法5. 关键函数及结构解析1.ReadProcessMemory函数2. _LIST_ENTRY结构3. _PEB_LDR_DATAS结构4. _LDR_MODULE 结构1.技术背景在病毒查杀,应用安全对抗,静态逆向应用,动态逆向应用,最重要的对象就是,应用程序的内存数据。病毒查杀对抗:需要获取查杀对象的内存数据进行和病毒库的特征做比对。应用安全对抗:需要保护自身的内存数据不被转存。静态逆向原创 2021-03-15 22:29:22 · 1316 阅读 · 8 评论