ios学习篇(1)引言 哎,感觉学安卓太难了,没有用过安卓系统,但是之前有过ios越狱经验,干脆直接学ios逆向好了。学了一个星期,才刚把基础题做出来。为了省钱不买mac,就用windows硬搞,吃尽了苦头啊。。。
工具/设备iphone 7:dopamine(多巴胺),牛蛙助手,巨魔商店,open-ssh,debugserver
windows系统:ssh,爱思助手,ida
无根越狱(仅适配ios17以下版本)看了很多教程,试过了WinRa1n,直接报错差点成为苹果板砖了。感觉还是多巴胺一键最简单
前置步骤
先去把爱思助手下了,爱思能帮你配好很多环境,还有唯一可见的...
反混淆学习-fla控制流平坦化篇感觉反混淆比混淆难多了。。。
现在也暂时不会怎么自己写ida-python脚本来反混淆
还是先学学看吧
deflat工具介绍网上常用的反控制流平坦化的工具,可以直接在终端运行将经过fla编译的可执行文件转化为反混淆过的可执行文件,也支持arm架构。
下载地址:deflat: use angr to deobfuscation
1$ python deflat.py --file 文件名 --addr 初始地址
需要一个python的angr库
因为要用到初始地址,所以就要求你的可执行文件没开PIE(随机地址)保护
(要求还挺苛刻的,估计只有比赛值得一用...
OLLVM-常量替代感觉跟指令替代类似,仅支持32位整数替代
(建议结合代码食用)
替换方案
代码ConstantSubstitution.cpp
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101...
OLLVM-随机控制流感觉跟虚假控制流差不多,就是badyBB和cloneBB的定向跳转转到了随机跳转
(建议结合代码食用)
第一步:基本块分割与虚假控制流相同
第二步:基本块克隆
第三步:构造随机跳转,插入生成随机数指令,插入随即跳转,对随机数进行恒等变换
第四步:构造虚假随机数跳转
代码RandomControlFlow.cpp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686...
OLLVM-指令替代(建议结合代码后的注释食用!)
例如a+b=a-(-b),a^b= ( ~ a&b) | (a& ~ b) 且仅支持整数
加法替代
减法替代
与替换
或替换
异或替换
代码Substitution.cpp
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878...
OLLVM-虚假控制流建议结合代码后的注释食用!
原理
步骤第一步:基本块拆分
第二步:基本块克隆
第三步:构造虚假跳转
代码BogusControlFlow.cpp
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091#include "llvm/IR/Function.h"...
OLLVM-控制流平坦化建议结合代码后的注释食用!
第一步:保存基本块
第二步:创建分发块和返回块
第三步:实现分发块调度
第四步:实现调度变量的自动调整
第五步:修复PHI指令和逃逸变量
代码:FLattening.cpp
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596...
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常用指令一终结指令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>;无条件...
java学习(2)外置类123456789101112131415161718192021222324252627282930313233343536public class StudentTest { public static void main(String[] args) { Student s=new Student("straw",20); System.out.println(s.getAge()); System.out.println(s.getName()); }}cla...