【对线程的初认识和初步理解与平衡堆栈】Youngter-drive
【对线程的初认识和初步理解与平衡堆栈】Youngter-drive查壳有壳脱壳ida
进入到函数main_0
第一个函数已经被我改过名称,里面是一个输入函数
CreateMutexW是一个Windows API函数,用于创建命名或未命名的互斥体(Mutex)对象。互斥体是一种同步对象,允许多个线程==同步==访问共享资源,确保一次只有一个线程可以访问该资源。
CreateThread是一个 Windows API 函数,用于创建一个新的线程。它允许你在==一个进程中并发执行多个线程==,每个线程可以==独立==运行不同的代码。
CloseHandle是一个 Windows API 函数,用于关闭一个内核对象的句柄。
跟进StartAddress
这里执行完encp函数会暂停100秒
跟进sub_9E119F
当StartAddress运行完暂停后运行sub_9E119F
sub_9E119F它只有一个减减的功能,然后暂停给100s
sub_9E119F暂停 ...
【PE】RVA与FOA的转换 和 空白区域添加代码
RVA与FOA的转换 和 空白区域添加代码RVA与FOA的转换RVA(相对虚拟地址):内存地址 - Imagebase
FOA(文件偏移地址):
1、判断RVA是否在头部
(1)如果在头部:FOV = RVA
2、判断RVA位于哪个节:
RVA >=节.VirtualAddress
RVA<=节.VirtualAddress + 当前节内存对齐后的大小
差值 = RVA - 节.VirtualAddress
3、FOA =节 .PointerToRawData + 差值
空白区域添加代码外链帮助:【PE文件入门,一篇就够了】https://bbs.kanxue.com/thread-281836.htm#msg_header_h3_11
我们要插入这样一个代码
123456#include<windows.h>int main(int argc, char* argv[]){ MessageBox(0, 0, 0, 0); return ...
TEA,XTEA与XXTEA及其例题
TEA,XTEA 与 XXTEA 及其例题不介绍背景了,直接上算法
TEATEA 算法是一种对称加密算法,全称为 Tiny Encryption Algorithm。它使用一个 128 位的密钥和 64 位的明文块,通过多轮迭代加密来实现加密过程。TEA 算法的加密和解密过程是相同的,只是密钥的使用顺序不同。其拥有一个叫做 Feistel 结构的密码学结构。这种密码学结构通俗的来讲就是会将加密的 plaintext 分成 L、R 两部分,并且满足 L*{i+1} = R_i, R*{i+1} = F(K_i,R_i) \oplus L_i 这种交换式的加密方式的一种结构。tea 算法最关键的是要找到 DELTA 值和 128 位的 key。其中 DELTA 常常是存在 0x9e3779b9,但是也存在 DELTA 的值被改变的代码。除了初等 tea 算法,tea 算法还有很多魔改版本。
12345678910111213141516171819202122232425262728293031323334353637383940#include <stdio. ...
【PE】DOS头-PE头-节表属性说明
DOS头-PE头-节表属性说明DOS头dos头由DOS-MZ文件头和DOS块组成
DOS-MZ文件头(下图是16位程序的表,现在已经不用这个结构体)
==!!!红色结构体成员仍在使用!!!==
中间黑色成员部分可以随意改动不影响程序的运行
最后的结构体是计算机查找pe头所在的地址因此也不能随意更改
DOS块处于DOS-MZ头与标准PE头的中间,一般由连接器填充,可以干些猥琐事情
这块数据可以随意更改不影响程序运行
PE文件头下图是pe结构体
一个程序的主要重要数据全在标准PE头和扩展PE头中
PE标识占用4字节
PE标识不能更改,程序会检测PE标识是否是正确的值
标准PE头占用20个字节
Machine标识当前这个程序运行在什么样的cpu型号上
NumberOfSections记录当前的PE文件有多少个节
TImeDataStamp是从1970年0时0分0秒开始到编译器编译当前程序的时候
PointerToSymbolTable,NumberOfSymbols与调试相关
SizeOfOptionalHeader扩展PE头的大小,默认情况32 ...
【RC4】【2024summer】Snack.exe(ver.鸿辉)
snack.exe
!!!rc4的加解密算法相同!!!
查壳无壳,用ida查看string发现有字符
说明是用python写完打包的程序
使用pyinstxtractor和uncompyle6进行解包和反编译
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information# Version : Python 3.8import pygameimport randomimport keydef initialize(key): key_length = len(key) S = lis ...
【PE】PE结构的总概与文件格式特征
PE 结构总概可执行文件:可以由操作系统进行加载执行的文件。
格式:Windows:PE Linux:ELF
领域涉及:
(1)病毒与反病毒
(2)外挂与反外挂
(3)加壳与脱壳
(4)无源码修改功能·软件汉化等等
PE 文件特征 PE 指纹(不要光看后缀名!!!)
先看前两个字节是不是 MZ
再看 3C 位置的 16 进制地址
最后看 3C 所指地址处的前两个字节是不是 PE
DOS 部分IMAGE_DOS_HEADER 64 字节
DOS 块 MZ 块末尾与 PE 头中间的部分
PE 文件头部分PE 文件头标志+PE 文件表头+PE 文件头可选部分
PE 文件头标志(DWORD Signature)
PE 文件表头(标准 PE 头) 20 字节(IMAGE_FILE_HEADER FileHeader)
标准 PE 头的结构体形式
SizeOfOptionalHeader用来标识扩展 PE 头的大小
不修改的情况下是32 位是 0xE0,64 位是 0xF0.
PE 文件头可选部分(扩展 PE 头) 240/224 字节(64 ...
buu[ACTF新生赛2020]usualCrypt
[ACTF新生赛2020]usualCrypt打开main函数
查看sub_401080
发现是base64加密
跟进sub_401000
发现是将base64的序列码改变了
回到上一级查看sub_401030
这是一个大小写切换程序
回到main函数查看aZmxhz3tignxlxj
这是加密后的字符串
所以只要将这个字符串的大小写切换并且用魔改的base64解密就得到了flag
123456789import base64string='zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9'.swapcase()#大小写转换tables64='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'#原来的base64表newtable='ABCDEFQRSTUVWXYPGHIJKLMNOZabcdefghijklmnopqrstuvwxyz0123456789+/'#现在表maketrans=str.maketrans ...
buu[HDCTF]MAZE
[HDCTF2019]Maze4这个题主要是学习花指令的去除,迷宫并不难
不过在使用upx去壳前需要把文件名中的空格去除,否则会脱壳失败
(花指令的有关内容相关请看以下文章)
https://bbs.kanxue.com/thread-279604.htm
https://blog.csdn.net/abel_big_xu/article/details/117927674
https://blog.csdn.net/m0_46296905/article/details/117336574
然后拖入ida中发现有花指令
摁u转换成二进制
摁c重新分析为代码
选定全部的红色地址摁p进行生成函数
这时main函数就被解出来了然后进入点击f5
asc_408078和dword_40807c只要放在哪就行,
但是w(上)s(下)a(左)d(右)考虑的就比较多了
shift+f12查看字符串表找到迷宫地图
长度是70个字符,可能是7*10或者10*7(建议去一些编程环境内进行排列,有字符自动对齐)
flag就是通关迷宫时键盘的输入
LitCTF2024逆向wp
litctf24(都是耻辱)RUNMRE无壳,拿查看shift+F12
第一行是base64加密后的字符串
第二行是魔改后的base表
==这是原表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/==
ezpython(与三个python的环境默认缠斗一上午)python打包成的exe我们要用pyinstxtractor.py来进行解包
解完包我们将ezpy.pyc扔进在线网站中反编译成.py
(反编译网站https://www.lddgo.net/string/pyc-compile-decompile)
1234567891011#!/usr/bin/env python# visit https://tool.lu/pyc/ for more information# Version: Python 3.11import Litctfbase64flag = input('flag:')flag = Litctfbase64 ...
汇编语言
汇编语言第一章 基础知识汇编语言的组成:==1.汇编指令(核心)==:机器码的助记符,有对应的机器码。
2.伪指令:没有对应的机器码,由编译器执行,计算机并不执行。
3.其他符号:如+、-、*、/等,由编译器 识别,没有对应的机器码。。
储存单元:==n位的cpu,一个字就有(n/8)个字节==(这应该是第二章的内容,但是我觉得首先要把单位分清楚就放在这里了)
==Byte(储存单元/字节)简写 B==
1KB=1024B 1MB=1024KB 1GB=1024MB 1TB=1024GB
1024 = 10^10
计算机最小单位是bit(比特)如果一个计算机有128个储存单元,编号从0~127
cpu对储存器都读写CPU 要想进行数据的读写,必须和外部器件(标准的说法是芯片)进行下面 3类信息的交互。1.存储单元的地址(地址信息);2.器件的选择,读或写的命令(控制信息);3.读或写的数 ...