buuctf[刮开有奖] - writeup
一道水题下载源文件后点开是一个刮刮乐的图片,没有任何操作空间,查壳后扔进IDApro得到源代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4){ const char *v4; // esi const char *v5; // edi int v7[2]; // [esp+8h] [ebp-20030h] BYREF int v8; // [esp+10h] [ebp-20028h] int v9; // [esp+14h] [ebp-20024h] int v10; // [esp+18h] [ebp-20020h] int v11; // [esp+1Ch] [ebp-2001Ch] int v12; // [esp+2 ...
HGAME-2022-reverse-赛题复现
week1easyasm扔进IDA里只能得到一串汇编指令。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263seg003:0000 start proc nearseg003:0000 mov ax, seg dsegseg003:0003 mov ds, axseg003:0005 assume ds:dsegseg003:0005 mov ax, seg seg001seg003:0008 mov es, axseg003:000A assume es:seg001seg003:000A mov si, 0seg003: ...
TEA XTEA XXTEA 学习笔记
TEA加密算法
在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。 其设计者是剑桥大学计算机实验室的大卫·惠勒与罗杰·尼达姆。
特征
明文:两个32位无符号整数
密钥:4个32位无符号整数,即密钥长度为128位
delta常数:一般为0x9e3779b9,取的是
(5-\sqrt(2))/2*232
不影响加密算法的安全性,但是可以避免一些错误。
置换操作
加密过程
可以看出:是把输入分成两组,分别是v[0],v[1],绿色方格为做加法,红色圆圈为做异或,可以看出,用密钥k[0],k[1]加密后,把两个数做一次置换,再加密一次,这样经过多轮加密以后就可以通过简单的算法把两个数变得很复杂,满足加密算法混乱和扩散的特性。
代码实现1234567891011121314151617181920212223242526272829303132333435363738394041#include <stdio.h> #include <stdint.h&g ...
z3 solver学习笔记
安装 Z3由微软开发的一套约束求解器,你可以简单的理解它是解方程的神器。 在CTF中有的题目可能会遇到给你一堆条件,但是写不出逆向脚本,或者是使用爆破手段获取flag的时间过长,此时z3的作用便发挥了出来。
由于在上一篇 angr学习笔记中已经了解了虚拟环境 virtualenvwrapper 的用法,我们直接mkvirtualenv --python=$(which python3) z3 && pip install z3-solver即可隔离出一个z3环境,避免与angr冲突。
或者通过如下命令:
12345678910111213# 在当前目录下创建名为 angr-venv的新目录,包含干净的python环境python3 -m venv z3-venvWindows:angr-venv\Scripts\activateLinux/Mac:source z3-venv/bin/activatepip install z3-solver退出虚拟环境:deactivate
示例最简单的例子假如我有一个方程
x+y=4用z3求解的脚本
1234from z3 imp ...
长安“战疫”逆向WP
combat_slogan解压ctftest.jar文件后,在ctftest\com\xaut路径找到Main.class文件,用java反编译得到java代码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package com.xaut;import java.util.Scanner;public class Main { public static String stringTransformAscii(String value) { StringBuffer sbu = new StringBuffer(); char[] chars = value.toCharArray(); for(int i = 0; i < chars.length; ++i) { if(i != ...
一些资料的备份
ASCII码对照表
一些IDA宏定义,背不掉所以直接Backup一份QWQ123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 ...
深夜写文——致19岁的自己
虽然明天,不,今天,有早八,但总要等到夜深人静时,戴上耳机,关上台灯,打开背光,在轻柔的音乐声中,在清脆的薄膜键盘声中,才能够沉下心来,想些什么,写点什么,怀念过往,珍惜当下,憧憬未来。(NOTICE:下划线文本处有彩蛋,不要错过o)去年今日 (好像被咕了一天?)我还是一名高三学生,顾主任鼓励班级每一位同学过生日的时候都做一次演讲,也算是为复习迎考的日子增添一抹亮色,给每一位同学一个激励自己、激励大家的机会,自然,It was my turn(密码:numenor)。还记得当时A10联盟联考刚刚结束,我考的很不理想,考试爆炸,却偏偏赶上要在全班同学面前做演讲,双重的压力让我一度崩溃,本应开心的时光,仿佛蒙上了阴影,挥之不去,却也无从逃避。现在想来,对当时的自己,对每一位耐得住寂寞,受得住压力的高三学子,我抱以深深的敬意。高三的一年对我来说是很痛苦的,一次接着一次的联考,我总是因为各种原因,选择性地在理综和数学两门科目上爆炸一门,有时觉得自己考的不错,却又在语文上给我重重一击,几分之差,几十名的距离,让我难以接受,难以接受考试的残酷;难以接受自己的失误;难以接受明明已经尽了最大的努力,却 ...
虚拟机逆向初探
虚拟机保护原理内容转自https://zhuanlan.zhihu.com/p/38028963
基本原理这里的虚拟机当然并不是指VMWare或者VirtualBox之类的虚拟机,而是指的意思是一种解释执行系统或者模拟器(Emulator)。所以虚拟机保护技术,是将程序可执行代码转化为自定义的中间操作码(Operation_Code,如果操作码是一个字节,一般可以称为Bytecode),用以保护源程序不被逆向和篡改,opcode通过emulator解释执行,实现程序原来的功能。在这种情况下,如果要逆向程序,就需要对整个emulator结构进行逆向,理解程序功能,还需要结合opcode进行分析,整个程序逆向工程将会十分繁琐。这是一个一般虚拟机结构:
这种虚拟化的思想,广泛用于计算机科学其他领域。从某种程度上来说,解释执行的脚本语言都需要有一个虚拟机,例如LuaVM,Python_Interpreter。静态语言类似Java通过JVM实现了平台无关性,每个安装JVM的机器都可以执行Java程序。这些虚拟机可以提供一种平台无关的编程环境,将源程序翻译为平台无关的中间码,然后翻译执行,这是J ...
花指令初探
概念简单来说就是通过添加一些垃圾数据导致IDA分析的时候会把这些垃圾数据当成代码阻碍静态分析同时保证该程序能正常运行,我的理解是一般花指令是不会阻碍动态调试的但是却能破坏静态分析。
分类可执行式花指令可执行式花指令指的是能够正常运行的但又不改变原始程序逻辑性的一组无用指令。
这类花指令有如下特点:①可以正常运行;②不改变任何寄存器的值;③反汇编器可以正确反汇编该指令。
这种类别的花指令组合形式很多,常常用在病毒代码的变形引擎中,病毒在传播时通过变形引擎随机产生一组该类别花指令并插入到病毒正常代码中,可以改变病毒的特征码,从而起到变形的作用。
不可执行式花指令(垃圾指令)不可执行式花指令是指被插入到原始代码中但又不改变原始程序逻辑性的一组无用字节。
这类花指令有如下特点:①不可以正常运行;②不改变任何寄存器的值;③反汇编器可能会错误反汇编这些字节。
根据反汇编的工作原理,只有当花指令同正常指令的开始几个字节被反汇编器识别成一条指令时,才能有效破坏反汇编的结果。因此,插入的花指令应当是一些不完整的指令,被插入的不完整指令可以是随机选择的。正因为不可执行花指令有这些特点,该类花指令才能应用到 ...
攻防世界Reverse新手区小结
退役ACMer(其实ACM也才划水了一个多月)艰难入门CTF逆向工程,第一发学习小结。(啥也不会,只能对着IDA出的代码懵逼,天天坐牢)
Hello,CTF考察sprintf函数
可以看出输入一个字符串v9,并判断长度小于等于17,再把v9的每个字符赋值给v4,最后通过sprintf函数将v4通过%x(16进制)输出为Buffer字符串,再通过strcat函数将Buffer字符串给v10,最后将v10与v13进行比较。程序的意思是字符串转为16进制,那么我们只需要逆向把16进制转为字符串就可以了。flag:
insanityshift+F12快速打开string窗口找到flag
python-trade发现附件是一个pyc文件于是通过在线反编译网站得到python代码
12345678910111213141516import base64def encode(message): s = "" for i in message: x = ord(i) ^ 32 x = x + 16 s += chr(x) ...