Frida特征检测 frida检测与防护端口检测检测 frida-server 默认端口 27042 是否开放。 12345678910111213bool detectByDefaultPort(){ struct sockaddr_in sa; int sock = socket(AF_INET , SOCK_STREAM , 0); memset(&sa, 0, sizeof 2024-07-29 Android #Frida
Frida Native层Hook学习笔记 Native层的hook如何hook知道函数地址就可以hook和主动调用 如何获取函数地址 利用函数名,通过Module.findExportByName函数获取函数地址。 通过Module.findBaseAddress函数获取所在库函数地址,然后加上函数偏移量即为函数地址。 hook示例12345678910111213141516171819const libName = 'li 2024-07-29 Android #Frida
Xposed插件开发 一、Xposed介绍1.1 引言frida 和 objection 对于App 的修改仅仅只是单次性的,App重启之后,我们就又需要手动使用 frida 或 objection 对 App 进行注入。不过我们有 Xposed 框架,基于此框架开发插件,则可以对 App 实现永久性修改。 1.2 Xposed原理Xposed 本质上是通过替换 Android 系统中的 zygote (或者说是 zy 2024-07-29 Android #Xposed
去除反混淆后程序中的冗余汇编代码 一、前言在之前去混淆的过程中,发现去混淆的程序中,伪代码与原程序伪代码相差无几,然而如果仔细观察汇编代码的话,可以发现存在较多的冗余代码,即混淆过程中产生的垃圾代码。那么如何去除这些冗余汇编指令呢? 二、基于Liveness Analysis的想法先给出我们需要解决一个例子(这是一个虚假控制流混淆中的部分代码,其中标*的为冗余汇编指令): 12345678910111213141516171819 2024-07-07 LLVM and OLLVM #Liveness Analysis
ollvm反混淆 一、前言此篇文章只讲思路,具体代码实现见https://github.com/gal2xy/AngrDeobfuscator。 二、去混淆2.1 去指令替换混淆指令替换一般可以使用llvm的pass进行优化,使用llvm-dis反汇编再使用opt的-o3等级优化。或者使用Miasm框架进行匹配,然后优化处理即可。 2.2 去字符串混淆没怎么了解字符串混淆这一块,就贴一下随风而行aa大佬的文章内容。 2024-06-25 LLVM and OLLVM #OLLVM #angr #去混淆
ROP入门 ROPROP(Return Oriented Programming)即返回导向编程,其主要思想是在 栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。 gadgets 通常是以 ret 结尾的指令序列,通过这样的指令序列,我们可以多次劫持程序控制流,从而运行特定的指令序列,以完成攻击的目的。 返回导向编程这一名称的由来是因为其 2024-06-16 Reverse #ROP
阅读笔记 —— 《Offensive Techniques in Binary Analysis》 II. AUTOMATED BINARY ANALYSIS自动二进制分析技术面临的问题: Replayability 和 Semantic insight 的权衡取舍 Replayability(可重现性) 漏洞重现存在差异。对整个应用程序的分析可以确定触发漏洞的原因,而对特定模块的分析可能会发现漏洞但无法重现它们。 Semantic insight(语义理解) 对程序行为的语义理解程度不同 2024-06-11 论文研读 #angr #论文研读
angr入门 什么AngrAngr 是一个功能强大且灵活的二进制分析框架,广泛应用于逆向工程、安全研究和漏洞检测等领域。它结合了多种技术(例如:静态分析、动态分析、符号执行等)(具体可参考The Art of War: Offensive Techniques in Binary Analysis),支持多种平台和架构,使得用户可以高效地分析和操作二进制文件。 angr 入门文档及API可参考: https: 2024-06-11 Reverse #angr
OLLVM源码解读 基础知识IR(intermediate representation)是前端语言生成的中间代码表示,也是Pass操作的对象,它主要包含四个部分: Module:一个源代码文件被编译后生成的IR代码。 Function:源代码文件中的函数。 BasicBlock:BasicBlock有且仅有一个入口点和一个出口点。入口点是指BasicBlock的第一个指令,而出口点是指BasicBlock的最后一 2024-06-11 LLVM and OLLVM #OLLVM Pass
从Clang到Pass加载与执行的流程 一、gdb动调clang文章开始之前,先通过gd动调clang来看一看整个过程是什么样的。 开始调试 1gdb clang 我这里调试的是release版本的clang(不想再编译了),显然提示了找不到clang的调试符号。我建议使用debug版的clang来调试,不然就看不到断点处的源码了,这对调试还是有影响的(有些函数下不了断点,不知道是不是这个原因)。 直接把断点下在main函数处 1g 2024-04-26 LLVM and OLLVM #LLVM Pass