ReversingTools
相关论坛¶
openrce.org woodmann.com hexblog.com https://github.com/michalmalik/linux-re-101
工具¶
符号执行工具 angr¶
https://xz.aliyun.com/t/3990 https://xz.aliyun.com/t/4039
import angr
import claripy
argv1 = claripy.BVS('argv1',50*8) # 如有程序需求参数的话,50个字符长度
proj = angr.Project('./target')
state = proj.factory.full_init_state()## proj.factory.entry_state(args=['./target', argv1]) 参数0是目标本身的名字
simgr = proj.factory.simgr(state)
simgr.explore(find = 0x40112e,avoid = 0x4010d5) # start traverse
#simgr.found[0]。solver.eval(argv1,cast_to=str)
simgr.found[0].posix.dumps(1)
import angr
import claripy
flag_chars = [claripy.BVS('flag_%d' % i, 8) for i in range(42)]
# flag = claripy.Concat(*flag_chars + [claripy.BVV(b'\n')])
flag = claripy.Concat(*flag_chars)
p=angr.Project('./fxck',auto_load_libs=True)
st = p.factory.full_init_state(
args=['./fxck'],
add_options=angr.options.unicorn,
stdin=flag,
)
# for k in flag_chars:
# st.solver.add(k >= 0xA)
# st.solver.add(k <= 0x7f)
fxck_simgr = p.factory.simgr(st)
fxck_simgr.explore(find = 0x400fbe,avoid = [0x400f71,0x400f4e]) # start traverse
java逆向¶
clss逆向工具:jad
PC¶
nm¶
列举目标文件中的符号
#include<stdio.h>
int main(int argc, char const *argv[])
{
int a=4;
float b=0;
scanf("%f",&b);
printf("%f",a+b);
return 0;
}
U: 未定义符号,通常为外部符号饮用
T: 在文本部分定义的符号,通常为函数名称
t: 在文本部分定义的局部符号,在C语言中,这个符号通常等同于一个静态函数
D: 已初始化数值
C: 为初始化数值
上述文件仅进行了编译,并未进行连接。
ldd&otool -L&dumpbin /dependents¶
依次为linux mac win下查看动态链接库的工具
objdump¶
一个反汇编工具,线性扫描算法。
解析elf文件还有readelf
静态连接和动态链接¶
静态连接体积大,因为包含了运行库。
Apktool¶
APKTool 是 GOOGLE 提供的 APK 编译工具。能够反编译及回编译 apk,同时安装反编译系统 apk 所需要的 framework-res 框架。 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看。
D2j-dex2jar¶
反编译 dex 文件到 jar 文件,进而可以用其他工具查看源代码。dex2jar是一款很不错的将android的.dex文件转换成Java的.class文件的转换工具,dex2jar是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合
Javasnoop¶
Javasnoop 是一个 java 应用程序安全测试工具,它允许你以拦截的方法,篡改数据和hack 运行在你计算机上的 java 应用程序。通常在没有源代码的情况下,测试 java 客户端 的安全性最好的结果是不可预知的,最坏的结果是不切实际的。 一个连接到目标机器的Java代理与JavaSnoop工具连接来测试该机器上的应用程序以便寻找其安全弱点。它可以是一个安全工具也可以成为黑客工具。
z3¶
两种写法都行,常用的
from z3 import *
x = BitVec('x',32)
solve(
x<50,
4*(x>>2)==x,
4*(x>>4)!=x>>2,
x>>4==0,
x>>3!=0
)
from z3 import *
x = BitVec('x',32)
s = Solver()
s.add(x<50)
s.add(4*(x>>2)==x)
s.add(4*(x>>4)!=x>>2)
s.add(x>>4!=0)
s.add(x>>3!=0)
for c in s.assertions():
print (c)
print(s.check())
for k,v in s.statistics():
print(k,v)
m=s.model()
print(m)
本页面的全部内容在 CC BY-NC-SA 4.0 协议之条款下提供,附加条款亦可能应用。