- 博客(147)
- 资源 (1)
- 收藏
- 关注
原创 Android技术-修改SO导出符号
经常在使用第三方SDK的时候会莫名其妙报错,其中最常见的一种就是SO符号冲突,比如libA.so静态链接了libC.a,而libB.so动态链接了libC.so。这样便会导致符号冲突。又或者在使用不同版本的动态库,也会造成符号冲突。基于以上背景,可能存在一下几种解决方案。符号冲突的so重命名。
2023-11-07 17:09:11 577
原创 混淆技术研究-混淆技术-源码分析(2)
OLLVM(Obfuscator-LLVM)是基于LLVM(Low Level Virtual Machine)框架的一种代码混淆器。它主要用于对C/C++和汇编语言程序进行混淆,以增加代码的复杂性,提高代码的安全性和抵抗逆向工程的能力。IR(Intermediate Representation)是指中间表示,是编译器在将源代码转化为目标代码的过程中使用的一种中间形式。它作为源代码和目标机器代码之间的一个抽象层,方便进行代码优化、分析和生成。Module、Function、BasicBlock和Ins
2023-09-28 16:11:44 624
原创 混淆技术研究-OLLVM混淆-指令替换(SUB)
指令替换(Instruction Substitution)是一种代码混淆技术,用于将程序中的原始指令替换为等效但更难理解和还原的指令序列。通过指令替换,可以增加程序的复杂性和抵抗逆向工程的能力。指令替换可以采用不同的方式进行,下面是一些常见的替换方式:常量展开(Constant Unfold):将原始指令中的常量操作替换为等效的指令序列,增加了代码的复杂性和可读性。原始指令:a = b * 5替换指令:a = (b
2023-09-28 15:50:43 1323
原创 汇编基础(3) --X86-64
x86_64汇编语言是一种低级程序设计语言,用于控制x86_64架构的处理器执行特定的指令序列。它提供了对底层硬件的直接访问和控制,因此常用于编写性能关键的系统软件、驱动程序和嵌入式设备。对于熟悉高级编程语言(如C或C++)的开发者来说,了解和学习x86_64汇编语言有助于深入了解计算机的工作原理和优化代码的性能。x86_64汇编语言使用助记符(mnemonics)来表示不同的机器指令。这些指令可以操作寄存器(Registers)、内存(Memory)和标志位(Flags)等系统资源。
2023-09-25 10:52:12 1265
原创 汇编基础(1)--ARM32
ARM32,也称为ARM Architecture v7,是一种32位的指令集架构(ISA),由ARM公司开发并广泛应用于嵌入式系统和移动设备。ARM32是ARM体系结构中较早的版本,被许多处理器核使用,包括Cortex-A、Cortex-R和Cortex-M系列。ARM32架构的主要特点如下:精简指令集:ARM32使用了精简指令集(RISC),指令长度固定为32位,使得指令执行更加高效。可变长度指令:ARM32指令可以是16位或32位长,因此可以灵活地进行代码密度和性能的权衡。
2023-09-20 18:05:26 1370
原创 汇编基础(2) -- ARM64
ARM架构中,ARM64(也称为AArch64)是一种64位处理器架构,它是ARMv8指令集的一部分。与之前的32位ARM架构相比,ARM64提供了更大的寄存器容量、更广阔的地址空间和更高的计算能力。64位版本的指令集和32位版本的指令集有一些区别,这些区别主要涉及到以下几个方面:寄存器:ARM64架构提供了31个通用寄存器,每个寄存器的容量为64位。相比之下,32位ARM架构只有16个通用寄存器,每个寄存器的容量为32位。操作数大小:在ARM64架构中,所有数据都是以64位的形式进行处理。
2023-09-20 17:43:49 2786
原创 混淆技术研究-OLLVM混淆-控制流平坦化(FLA)
控制流平坦化通过将程序中的条件分支语句转化为等价的平铺控制流来实现。通常,这包括将原始的分支语句(如if语句、switch语句)中的每个分支提取出来,并将它们放置在一系列连续的基本块中,然后使用一个状态变量或标志来选择要执行的基本块。这样,原本嵌套的条件分支结构就被展开成了一个扁平的基本块序列。
2023-09-10 22:25:11 904
原创 混淆技术研究-OLLVM混淆-虚假控制流(BCF)
虚假控制流(BCF, Bogus Control Flow),该方法通过在当前基本块之前添加一个基本块来修改函数调用图。这个新的基本块包含一个不透明谓词,然后进行条件跳转到原始基本块。并且原始基本块也被克隆,并填充了随机选择的垃圾指令。
2023-09-10 16:15:28 8495
原创 混淆技术研究-混淆技术简介(1)
代码混淆技术是一种软件保护技术,它通过对程序代码进行变换和加密来增加逆向分析的难度,从而提高软件的安全性。具体来说,代码混淆技术可以将程序代码中的函数、变量名替换成无意义的字符,使得逆向分析者难以理解源代码的含义。同时,混淆技术还可以对代码进行重组、插入假代码、修改逻辑等操作,从而使得程序的行为变得更加复杂和难以理解。此外,混淆技术还可以对程序中的字符串、常量和数据进行加密处理,以增加破解难度。代码混淆技术广泛应用于各种软件,尤其是移动应用和游戏等领域,可以有效地防止软件被盗版、破解和篡改。
2023-09-08 16:41:17 8432
原创 IDA系列--高级技巧--JUMPOUT处理
当使用IDA逆向分析时,会遇到各种各样的无法F5反汇编的情况,例如JUMPOUT情况,本文通过各种例子讲解如何处理这种情况。
2023-05-23 11:55:12 2130
原创 Flatbuffer技术研究
逆向分析研究过程中,会遇到相关的FlatBuffer知识,主要涉及FlatBuffer安装、源码编译、二进制流逆向解析、正向研发等技术点。运行无报错即为Flatbuffer文件格式。
2022-12-13 16:07:30 726
原创 IOS逆向-Metal逆向
什么是Metal?Metal 是一个和 OpenGL ES 类似的面向底层的图形编程接口,通过使用相关的 api 可以直接操作 GPU ,最早在 2014 年的 WWDC 的时候发布。特点:GPU 支持的 3D 渲染和 CPU 并行处理数据 (深度学习)提供低功耗接口可以和 CPU 共享资源内存用途图片处理 滤镜/调整视频处理机器学习大计算工作,分担CPU压力Metal逆向default.metallib解析Shader转换C。
2022-10-25 18:30:16 1775
原创 Android系列--刷机
7.1. 如果刷入bootloader出错(FAILED (remote: Command Flash Error))5.1 注意:可以自行解压到其他目录,设置好系统路径(\sdk\platform-tools)下载原生的rom或者其他自定义rom(谨慎,可能存在病毒)3.2 同时按下音量键+ - 和电源键 (不同手机不同)解决: 命令: fastboot set_active b。(pixel2 以上可直接点击Flash进行刷机)连接USB,退出Google账号(如有)进入bootloader。
2022-10-21 10:56:30 625
原创 IDA系列--高级技巧--数据结构
当源码的函数中使用了结构体类型的变量时,反汇编代码中对于结构体中成员的获取往往都是通过一个`指针 + offset`来获取的。对于阅读源码静态分析极其麻烦,因此需要创建数据结构简化分析
2022-10-09 16:39:08 1278
原创 Frida系列--动态加载
动态加载so文件,IOS动态加载framework等,因此使用Frida进行Hook时,会提示找不到Module,因此需要延时Hook或者Hook动态加载函数进行适配。
2022-08-10 18:13:41 2096
原创 Frida系列--Stalker原理分析
Stalker 是Frida的代码跟踪引擎。它允许跟踪线程,捕获每个函数、每个块,甚至是执行的每条指令。显然,Stalker底层实现在某种程度上是依赖于架构的,尽管它们之间有很多共同点。Stalker目前支持运行在常见的 AArch64 架构的Android 或iOS的手机和平板电脑上,以及常见的 Intel 64 和 IA-32 架构台式机和笔记本电脑上。对于ARM32位的支持相当有限,会出现一些BUG,建议使用ARM64位进行Trace。...
2022-08-02 18:39:01 1235
原创 Flutter逆向系列--实战技术
本文主要通过一个实际例子,讲解逆向分析Flutter的具体步骤和方法论以某🐟为例子由于Flutter本身开发标准一致,降低了RD人员适配多端的工作量,且本身具有很好的安全性,因此越来越多的应用尝试使用Flutter。而逆向Flutter应用却不像Java一样简单,常用的IDA、JEB等工具完全失效。.........
2022-07-07 17:18:20 4277
原创 Android技术系列--Python ADB实现
有时候Python大型项目需要使用adb操控Android设备,但是直接使用adb执行命令可能会有各种安全问题,以及需要适配平台的问题。本文通过实现与PC ADB Server进行通信的socket,之后与adb daemon完成ADB通信,无需adb可执行文件。使用Python实现ADB,不执行命令利用Socket和PC端的adb server进行通信,从而控制Android端...
2022-06-14 11:12:38 1894
原创 Unidbg源码分析系列-- unidbg-android分析(三)
本文主要阅读并分析unidbg-android目录下源码的作用 文件操作相关源码目录xHook相关接口主要的文件目录,包括android虚机实现、文件系统的实现等等待更新,会详细讲这一趴实现系统文件内容的读写操作,比如读写 等等系统文件例如读写操作MapsFile......
2022-06-07 21:04:37 755 1
原创 Xposed系列--技巧篇
Xposed Hook代码需要熟能生巧,包括Hook各种各样奇怪的api或者系统api,都需要一定的基础知识,本文主要是收集整理相关的Hook代码,帮助记忆。这其中包括一些经验,和各类Hook基础。
2022-05-17 18:04:27 1040
原创 Android逆向系列--重打包
文章目录背景步骤原理分析签名绕过背景由于某些情况下需要重打包App,如添加android:debuggable=“true”,注入smali代码等,本文主要探讨重打包的过程及其难点解决方案,比如签名绕过等步骤流程图原理分析由于随意修改资源强行绕过回编译过程,因此可能导致app无法正常运行,此时的思路是,回编译后的apk中的AndroidManifest.xml已经是二进制形式,因此如果直接替换原始APK中的xml即可正常绕过。资源修正思路: 对于出现错误的item,直接脚本批量删除即可
2021-09-27 15:15:30 854
原创 Xposed系列--使用篇
文章目录背景步骤背景本文主要介绍Xposed Hook的使用步骤步骤在AndroidManifest.xml <application> 标签中增加下面Tag<meta-data android:name="xposedmodule" android:value="true" /><meta-data android:name="xposeddescription" android:value="hookxxxx" />&
2021-09-26 18:41:36 194
原创 Xposed系列--入门篇
背景本文主要从Xposed的安装、使用等基础知识进行讲解安装环境: Pixel 2 Android 8.1下载XposedInstller_3.1.5.apk下载xposed-v90-sdk27-arm64-beta3.zipadb push xposed-v90-sdk27-arm64-beta3.zip /sdcard/adb reboot recoveryInstall --> 选择xposed-v90-sdk27-arm64-beta3.zip --> swipe刷入
2021-09-26 15:25:20 1244
原创 IOS逆向-MonkeyDev使用
文章目录背景MonkeyDev入门Logos HookSubstrate HookFish Hook参考背景很多情况下,比如抓帧、动态调试、持续性Hook等需要进行重打包重签名debug,因此本篇主要分享MonkeyDev的各类使用姿势MonkeyDev入门安装使用 <点我>绕过签名校验、反调试检测Logos Hook文档 LogosSubstrate HookFish Hook参考MonkeyDeviOS应用安全 MonkeyDev的使用MonkeyDev安
2021-09-17 16:27:24 1697 2
原创 Android证书绑定绕过研究(四)
背景本文以分析OpenSSL开源代码为切入点,分享扫过证书绑定的逆向思路逆向思路获取关键信息通过Log信息通过App报错弹框信息通过一些常见的报错信息,如verify error、ssl error等根据关键信息定位到函数strings命令搜索grep命令搜索IDA搜索静态分析利用IDA Graph进行分支分析一般是寻找返回值为int的函数或者是寻找cmp的比较值利用Frida Hook关键函数通过开启/关闭代理开发,对比进行Hook,找出差异点
2021-09-07 16:16:19 344
原创 Android证书绑定绕过研究(三)
背景第三篇以获取客户端证书并修改客户端证书为切入点,探索该方式绕过SSL pinning的可能性客户端证书获取待更新绕过椒盐参考
2021-08-16 11:52:12 404
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人