花指令
花指令什么是花指令花指令实质就是一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑。在软件保护中,花指令被作为一种手段来增加静态分析的难度,使程序无法很好的反编译。花指令也可以被用在病毒或木马上,通过加入花指令改变程序的特征码,躲避杀软的扫描,从而达到免杀的目的。 花指令大致可以分为可执行花指令和不可执行花指令。 这两天我学习了两位大佬的博客,想着写一个花指令并且带有对应练习题目的总结。 https://blog.csdn.net/Captain_RB/article/details/123858864 https://bbs.kanxue.com/thread-279604.htm 学习花指令的准备在一个程序中想要理解发现花指令就必须要理解明白汇编指令。 push ebp —-把基址指针寄存器压入堆栈pop ebp —-把基址指针寄存器弹出堆栈push eax —-把数据寄存器压入堆栈pop eax —-把数据寄存器弹出堆栈nop —–不执行add esp,1—–指针寄存器加1sub esp,-1—–指针寄存器加1add esp,-1——–指针寄存器减1sub...
题目复现1
题目复现本周做的题 BUU-简单注册器用jadx打开apk文件 找到MainActivity分析加密方式 123456789101112131415161718192021222324#include <iostream>using namespace std;int main() { char str[] = {...
安卓逆向1
安卓逆向apk 文件结构APK 是 Android PacKage 的缩写,是 Android 源文件打包后的安装包。apk 其实就是一个 zip 格式的压缩包。想要知道 apk 包含了什么,可以修改后缀名为zip,然后用解压缩工具打开 apk 文件。 如果有 代码混淆 和 加密,通过普通解压缩工具打开里面的文件或目录会看到各种乱码。APK 文件 目录: assets 不经过 aapt 编译的资源文件, apk 中不用编译的资源(其他类型的文件)通常放在 /assets 目录和 /res/raw 目录下 drawable 图片 lib .so 文件 有的题需要逆向lib .so文件,放到IDA64位里查看 META-INF 文件摘要,摘要加密和签名证书文件目录 CERT.RSA 公钥和加密算法描述 CERT.SF 加密文件,它是使用私钥对摘要明文加密后得到的 密文信息,只有使用私钥配对的公钥才能解密该文件 MANIFEST.MF 程序清单文件,它包含包中所有文件的摘要明文 res ...
Java逆向
Java逆向最近我也在刚刚学习Java语言,那就不如趁热烧铁,开启我的Java逆向学习! 准备——工具安装jadx jadx是一款开源的DEX到Java的反汇编工具。它支持apk、dex、jar、class、zip、aar等文件。jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码,jadx已经非常接近源代码了。比较方便的是可以搜索。用来做安卓逆向的题也很不错。 官方地址:https://github.com/skylot/jadx/ jd-guiJD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse、IntelliJ的插件JD-IntelliJ。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件 借鉴学习于一位大佬的博客文章,介绍了常见Java反编译工具,很不错 ...
TEA加密算法
TEA加密算法TEA以加密解密速度快,实现简单著称 TEA算法使用64bit(8byte)的明文分组和128bit(16byte)的密钥,它使用Feistel分组加密框架,采用迭代的形式,推荐的迭代轮数是64轮,最少32轮。 简单的说就是,TEA加密解密是以原文以8字节(64位bit)为一组,密钥16字节(128位bit)为一组,(char为1字节,int为4字节,double为8字节) 该算法使用了一个DELTA常数作为倍数,它来源于黄金分割数与232的乘积,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里TEA把它定义为 δ=「(√5 - 1)231」,这个δ对应的数指就是0×9E3779B9,但有时该常数会以减法的形式出现,-0x61c88647=0×9E3779B9。 代码实现 解密只需要将加密逆过来即可 12345678910111213141516171819202122232425262728#include <iostream>//加密函数void encrypt(uint32_t* v, uint32_t* k) { ...
2025]FishingKit
[GHCTF 2025]FishingKit题目描述:一个钓鱼佬坐在河边准备钓鱼,从工具箱中掏出了钓鱼竿、钓鱼线,但是钓了半天一条鱼都没有。诶?似乎少了什么… … 拿到文件先查壳,发现这个无壳,64位。将它拖到IDA中分析。 bait是鱼饵的意思,一个勤恳的钓鱼佬怎么能没有鱼饵呢,所以我们要知道bait是什么。 如下所示,v4就是bait,这有个if语句,应该是给v4赋值的,然后就得到第二个东西(ps:我盲猜是个鱼钩)是v5,sub_7FF69CE42460函数就是v4作为密钥,将v5进行加密,得到Str1。strcmp函数将Str1与Str2进行比对,如果相同的话,就成功了,逆过来就可以得到flag。按照常规操作来讲的话,很对。。。 123456789101112131415161718192021222324252627282930from z3 import *s = Solver() # 创建Z3求解器a0,a1,a2,a3,a4,a5,a6,a7,a8,a9 = BitVecs("a0 a1 a2 a3 a4 a5 a6 a7 a8...
Z3求解器
Z3求解器0x01 了解z3并安装Z3 solver 是由微软开发的 可满足性模理论求解器(Satisfiability Modulo Theory solver, 即 SMT solver),用于检查逻辑表达式的可满足性,并可以找到一组约束中的其中一个可行解(无法找出所有的可行解)。 在这里推荐使用python语言安装z3,更加方便。 1pip install z3-solver 安装完成后,我们来学习一些z3的基本用法。 变量表示一阶命题逻辑公式由项(变量或常量)与扩展布尔结构组成,在 z3 当中我们可以通过如下方式创建变量实例: 整型 12>>> import z3>>> x = z3.Int(name = 'x') 实数类型 1>>> y = z3.Real(name = 'y') 位向量 1>>> z = z3.BitVec(name = 'z', bv = 32) 布尔类型 1>>> p =...
Misc的基本解题思路
写了一些题后,结合所学进行的一次小总结
编码解码
浅浅学习了一些关于编码解码部分的知识
upx脱壳
比较简单的知识,upx脱壳



