Straw's B1og.

Straw's B1og.

We1come t0 Straw's wor1d 喵~

ios学习篇(2)
ios学习篇(2)ipa文件结构​ ipa以压缩包的形式打开后进入payload中会有很多的文件存在,我们如何进行有效的辨别每个文件是什么,以快速找到对于逆向最有用二进制文件呢,先从ipa的结构入手。 ​ 本文章将以一个开源的社交app为例子进行简单介绍 Info.plist​ Info.plist是一个应用的相关配置文件(类似于android的AndroidManifest.xml) ​ 可以用plist Editor来查看大致的相关配置信息,当然用vscode看也行不过比较难看 ​ 后面还涉及一些权限啥的配置,不展开细讲 _CodeSignature ipa包签名文件...
ios学习篇(1)
ios学习篇(1)引言​ 哎,感觉学安卓太难了,没有用过安卓系统,但是之前有过ios越狱经验,干脆直接学ios逆向好了。学了一个星期,才刚把基础题做出来。为了省钱不买mac,就用windows硬搞,吃尽了苦头啊。。。 工具/设备iphone 7:dopamine(多巴胺),牛蛙助手,巨魔商店,open-ssh,debugserver windows系统:ssh,爱思助手,ida 无根越狱(仅适配ios17以下版本)看了很多教程,试过了WinRa1n,直接报错差点成为苹果板砖了。感觉还是多巴胺一键最简单 前置步骤 ​ 先去把爱思助手下了,爱思能帮你配好很多环境,还有唯一可见的...
反混淆学习-fla控制流平坦化篇
反混淆学习-fla控制流平坦化篇感觉反混淆比混淆难多了。。。 现在也暂时不会怎么自己写ida-python脚本来反混淆 还是先学学看吧 deflat工具介绍网上常用的反控制流平坦化的工具,可以直接在终端运行将经过fla编译的可执行文件转化为反混淆过的可执行文件,也支持arm架构。 下载地址:deflat: use angr to deobfuscation 1$ python deflat.py --file 文件名 --addr 初始地址 需要一个python的angr库 因为要用到初始地址,所以就要求你的可执行文件没开PIE(随机地址)保护 (要求还挺苛刻的,估计只有比赛值得一用...
OLLVM-常量替代
OLLVM-常量替代感觉跟指令替代类似,仅支持32位整数替代 (建议结合代码食用) 替换方案 代码ConstantSubstitution.cpp 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101...
OLLVM-随机控制流
OLLVM-随机控制流感觉跟虚假控制流差不多,就是badyBB和cloneBB的定向跳转转到了随机跳转 (建议结合代码食用) 第一步:基本块分割与虚假控制流相同 第二步:基本块克隆 第三步:构造随机跳转,插入生成随机数指令,插入随即跳转,对随机数进行恒等变换 第四步:构造虚假随机数跳转 代码RandomControlFlow.cpp 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686...
OLLVM-指令替代
OLLVM-指令替代(建议结合代码后的注释食用!) 例如a+b=a-(-b),a^b= ( ~ a&b) | (a& ~ b) 且仅支持整数 加法替代 减法替代 与替换 或替换 异或替换 代码Substitution.cpp 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878...
OLLVM-虚假控制流
OLLVM-虚假控制流建议结合代码后的注释食用! 原理 步骤第一步:基本块拆分 第二步:基本块克隆 第三步:构造虚假跳转 代码BogusControlFlow.cpp 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#include "llvm/IR/Function.h"...
OLLVM-控制流平坦化
OLLVM-控制流平坦化建议结合代码后的注释食用! 第一步:保存基本块 第二步:创建分发块和返回块 第三步:实现分发块调度 第四步:实现调度变量的自动调整 第五步:修复PHI指令和逃逸变量 代码:FLattening.cpp 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596...
llvm IR常用指令二
llvm IR常用指令二内存访问和寻址操作alloca指令< result>=alloca < type> [,< ty> < NumElements>] [, align < alignment>]; 分配sizeof(type)*NumElements字节的内存,分配的地址与alignment对齐 1234%ptr = alloca i32 ;分配4字节的内存并返回i32类型的指针%ptr = alloca i32,i32 4 ;分配4*4字节的内存并返回i3...
llvm IR常用指令一
llvm IR常用指令一终结指令ret指令ret < type> < value>;返回特定类型返回值的return指令 ret void;无返回值的return指令 1234Test:ret i32 5;返回整数5ret void;返回无符号ret { i32 , i8 } { i32 4 , i8 2 };返回结构体 br指令br i1 < cond>,label < iftrue>,label < iffalse>;有条件跳转 br label < dest>;无条件...