【二叉树】【数据结构】【buu】[GUET-CTF2019]number_game
【二叉树】【数据结构】【buu】[GUET-CTF2019]number_game【二叉树】
参考链接:[详细图解二叉树四种遍历(前序中序后序层次遍历)]https://blog.csdn.net/m0_68681879/article/details/127847415?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172170617216800178534776%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=172170617216800178534776&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-127847415-null-null.142
[二叉树遍历的实现(超详细解析,小白必看系列)]https://blog.csdn.net/weixin_45 ...
【动调】【反调试绕过】【花指令nop】【buu】buu_crackMe
【动调】【反调试绕过】【花指令nop】【buu】buu_crackMe
也是去找了一个wp+学长帮助才出的这道题
差壳无可32位进入ida进入main函数
发现4011A0这个函数好像未被分析成功
跟进查看,发现有红名
把这里的花指令给nop掉:
然后把红名部分全部选中然后摁P进行重新分析成函数,
然后摁f5查看伪函数,整理后如下
BYD被骗了
回到main函数整理一下
查看sub_401830
有点长,分析一下,
上半部分主要还是检验是不是字符串一类的程序,但是要注意这个反调试
从**while ( v5 < 8 )**开始分析
这个v5<8就已经说明了密码是8位
首先是要对byte_416050进行一系列操作
然后检测调试,如果是在调试状态就进入该语句(但是正常的情况下不应该执行它,所以我们等下用ida调试的时候要绕过反调试)
然后执行密码加密 v16[v5] = byte_416050[(v7 + v12)] ^ v15[v4 - 1]
v16就是加密后的密码,它参与下一个函数的加密
紧着到来的是另一个调试检测
然后进入到sub_401710 ...
【vm逆向】【buu】[网鼎杯 2020 青龙组]singal
【vm逆向】【buu】[网鼎杯 2020 青龙组]singal
建议先把这个看下,虽然这道题没这么复杂
【系统学习vm虚拟机逆向】https://blog.csdn.net/weixin_43876357/article/details/108570305?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522172161411916800178553714%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=172161411916800178553714&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-108570305-null-null.142
查壳无壳32位进ida
将unk_403040赋值给v4
跟进vm_opera ...
【羊城杯 2020】easyre
[羊城杯 2020]easyre这题中为了方便,第一次加密的密文叫enc1,第二次加密后叫enc2,第三次加密后叫enc3exe差壳无壳ida发现有一串疑似base64的密文和3个加密函数
三个,足足三个,刚看还是觉得有点吓人,冷静下来分析
是明文经过3轮加密变成密文,然后密文和给出的疑似base64的字符进行比对
所以疑似base64的字符串就是enc3
先从第三加密个开始分析
跟进encode_three
这是个凯撒加密,大写字母,小写字母,数字分别在自己的范围中替换成enc2字母后数第3个字母(这里的明文是经过前两轮加密后的密文)
写个脚本给换回来:
123456789101112131415161718192021222324252627def caesar_cipher(text, shift): result = [] for char in text: # 如果是大写字母 if 'A' <= char <= 'Z': new_char = chr((ord ...
【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 ...