【Hook逆向】【buu】[Zer0pts2020]easy_strcmp
【buu】[Zer0pts2020]easy_strcmpelf文件拖入ida中查看main没啥大用,根据题目跟进strcmp也还是原来的正常的strcmp
动调看一下发现strcmp的函数变了,
a1是我们要输入的flag,a2是这个要比对的字符串
第一条语句是要计算a1的长度,抽象吧
v4是更为抽象的,哪个位运算实际上应当是i/8,把a1的字符串8个分为一组
结合下面的循环会发现 i=24因为qword_5C2570201060有3组 有用的8位数据
qword_5C2570201060[0]是0不用管
从qword_5C2570201060[1]开始思考
每次输入的字符串都要和qword_5C2570201060[1]进行相减
最后的qword_5C2570201090(a1, a2)疑似变成了strcmp
所以脚本应为
1234567891011121314151617181920212223242526272829303132333435import binasciienc = "********CENSORED********"k ...
【unity逆向】【buu】[BJDCTF2020]BJD hamburger competition
【unity逆向】【buu】[BJDCTF2020]BJD hamburger competition好久没做unity逆向有点忘了
先说工具,使用ILSpy,这个是github开源项目,
下载与食用方法:
https://blog.csdn.net/lilongsy/article/details/130179189?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172135563016800227423365%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172135563016800227423365&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-130179189-null-null.142
https://blog.csdn.net/weixin_4478 ...
【BUU】Oruga 内心os:我觉得应该叫滑冰(
【BUU】Oruga内心 os:我觉得应该叫滑冰(拖进 ida 看 hex 下面有个地方像是地图
main 函数进入后有个疑似是上下左右的部分
W:上 E:右 J:左 M 下
把地图换成一种更明确的方式
还是觉得匪夷所思,找了个 wp 看了一下,
发现是宝可梦冰面解密的那种迷宫,遇到障碍物之前是不会停下的
所输入的就是 flag
【WKCTF】so_easy
【WKCTF】so_easy用压缩包打开apk,把里面的x86_64的 .so文件解压出来拖入ida
有两种方法,一个是z3爆破,一个是根据这个魔改CRC进行逆向
CRC校验先说正版做法CRC逆向
【[CRC校验]手算与直观演示】 https://www.bilibili.com/video/BV1V4411Z7VA/?share_source=copy_web&vd_source=86d6e63e560e68bb720088caa831e036
【CRC原理】https://bbs.21ic.com/icview-2403118-1-2.html?_dsign=e20cd6df
【上面 CRC原理 看不懂先看这个】https://blog.csdn.net/eydwyz/article/details/105705831?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172121223216800182199332%2522%252C%2522scm%2522%253A%252220140713.13010 ...
【z3实践】【buu】[GWCTF 2019]xxor
【z3 实践】【buu】[GWCTF 2019]xxor拖进 ida 中
跟进 main
发现是输入的字符串经过一个 魔改 tea 加密与检查函数
跟进魔改 tea,发现只是将 delta 和异或部分多加了点东西
跟进 sub_400700
感觉要爆破
因为 v6 是 int64,所以要设置成 64 位
爆破脚本:
1234567891011121314151617181920212223242526from z3 import *enc = [0]*6for i in range(6): enc[i] = BitVec('enc['+str(i)+']',64)flag = BitVec('flag', 64)s = Solver()s.add(enc[2] - enc[3] == 0x84A236FF)s.add(enc[3] + enc[4] == 0xFA6CB703)s.add(enc[2] - enc[4] == 0x42D731A8)s.add(enc[0] == 0xDF48EF7E)s.add ...
【PE】扩大节、新增节、合并节
扩大节、新增节、合并节详细查看https://bbs.kanxue.com/thread-281836.htm#msg_header_h3_9扩大节 最好只扩大最后一个节
1、分配一块新的空间了,大小为S
2、将最后一个节的SizeOfRawData和VirtualSize改成N
N = (SizeOfRawData或者VirtualSize内存对齐后的值)+S
3、修改SizeOfImage大小
4、如果不能执行就在节的末尾的Characteristics属性改成具有可执行的功能
新增节 1、先判断节表有没有空间可以新增一个节表成员
2、在节表新增一个成员
3、修改PE头中节的数量
4、修改SizeOfImage大小
5、在原有数据的最后,新增一个节的数据(内存对齐整数)
6、修正新增节表属性
合并节先拉伸,后合并,需要用拉伸后的对齐法进行合并
1、按照内存对齐展开
2、将第一个节的内存大小、文件大小改成一样
Max = SizeOfRawData>VirtualSize ?SizeOfRawData:VirtualSize
SizeOfRa ...
【对线程的初认识和初步理解与平衡堆栈】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 ...
