1、 ida
shift f12---跳转string
ctrl x------交叉引用
shift e-----数据导出
a-----------转化为字符串数组
\------------去除灰色的变量解释
/------------添加注释
N-----------重命名
ctrl z------返回上一步,撤回原行为
Y-----------重组数组(更改变量类型)
*(shift+8)------------构建数组(记得取消dup格式)
u-------------取消定义
2、pyc
形如%1f要将%改成\x
for后:换行要tab
3、凯撒密码
4、RSA
选中(OEP)后按 shift d-------调用字符串界面
5、汇编代码转换成二进制可执行文件
linux下gcc安装
sudo apt install gcc
gcc -o name(可执行文件名) name.s(汇编代码)
6、打包
(1)upx使用
upx程序路径于windows终端打开,upx.exe 需脱壳程序地址与名称
wsl下直接upx -d -文件名 注:原程序(文件)直接脱壳,无新文件产生。
(2)pyinstxtractor.py使用
用于脱pyinstaller
脚本路径与windows终端打开,python3 pyinstxtractor.py 需脱壳程序地址与名称
脱壳后文件将于pyinstxtractor.py路径下生成
pyc文件转py 安装.pyc
转.py
所使用的库uncompyle6
,这里用了清华源
并且指定使用了3.9.0
版本库
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uncompyle6==3.9.0
找到测试脚本.pyc
所在的文件夹,cd
到此路径下,并输入以下打包命令:
uncompyle6 -o 测试脚本.py 测试脚本.pyc
7、加密函数
搜索一下(CryptCreateHash)是哈希算法的意思,且0x8004表示sha1方法
这些粉红色的东东是Windows API
8、ida换编码
类似这种输出一个&byte_的,有可能是因为有中文。
Option---general---strings---Default 8-bit由UTF-8换成另一个,重启ida,注意load exsite,id64存在编码方式不变。尝试(1)不重启,按f5. (2)选中对应位置(注意带上‘0’)按a,此时才能把中文带到伪代码中,不加‘0’可能带不到伪代码中。
有的中文换编码后也没发现,找到对应位置选中,右键即可看到内容,如图
9、花指令---jmp
选中此句,点u
找到多出的语句,此题为e9那句
直接把e9那句nop掉,再按c转换成c代码
最后在main函数前面选中点p重新定义成函数
定义后结果
之后就可以反编译啦
10、dup命令
8 dup(0),分配一段空间,由8个0组成
故数组的后8个元素均为0,而且末尾不存在8这个元素。
11、ida中元素转换为c语言数组常见错误
在clion中用h后缀表示的十六进制会报错,更不能加上单引号使其强行正确,应转化为0x前缀格式
字符型:先全选R键转换,再复制粘贴;
整型:shift e提取,再复制 (还有一个好处就是,无需全选,只需选中对应行,shift e可以提取该数组的所有值)
12、逆向中py脚本的编写
(1)字符串:
一维:a=‘ ’
二维:b=[” “,” “]
(2)将字符转换为ASCLL码值
ord()
将ASCLL码值转变为字符
chr()
(3)py中整除符号://
(4)print()会自动换行,不换行需加上print('',end=' ')
13、ida识别错误转换问题
很明显是数组指针类型的v3,故把__int64改成char *
后面的v3[i%3]+2*(i/3)也将改变成二维数组的类型
14、迷宫:
找到迷宫(二维数组看成一个迷宫,三维数组看成多个迷宫)(自定义数组根据题目含义分析)
(1)直接convert---convert string----复制该十六进制数据,在ida对话框中输出,即可得到字符
(2)先按u取消定义,后将其改为Byte型,根据需要改变类型Byte、word、dword
再按*重组数组,一般可以知道迷宫的行数或者列数,估计另一个,相乘得到数组大小。
再convert to Byte或word dword
15、linux文件远程调试
Debugger---process options
Application 路径加文件名(linux虚拟机)(可以只在这行加文件名,让linux自动检测,其他行不写任何东西)
Input file 路径加文件名(Linux虚拟机)
Directory 路径(Linux虚拟机)
Hostname 虚拟机ip
16、混淆
调试!!!
让程序跑起来,之后输入内容,在内容位置下断点(下断点后按ese返回),调用该内容时便会停止,分析该处对输入内容的加密!
17、z3的使用
第一步 创建变量
import z3
x=z3.Int('x') 或x,y,z,e,f=z3.Ints("x y z e f")
第二步 创建求解器
solver=z3.Solver()
第三步 添加约束
solver.add()
第四步 求解方程
if solver.check()=z3.sat: print(solver.model()) \\或者 m=solver.model() print(m[x]),print(m[y])
\\注意其中的m[x]与m[y]不是一个数字类型,而是一个字符串形式的数据,不能直接进行加减运算。
\\m[x].as_long()可进行加减计算
\\转换成字符串也要chr(m[x].as_long())
else: print("该方程无解")
18、D810插件使用
shift+ctrl+D启动
启动后选择对应的混淆,这里是ollvm混淆,故选择此项,点Start,之后就可以欢快的按F5啦。