idapro快捷键
看詹爹的出题文档发现有一堆快捷键不会,找了一会,从官网发现一个比较全的快捷键表 ,只不过都是英文的,尝试翻译一下并一个一个实现。
用?表示未实现,用*个数表示主观重要程度,越多越重要(吧大概)🤔
文件操作* Parse C header file…(分析C头文件):Ctrl + F9? Create ASM file…(生成ASM文件):Alt + F10* Save(保存):Ctrl + W* Exit with Save (退出并保存): Alt + X 或 Alt + F4导航** Jump to operand (跳转到操作数):Enter? Jump in a new window (跳入新窗口):Alt + Enter*** Jump to previous position( 跳转到上一个位置):Esc** Jump to next position (跳到下一个位置):Ctrl + Enter这个操作就相当于是 Esc 的逆操作,好像之前不太常用
** Jump to address…(跳转到地址):G
这win11的圆角真tm傻逼。。。
** Jump by na ...
PE文件格式学习笔记
感觉只学手操不学基础知识还是不行,趁着暑假赶紧补一补, 跟着这篇学的 。
从一次PE编辑实现弹窗开始堆理论知识之前先搞一波实操:在一个exe程序启动之前实现一个弹窗功能。
添加区段这里就用线程的LordPE来实现吧,我们先拷贝一份_LordPE_fix - 副本,打开后显示出这样的界面
这便是该程序的启动界面,我们要做的就是在这个界面之前添加一个弹窗。
我们用LordPE打开之前拷贝的副本(没错,我改我自己),显示的便是拷贝文件的一些基本信息
重点关注以下信息:
区段数目
NumberOfSections
0004
入口点
EntryPoint
0x00004340
镜像基址
ImageBase
0x00040000
镜像大小
SizeOfImages
0x00036000
点击区段,显示出区段表,正好有4项
名称后面分别是:
VOffset
VSize
ROffset
Rsize
Flags
映射入内存后的虚拟地址
映射入内存后的虚拟地址长度
文件中的位置
文件中的长度
区段属性
右击最下面的区段后点击添加区段,发现多了 ...
DSCTF-2022-Ffunction
占个坑比赛的时候硬刚的catchme,逆完SO找JNI_LOADER之后除了一堆sub函数和一个b64表啥也看不出来,然后直接润了。听大爹说直接findcrypt就能找到AES加密算法,打算做完Ffuction回来再做这个。
Ffunction解压后发现是一个exe文件和几个dll文件,由导入表知识可知,dll文件存的是一些API,在可执行文件运行到某处的时候会发生一次jmp跳转进而运行导入表中的内容,所以我们对exe文件启用动调,在Output输出框中尝试找到关键的dll文件是哪一个。
可执行文件可以直接试出flag长度为30位,我们按死F8,等程序跑飞时,输入30位测试输入,输出框跳出了load my_plugin.dll,说明关键代码在my_plugin.dll里面。
我们用打开my_plugin.dll,看到有一个叫f的函数,考虑到这个题目名字就是Ffunction,应该是关键函数,点进去看,大概分为两部分,先看第二部分。
12345678910111213141516171819202122232425262728bool __fastcall f(_BYTE *a1, c ...
TSCTF2022-reverse-赛题复现
happy mota先玩游戏,玩两局发现魔王很难打,通过npc对话发现flag被分成四段,并且玩到第11层的时候对话中有提示:11-19层的墙壁有点奇怪,发现第一串flag是TSCTF{enj。
有了玩游戏的基础,发现flag都隐藏在NPC对话中,用pyinstxtractor.py反编译main.exe得到main.py,但是main函数中的字符串经过decode后发现都是操作相关,并不涉及于NPC的对话,于是先扒文件,在\happy_mota\main\scripts目录下找到人物对话源代码,发现三段可疑代码:
12345s = b''f2 = self.parameter['2wsxdr5']for i in range(len(f2)): s += bytes([f2[i] ^ i ^ 0xC8])self.conversation_control.print_word("商人L3m0nade", "爽快!我这儿捡了个字符串:\"" + s.decode() + '\& ...
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 ...