【perl】【buu】[WMCTF2020]easy_re
【perl】【buu】[WMCTF2020]easy_re
也是学到新的东西了
这题经过perl加密过的
查克无壳64位 ida
找了半天没找到一点有用的东西,倒是有几个奇怪字符
后来看了一下其他人的wp发现在字符串不断出现的perl是个提示
perl【看雪perl例题】https://bbs.kanxue.com/thread-67651.htm
00405276 |. 83C4 0C |add esp, 0C00405279 |. 8945 F0 |mov dword ptr [ebp-10], eax0040527C |. 85C0 |test eax, eax0040527E |. 0F84 83000000 |je 0040530700405284 |. 68 5CCF4000 |push 0040CF5C ; ASCII “script”00405289 |. 50 |push eax0040528A |. 8B03 |mov eax, dword ptr ...
【virtualbox】【buu】 [GKCTF 2021]QQQQT
【buu】 [GKCTF 2021]QQQQT
这题吧,不难,主要是用exeinfope光看是不是upx加壳没仔细看下面的virtualbox了
查壳
看ep是.text实际上这是个 Virtual Box加壳
去找工具EnigmaVBUnpacker脱壳
脱壳后会在文件所在的文件夹中新生成QQQQT_unpacked.exe
用ida打开QQQQT_unpacked.exe
通过string找到密文
跟进
疑似是base58
【buu】【另一种抽象的xxtea】[2019红帽杯]xx
【buu】【另一种抽象的xxtea】[2019红帽杯]xxb题看了一整天,总算是看明白了TMD
查克无壳64位,拖入ida
发现一很大一坨代码,慢慢分析吧
有个输入函数和v6
这里的v6后面的Code不是上面要输入Code,跟进发现是另外的一串字符
这里也是要吐槽煞笔ida伪代码的反编译的表达形式
*(v9 + Code - v5)表示的code[v9-v5]
这v13是检测v6的长度
if语句是遍历检测输入的字符是否在v6的范围内,是的话就跳出循环,
如果有不属于v6的字符存在v11就会累加到36
v14这一小段也是检测v6长度
当有不属于v6的字符存在时就会退出
v9 - v5 < 4表达的是这一段代码只截取输入的前四个字符
这里v3搞错了应该是19,这里的code是输入
v30动调出来的是输入的flag的前四个字符
下面的连续的4个 if 表明前四个字符不能是0
首先这个循环是一个密钥扩展,是把输入的flag前四个字母扩展成16位,也就是4个4位的密钥
然后内个sub_7FF7ADD11AB0是比较抽象的xxtea加密,具体是用一个插件FindCrypt和结 ...
【buu】[GXYCTF2019]simple CPP
【buu】[GXYCTF2019]simple CPP
这题主要是分析函数,就是 CPP 反编译后的那一坨有点绕
也是看了别的师傅的 wp 才慢慢理解
这里是动调后才知道这个函数是输入,把函数名字更改更好理解
下面的 if 判断语句中的 **v40 - 5 > 25 **已经表明了输入的字符长度不能超过 30
然后是一段意义不明的函数段
接着到了这里
这里也有一些意义不明
动调发现,v41 和 qword_7FF7A0466060 都百年成了 0x1F
所以 v9 的值就是输入的 flag
走完循环后 v10 就变成了 i_will_check_is_debug_or_not
v6 就是输入的 flag 和 v10 进行逐步异或
这也是有点抽象 v43 上面已经说了不能超过 30
而这里给了个 if ( (int)v43 > 30 )和 if ( (int)v43 <= 0 )
否则会前往表示 flag 格式错误的语句
看正确情况下的赋值语句,这里是将输入的 flag 每 8 位分成一组,分别赋值给 v14,v13,v12,v11,这里 v11 ...
【unity逆向】【安卓re】【buu】[MRCTF2020]PixelShooter
【unity逆向】【安卓re】【buu】[MRCTF2020]PixelShooter
这道题是一个安卓的unity小游戏逆向
将下载的题目安装包拖入到jadx中并未发现一些有用的函数
于是就想着是不是libmain.so有相关函数
将libmain拖入到ida中也并未发现有用的函数
想到这是个unity小游戏,于是又把Assembly-CSsharp.dll拖入到ILspy中
查看UserString Heap的字符表发现了flag
【另一种smc】【对于time()与rand的一种处理方法】【buu】[网鼎杯 2020 青龙组]jocker
【另一种smc】【对于time()与rand的一种处理方法】【buu】[网鼎杯 2020 青龙组]jocker
这次的smc不同于之前的那道,这次的smc是有名字的和一定特征解smc函数的
而不是想上次要在一个大段中寻找插入的函数
查壳无壳32,ida
这个栈平衡不会影响程序调试,先不管它
这里的encrypt跟进后是没有伪代码而只有汇编代码,而且汇编代码也是非常的匪夷所思,
但是下面有个186次循环是来解它的变成正确的函数的smc
所以这个题是要动调
回到main在for循环打个断点
由于v7要等于24,所以输入一个长度为24的字符串
然后会在for循环处停下
Destination是把输入的字符串未经处理复制过去
切到汇编界面
这个地方就是smc
进行完循环后会停在左面的块中,这时停下,去解密encrypt与finally
注意找好硬编码 55 89 ,这里会有两端函数,encrypt下面就是finally
这里要解密2个函数
然后进入encrypt
这里是要要让输入的字符和buffer进行异或等于403040
写个脚本:
1234567str = 'hahah ...
【二叉树】【数据结构】【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 ...
